我有一個功能,似乎打破了,當我打開set -e
錯誤。我懷疑它是按照預期工作的,但我看不出我做錯了什麼。設置-e使功能提前停止運行?
下面是函數:
#!/usr/bin/env bash
set -e
my_function() {
base_dir="/tmp/test"
if [ ! -d $base_dir ]; then
echo "Creating $base_dir"
mkdir -p $base_dir
touch $base_dir/some-file.txt
fi
is_edited=$(grep "foo" $base_dir/some-file.txt)
if [ ! -z $is_edited ]; then
cd $base_dir
echo "Doing stuff"
docker run --rm debian ls
fi
echo
echo "Done"
echo
}
my_function
隨着set -e
翻轉,該功能似乎沒有返回命中echo語句。關閉set -e
後,回聲語句被擊中。發生了什麼,我該如何解決這個問題?
如果grep沒有找到匹配項,它將返回一個非零的退出碼。這將被'set -e'視爲錯誤。 – Barmar
@Barmar啊,這很有道理。也許有更好的方法比使用grep還有更好的方法來處理它的返回值嗎? – jmreicha