7

同じスクリプトで終了コマンドが実行された後に実行する必要があるコマンドがシェルスクリプトにある状況があります(知っています!!それはクレイジーに聞こえます!!

私は何かのための解決策を見つけたい

#!/bin/sh
ls -l ~/.
exit $?
touch ~/abc.txt

ここでは、touch ~/abc.txt実行後にコマンドを実行する必要exit $?があり、コマンドtouch ~/abc.txtは任意のコマンドにすることができます。

制約: 1)exit $?上記のスクリプトの一部を変更することはできません。2) コマンドは、コマンドの後にのみ実行する必要がありますexit $?

これに対する解決策があるかどうかはわかりませんが、助けていただければ幸いです。

4

4 に答える 4

10

典型的なアプローチは、トラップを設定することです。

trap 'touch ~/abc.txt' 0

これにより、シェルの終了時に touch コマンドが呼び出されます。一部のシェル ( などbash) では、スクリプトがシグナルの結果として終了した場合にもトラップが実行されますが、他のシェル ( など) では実行されdashません。最後のコマンドがexit.

于 2012-07-27T13:39:30.657 に答える
1

なぜそのようなことをしたいのかわかりませんが、おそらく次のようなことを試してみてください。スクリプトを別のスクリプトでラップします。親スクリプトで、evalやsourceなどのコマンドを使用して子スクリプトを評価し、最後のコマンドを子スクリプトから抽出して、同じ方法で個別に実行します。

于 2012-07-27T12:11:10.023 に答える
0

直接的な方法が何らかの方法で可能であるとは思えません。

しかし、回避策があるかもしれません: 実行中のスクリプトを別のプロセスでラップできますか? 次に、ラップされたスクリプトが exit() を実行し、スタックから削除されたら、ラッピング スクリプトで必要なものを呼び出すことができます。

于 2012-07-27T12:03:30.197 に答える