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

时间:2013-08-13 00:53:40

标签: bash daemon expansion

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

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

这适用于

emacs localfile.txt /tmp/anotherfile.txt

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

/ IAW

2 个答案:

答案 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>完全符合您的要求 给它一个裸文件名,一个相对路径,一个绝对路径 - 无所谓,它将返回绝对路径。