env(1) を実行して、実行するコマンドの環境を変更します(例:env MANPAGER=more man dtrace
)。同様のものはありますが、コマンドが開始されるディレクトリを変更するためのものですか?
理想的には、次のようにします。
theMagicCommand /new/cwd myProgram
このようにして、他のenv(1)のようなコマンドと「連鎖」させることができます。
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
これまでのところ、残念ながらenv(1)と同じinterfaceを持っていない次の解決策を考えることができます。
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ファイルで Pathキーを使用できます) )。
私の知る限り、POSIXツールチェストにはそのような専用のユーティリティはありません。ただし、sh
スクリプトで行うようにコマンドを実行する前に、sh
を呼び出して環境(cwd、limits、stdout/in/err、umask ...)をセットアップするのが一般的です。
ただし、スクリプトをファイルに記述する必要はありません。インライン化するだけです。
_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
_
Daemontoolsの世界や他の場所で使用されているツールセットには、これ以外にもさまざまなものがあります。長年持ってきました;そして広く利用可能です。
runtool
:runtool -c/new/cwd myProgram
cd
:があります。cd/new/cwd myProgram
chdir
:chdir/new/cwd myProgram
これらはすべて、チェーンローディングツールであり、まさにこの種のチェーンで使用されるように設計されています。これらのツールキットには、他の目的のためのさまざまなチェーンロードツールがあります。
そんな人気番組があります。それは...椅子につかまって...ドラムロール... env
と呼ばれています。 GNUバージョン、バージョン8.28以降、POSIXではなく、-C
オプションを使用すると、必要に応じてディレクトリを設定できます。
名前 env-変更された環境でプログラムを実行します あらすじ env [オプション] ... [-] [名前=値] ... [コマンド[ARG] ...] 説明 環境で各NAMEをVALUEに設定し、COMMANDを実行します。 長いオプションへの必須の引数は、短いオプションでも必須です。 -私、 --ignore-environment 空の環境で開始します -0、 - ヌル 各出力行を改行ではなくNULで終了します -u、 -未設定= NAME 環境から変数を削除します -C、 --chdir= DIR 作業ディレクトリをDIRに変更します - 助けて このヘルプを表示して終了します - バージョン バージョン情報を出力して終了する 単なる-意味する -私。コマンドがない場合は、結果の環境を印刷します。
Gitのような特定のプログラムには、このオプションがあります。
-C <path>
git
が現在の作業ディレクトリではなく<path>
で起動されたかのように実行します。
そして、作ります:
-C dir
、--directory=dir
Makefileを読み取る前、または何かを行う前に、ディレクトリ
dir
に移動します。
そしてタール:
-C
、--directory=DIR
操作を実行する前に
DIR
に変更してください。このオプションは順序に依存します。つまり、後続のすべてのオプションに影響します。