0

プロセスをデーモンとして開始する関数またはエイリアスを定義したいのですが、渡されたファイル名を引き続き取得できます。考える:

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

realpath <filename>あなたが望むことを正確に行います。
裸のファイル名、相対パス、絶対パスを指定します-関係ありません。絶対パスが返されます。

于 2013-08-13T02:57:14.027 に答える
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 に答える