0
我使用這個:Cygwin的1.7.15處理的shell腳本「設置-e」(錯誤子shell導致母公司退出)
$ uname -a
CYGWIN_NT-6.1 bassoon 1.7.15(0.260/5/3) 2012-05-09 10:25 i686 Cygwin
$ bash --version
GNU bash, version 4.1.10(4)-release (i686-pc-cygwin)
$ cat myexpr.sh
#!/bin/sh
echo "In myexpr, Before expr"
ac_optarg=`expr x--with-gnu-as : 'x[^=]*=\(.*\)'`
echo "ac_optarg=$ac_optarg"
echo "In myexpr, After expr"
$ cat myexpr2.sh
#!/bin/sh
set -e
echo "In myexpr, Before expr"
ac_optarg=`expr x--with-gnu-as : 'x[^=]*=\(.*\)'`
echo "ac_optarg=$ac_optarg"
echo "In myexpr, After expr"
兩個腳本之間的唯一區別是,myexpr2 .sh使用「set -e」
$ echo $$
2880
$ ./myexpr.sh
In myexpr, Before expr
ac_optarg=
In myexpr, After expr
$ ./myexpr2.sh
In myexpr, Before expr
到目前爲止的預期行爲。
如果我這樣做的母貝(PID 2880,以上):
$ set -e
$ ./myexpr.sh
父shell退出!這是上面的pID 2880,我在其中設置了「-e」
這不是Linux或cygwin 1.5.12上的行爲。這是cygwin或BASH上cygwin的錯誤嗎?
預期的行爲是'ac_optarg'有一個空值?我認爲你的'expr'命令有問題,這會使'set -e'放棄第二個腳本。 – chepner
嗨,是的,預期的行爲是ac_optarg將爲空,因爲正則表達式不會成功。這種不常見的行爲是當我在父shell中設置「-e」時,父shell退出。如果我在父shell中設置「-e」並執行myexpr.sh(爲了安全起見,我還將exit 0添加到最後一行),父shell將退出。僅在1.7g的cygwin上 –