私たちは環境(1)実行したいコマンドの環境を変更します(例env MANPAGER=more man dtrace
:)。同様のことがありますが、コマンドが実行されるディレクトリを変更することはありますか?
理想的には次のようになりたいです。
theMagicCommand /new/cwd myProgram
このようにして、他のenv(1)と同様のコマンドと「接続」することができます。
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
これまで、次の解決策を考えてみることができますが、残念ながらそれに対応する解決策はありません。相互作用環境(1):
cd /new/cwd && myProgram
または、次の簡単なシェルスクリプトを作成できます。
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
しかし、私は(少なくともmacOSとFreeBSDに)すでに存在しているものを探しています。
myProgram
必ずしもデスクトップアプリケーションである必要はありません(この場合は次のものを使用できます)。道.desktopファイルを入力してください。)。
ベストアンサー1
AFAIK、POSIX ツールボックスにはこれらの専用ユーティリティはありません。ただし、コマンドを実行する前に、通常はsh
スクリプトと同様に環境(cwd、制限、stdout / in / err、umask ...)を設定するために呼び出されますsh
。
ただし、スクリプトをファイルに書き込む必要はなく、インラインで書くだけです。
sh -c 'CDPATH= cd -P -- "$1" && shift && exec "$@"' sh /some/dir cmd args
(ディレクトリではないと仮定-
)。CDPATH=
(環境にいる場合)を追加し、-P
より直線のように機能するようにしますchdir()
。
perl
または、デフォルトで誰がそのタスクを実行しているかを使用することもできます。chdir()
chdir()
perl -e 'chdir(shift@ARGV) or die "chdir: $!"; exec @ARGV or die "exec: $!"
' /some/dir cmd args