我想定义一个函数或别名,它将一个进程作为一个守护进程启动但是仍然可以传递给它的文件名。认为:
function emacs() {
daemon /usr/bin/emacs $*
}
这适用于
emacs localfile.txt /tmp/anotherfile.txt
我可能需要一个将localfile.txt更改为$ PWD / localfile.txt的函数,而不是/tmp/anotherfile.txt。有一种bash优雅的方式来做到这一点?建议赞赏。如果没有,我想在perl中写这个。
/ IAW
答案 0 :(得分: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
作为守护进程工作,由于缺少控制终端,它可能不会。所以我猜测实际应用程序不是文本编辑器..或者是维护自己的窗口或其他东西。
答案 1 :(得分:1)
realpath <filename>
完全符合您的要求
给它一个裸文件名,一个相对路径,一个绝对路径 - 无所谓,它将返回绝对路径。