2番目の答えで述べたように、シェルスクリプトでエラー処理を実装しようとしています。$?使用のベストプラクティス バッシュから?
私のスクリプトは次のとおりです
#!/bin/bash
try() {
"$@"
code=$?
if [ $code -ne 0 ]
then
echo "oops $1 didn't work"
exit 1
fi
}
try myvar=$(mktemp -p ./)
スクリプトは次のように終了します。
./test.sh: line 4: myvar=./tmp.scNLzO1DDi: No such file or directory
oops myvar=./tmp.scNLzO1DDi didn't work
ただ、
myvar=$(mktemp -p ./)
もちろんうまくいきます。 $ myvarは一時ファイルのフルパスと名前を返します。
try() が必要な操作を実行できるように、文全体とその結果を try() に渡しながら、tmp ファイルの名前を変数 myvar に代入する文をどのように取得できますか?ありがとうございます。
答え1
使用すると、引数リストの生成中に呼び出しが行われる前にtry myvar=$(mktemp -p ./)
with サブシェルが実行されます。mktmp
try
try
後でサブシェルを拡張するには、次のパラメータを引用する必要がありますtry
。
try 'myvar=$(mktemp -p ./)'
後で拡張するには、最初の行の代わりにをeval "$@"
使用する必要があります。"$@"
try
答え2
評価されたラッパーの代わりにエラートラップを使用したいと思います。
err_handler () {
code=$?
if [ $code -ne 0 ]
then
echo "oops $1 didn't work"
exit 1
fi
}
trap 'err_handler' ERR
myvar=$(mktemp -p ./)
trap ERR