以下のコマンドは出力を提供し、端末を終了します。
exec sleep 60
exec pwd
次のコマンドはエラーを発生させます。実行動作に関する提案を提供してください。
$ exec test1.sh
-bash: exec: test1.sh: not found
$ exec cd /home/
-bash: exec: cd: not found
答え1
test1.sh
パスにない可能性が高いです。test1.sh
現在ディレクトリにある場合は、次を使用します。exec ./test1.sh
それ以外の場合は、フルパスを指定するか、コマンドをに配置します
$PATH
。cd
は組み込みシェルであり、システムで使用できるこのユーティリティの外部バリエーションはありません。組み込みコマンドではなく外部コマンドに置き換えるようにシェルにのみ要求できます。全く知らない何代わりに試してみてくださいどのように誰でも試してみましたが、何と言えるのかわかりません。
たとえば、中間シェルで二重実行を実行できます。
exec sh -c 'cd /home && exec sleep 60'
これにより、追加のシェルを残さずに
sleep
現在の作業ディレクトリが変更された状態でコマンドが実行されます。/home
答え2
実際に質問しなかったので、わかりません。」ターミナルを出る「」も問題です次のコマンドはエラーを発生させます。。
他の人は実行しようとするとtest1.sh
エラーが発生する理由を説明しましたが、完全性のためにここでもう一度繰り返します。これは、検索パス($PATH
変数)に意図的に現在のディレクトリが含まれていないためです。その中にないものを実行するには、$PATH
少なくとも1つのディレクトリ区切り文字を含める必要があります。現在のディレクトリにあるエントリに対する最も短い解決策は、名前の前に./
;を付けることです。 (./test1.sh
たとえば、絶対パスを使用することもできますが、/home/myusername/test1.sh
より多くの入力が必要です。)
さらに重要なのは、exec
私の考えでは、アプリケーションを実行するために必要な期待があるようです。しかし、実際にはそうではありません。実際、この動詞がしばらく存在することを忘れてください。*を絶対に使用しないでくださいexec
。
コマンドの実行にのみ使用してください。したがって、最初のサンプルセットでは、次のように書くだけです。
sleep 60
pwd
そして第二セットでは
./test1.sh
cd /home
*少なくともexec
なぜ必要なのか理解するまで偶然これは推奨事項の例外です。