
私たちは環境(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
答え2
世界中や他の場所で使用されているdaemontoolsツールセットは、長年にわたり使用されており、広く使用されています。
- ウェイン・マーシャルの囚人たち
runtool
:runtool -c /new/cwd myProgram
- ローランベルコエグゼクティブ
cd
:cd /new/cwd myProgram
- 私のスナックツールセット持つ
chdir
:chdir /new/cwd myProgram
これらはすべて、このタイプのチェーンで使用するように特別に設計されたチェーンローディングツールです。これらのツールキットには、さまざまな目的で使用できるさまざまなチェーンローディングツールがあります。
追加読書
- https://unix.stackexchange.com/a/353698/5132
- ローランベルコート(2018-08-01)。 「引用する」。実装する。 skarnet.org.
- ローランベルコート(2018-11-08)。 「引用する」。s6。 skarnet.org.
- ジョナサンデボインポラード(2018)。 」コマンドとツールのリスト」。 スナックガイド。ソフトウェア。
答え3
こんな人気番組があります。それは…椅子をつかむ…ドラムロールenv
…と呼ばれます。バージョン8.28以降、GNUバージョン(POSIXを除く)には、-C
必要に応じてディレクトリを設定するオプションがあります。
名前 env - 変更された環境でプログラムを実行する 要約 env [オプション]...[-][名前=値]...[コマンド[パラメータ]...] 説明する 環境内のすべてのNAMEをVALUEに設定し、COMMANDを実行します。 長期オプションの必須パラメーターは、短期オプションにも必須です。 -私、- 環境を無視する 空の環境で起動 -0、- 無効 各出力行は改行文字ではなく NUL で終わります。 - ゆう、- 設定をキャンセル=名前 環境から変数を削除する -氏、--chdir=ディレクトリ 作業ディレクトリをDIRに変更 - 助けるこのヘルプを表示して終了します。 - バージョン バージョン情報の出力と終了 ただ - 意味-私。 COMMAND がない場合、結果の環境が印刷されます。
答え4
一部のプログラムにはGitなどのオプションがあります。
-C <path>
現在の作業ディレクトリの代わりに
git
開始されたかのように実行されます。<path>
そして、次のことを行います。
-C dir
、--directory=dir
dir
makefile を読んだり、他の作業を行う前にディレクトリを変更してください。
そしてタール:
-C
、--directory=DIR
DIR
何もする前にに変更してください。このオプションは順序を区別します。つまり、すべての後続のオプションに影響します。