0
我想要一個陷阱只在整個shell腳本終止時執行。我寫了下面的shell腳本。如何僅在AIX 5.3上以ksh結束整個腳本時執行陷阱?
foo()
{
echo begin foo
trap 'echo TRAP' EXIT
echo end foo
}
bar()
{
echo begin bar
echo end bar
}
foo
bar
在我的AIX 5.3系統上,它在bash和ksh93中產生所需的輸出。陷阱是在下面的例子中最後要執行的事情。
# bash foo.sh
begin foo
end foo
begin bar
end bar
TRAP
# ksh93 foo.sh
begin foo
end foo
begin bar
end bar
TRAP
但在ksh上,陷阱在函數foo
退出時執行。
# ksh foo.sh
begin foo
end foo
TRAP
begin bar
end bar
我能做些什麼來執行我的陷阱只有在ksh腳本的終止?
在函數之外聲明它。 – tripleee 2015-03-25 11:30:30
爲什麼你需要在這麼多不同的shell下運行你的腳本?如果它在* ksh93 *和* bash *中產生所需的結果,爲什麼不堅持使用其中一個解釋器? – Kusalananda 2015-05-27 19:30:10
在* ksh93 *,* bash *和* ksh88 *下運行腳本有點像通過C++編譯器運行C程序。有些事情可能會奏效,有些事情可能會破裂。 * ksh88 *和* ksh93 *實現大致相同的核心語言,但存在差異。請參閱此處的列表:http://www.opensource.apple.com/source/ksh/ksh-13/ksh/src/cmd/ksh93/COMPATIBILITY – Kusalananda 2015-05-31 09:09:59