私はそれがset -e
私の友人が誤ってやめたことを知っていました。しかし、コンソールで関数を実行するなど、スクリプトがソースとして提供されている場合はどうなりますか?エラーが原因でコンソールを閉じたくないので、スクリプトを停止してエラーメッセージを表示したいと思います。
$を確認する必要がありますか?これを可能にするには、各コマンドを手動で実行しますか?
myScript.sh
問題を示すサンプルスクリプトは次のとおりです。
#!/bin/sh
set -e
copySomeStuff()
{
source="$1"
dest="$2"
cp -rt "$source" "$dest"
return 0
}
installStuff()
{
dest="$1"
copySomeStuff dir1 "$dest"
copySomeStuff dir2 "$dest"
copySomeStuff nonExistingDirectory "$dest"
}
スクリプトは次のように使用されます。
$ source myScript.sh
$ installStuff
これでコンソールが閉じます。表示されたエラーがcp
ありません。
ベストアンサー1
スクリプトをサブシェルとして実行することをお勧めします。関数定義を読み取ることができるファイルを取得することもできます。スクリプトerrexit
に独自のシェルオプションを設定させます。
コマンドラインでそれを使用する場合、source
「スクリプト」は実際に対話型シェルです。シャットダウンとは、シェルセッションを終了することを意味します。この問題を解決するにはいくつかの方法がありますが、errexit
セッションを確立したい場合は、最良の方法は次のとおりです。
#!/bin/bash
set -o errexit
source file_with_functions
do_things_using_functions
ボーナス:関数の対話型セッションを汚染しません。