0

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

function emacs() {
    daemon /usr/bin/emacs $*
}

这应该适用于

emacs localfile.txt /tmp/anotherfile.txt

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

/iaw

4

2 回答 2

1

首先,如果你不改变参数,你会想要使用"$@",而不是$*。否则空格会导致参数列表被重新分割。

但可以肯定。尝试这个。

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作为一个守护进程工作,它可能不是由于缺乏控制终端。所以我猜实际的应用程序不是一个文本编辑器..或者是一个维护自己的窗口,或者什么的。

于 2013-08-13T02:18:55.763 回答
1

realpath <filename>做你想要的。
给它一个裸文件名,一个相对路径,一个绝对路径——没关系,它会返回绝对路径。

于 2013-08-13T02:57:14.027 回答