要传递给守护进程的bash选择性文件名扩展

要传递给守护进程的bash选择性文件名扩展,bash,daemon,expansion,Bash,Daemon,Expansion,我想定义一个函数或别名,它作为守护进程启动一个进程,但仍然可以查找传递给它的文件名。思考: function emacs() { daemon /usr/bin/emacs $* } 这应该对你有用 emacs localfile.txt /tmp/anotherfile.txt 我可能需要一个将localfile.txt更改为$PWD/localfile.txt的函数,但不需要/tmp/anotherfile.txt。有没有一种优雅的方式可以做到这一点?谢谢你的建议。如果不是,我正

我想定义一个函数或别名,它作为守护进程启动一个进程,但仍然可以查找传递给它的文件名。思考:

function emacs() {
    daemon /usr/bin/emacs $*
}
这应该对你有用

emacs localfile.txt /tmp/anotherfile.txt
我可能需要一个将localfile.txt更改为$PWD/localfile.txt的函数,但不需要/tmp/anotherfile.txt。有没有一种优雅的方式可以做到这一点?谢谢你的建议。如果不是,我正在考虑用perl编写这个


/根据

首先,如果您没有更改参数,您应该使用
“$@”
,而不是
$*
。否则,空格将导致参数列表被重新拆分

当然可以。试试这个

function emacs() {
  local args=() a
  for a in "$@"; do 
    case "$a" in [/-]*) args+=("$a");;  # pass options and absolute filenames as-is
                     *) args+=("$PWD/$a");; # absolutify anything else
    esac
  done
  daemon "$(type -P emacs)" "${args[@]}"
}
对于不是文件的任何选项参数,这仍然会中断,但这只是一个开始

但是,这假设
emacs
作为守护进程工作,但由于缺少控制终端,它可能没有这样做。所以我猜实际的应用程序不是文本编辑器。。或者是一个维护自己的窗口或其他东西的程序。

realpath
完全按照您的要求执行。

给它一个简单的文件名,一个相对路径,一个绝对路径-没关系,它会返回绝对路径。

介意告诉我们您真正想要运行函数的可执行文件吗?因为我不知道emacs在后台是如何工作的。谢谢。实际上,emacs可以很好地作为X gnome应用程序使用。我想确保没有任何日志或错误发送到启动终端,并且我可以终止启动终端。我知道nohup和&>可以完成这项工作,但daemon似乎很适合这个功能。函数emacs(){daemon/usr/bin/emacs`realpath$*`}@user1539216,很高兴提供帮助。请考虑接受这个答案。请看“”@user1539216我突然想到要教你钓鱼,而不仅仅是给你一条鱼。当我第一次看到你的问题时,我实际上也不知道realpath。我只是运行了
apropos path
来获取涉及路径的函数的人工页面列表,然后在那些看起来可能的页面上运行
man
,直到找到我想要的。(如果您不熟悉手册页,请退出该页。)