シェルスクリプトはエラー終了の代わりにエラーを返します。

シェルスクリプトはエラー終了の代わりにエラーを返します。

私はそれが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

ボーナス:関数の対話型セッションを汚染しません。

おすすめ記事