環境変数を入れる方法についてのアイデアはありますかdtach
?基本的に継承されないようです...
FOO=bar && dtach -c /tmp/a-socket env
# env does not include $FOO
[編集する]
理由(TM)のため、そこにある種のコマンド区切り文字が必要です。 1つまたは&&。
(これはdtach固有の問題ではないことに気づきました。ただシェルの私の不十分な理解を反映するだけです...)
答え1
実際にexport
は必要ありません。export
意味は次のとおりです
各名前は、後で実行されるコマンド環境に自動エクスポートするために表示されます。 VALUEが提供されたら、エクスポートする前にVALUEを割り当ててください。
次のコマンドスキーマを使用して環境変数を公開できます。
FOO=bar dtach -c /tmp/a-socket env
それは起こらない副作用次のサブプロセス(および実行されたコマンド)はFOO=bar
環境変数を継承します。
最初の実行試みについてコメントを送ってください。&&
環境変数の構成とプロセス実行の間に演算子を追加することは意味がありません。何も実行せず(終了コード== 0
)、環境変数なしでコマンドを実行します。
答え2
あなたの例では&&
コマンド区切り文字として機能します(具体的には、最初のコマンドが成功した場合は2番目のコマンドのみが実行されます)。これは望むものではないかもしれません。次の例を考えてみましょう。
name=value;$command
name=value||$command
name=value&&$command
いずれの場合も、名前は現在のシェルの値に設定されます。最初と3番目の場合、割り当ては決して失敗しないため、$ commandコマンドが実行されます。割り当ては決して失敗しません(予約された変数を持つ奇妙なシェルでは例外が発生する可能性があります)。どんな状況でも変数は$ commandに渡されません。
name=value;export name;$command
export name=value;$command
他のコマンド区切り文字を省略する同様の例では、$ commandに変数を渡すエクスポートと、それ以降現在のセッションで実行される他のすべてのコマンドを追加します。
name=value $command
不足しているコマンド区切り文字を確認してください。この場合、変数は$ commandに渡され、コマンドにのみ渡され、現在のシェルでは使用されません。
答え3
申し訳ありません。私の質問に答えてください、&&
または;
コマンド区切り文字が必要な場合は、次のものを使用する以外に選択肢はありませんexport
。
export FOO=bar; dtach -c /tmp/a-socket env
# this time env will show FOO=bar
; unset FOO
メインシェルを汚染したくない場合は、以下を追加できます。