0

別のスクリプトを起動し、直接子として持つスクリプトを作成しようとしています。私の目標は次のとおりです。

  • 子プログラムは別の $HOME を参照する必要があります
  • 子スクリプトは、現在の作業ディレクトリとは別のディレクトリ (つまり、別の pwd) で実行する必要があります。
  • 余分なシェルはありません

最初の 2 つの目標は subshel​​ls と exec で達成しましたが、3 番目の目標はまだ達成できていません。誰かが私を助けることができますか?

詳細はこちら。説明を簡単にするために、最初のスクリプトrunを 、もう 1 つのプログラムを と呼びますsleepcmd。これがsleepcmdスクリプトの内容です

echo $HOME && exec sleep 1000

実行スクリプトの内容は次のとおりです

(HOME=~/foo/bar && cd $HOME/bin && ./sleepcmd)

./sleepcmd 呼び出しの前に exec を追加する、つまり

(HOME=~/foo/bar && cd $HOME/bin && exec ./sleepcmd)

sleepcmd (または sleep) を直接実行する場合と比較して、これを 1 つの余分なシェルに取得します。

sleep 1000別の $HOME と作業ディレクトリで呼び出しながら、() サブシェルを取り除くにはどうすればよいでしょうか?

4

2 に答える 2

2

試す

pushd
VAR=value command [args...]
popd

例えば

pushd ~/foo/bar/bin
HOME=~/foo/bar ./sleepcmd
popd
于 2012-12-13T08:24:31.013 に答える
0

新しい環境とコマンドを含むファイル (例: "myscript") で "source" コマンドを使用してみてください。

source myscript

また

. myscript

myscript の上部に新しい環境をセットアップします。ただし、myscript の最後で環境を以前の状態に戻す必要があります。そうしないと、メイン スクリプトで続行されます。

于 2012-12-13T10:50:08.053 に答える