現在のシェルで特定のタスクを実行する方法

現在のシェルで特定のタスクを実行する方法

現在、シェルで実行できるbashスクリプトまたは同様のスクリプトを作成したいと思います。

 echo '#!/bin/bash 
  export foo="bar" ' > zoom.sh

ただし、現在のプロセスでこのスクリプトを実行するには、次の手順を実行します。

exec ./zoom.sh

その後、私の端末は「Process Completed」で終了し、使用してもset +eまだ終了します。

そして、現在のシェルでジョブを実行するのsourceは、evalevalが最善の選択でしょうか? bash機能は機能します。ただし、source最初に使用するにはユーザーに依存する必要があります。

ベストアンサー1

マニュアルによると、execは新しいプロセスを作成せずに現在のシェルを置き換えるだけなので、実行後にセッションも終了します。

exec [-cl] [-a name] [command [arguments]]:
コマンドを指定するとシェルを置き換えます。新しいプロセスは作成されません。これらのパラメーターはコマンドのパラメーターになります。 -lオプションが指定されると、シェルはコマンドに渡された0番目の引数の先頭にダッシュを配置します。これが login(1) が行うことです。この-cオプションを使用すると、コマンドは空の環境で実行されます。指定された場合、 -aシェルは実行されたコマンドの0番目の引数として名前を渡します。何らかの理由でコマンドを実行できない場合、シェルオプションが有効になっていないと非対話型シェルは終了しexecfail、その場合は失敗を返します。ファイルを実行できない場合、対話型シェルは失敗を返します。コマンドを指定しないと、すべてのリダイレクトが現在のシェルに適用され、戻り状態は0です。リダイレクトエラーがある場合、戻り状態は1です。

$ cat zoom.sh
#!/bin/bash
export foo="bar"
echo $?
$ exec ./zoom.sh
0
Connection to localhost closed

おすすめ記事