exec也是讓script在同一個進程上執行,但是原有進程則被結束了
指令碼內容:
root@james-desktop:/opt/qt-everywhere/marvell/APP/applications/factory-roast# cat 1.sh
#!/bin/sh
A=B
echo "PID for 1.sh :$$"
export A
echo "1.sh \$A is $A"
case $1 in
exec)
echo "using exec..."
exec ./2.sh;;
source)
echo "using source..."
source ./2.sh;;
*)
echo "using fork..."
./2.sh;;
esac
echo "PID for 1.sh after run 2.sh: $$"
echo "1.sh \$A is $A"
root@james-desktop:/opt/qt-everywhere/marvell/APP/applications/factory-roast# cat 2.sh
#!/bin/sh
echo "PID for 2.sh :$$"
echo "2.sh get \$A=$A from 1.sh"
A=C
export A
echo "2.sh \$A is $A"
運行結果:
root@james-desktop:/opt/qt-everywhere/marvell/APP/applications/factory-roast# ./1.sh
PID for 1.sh :8152
1.sh $A is B
using fork...
PID for 2.sh :8153
2.sh get $A=B from 1.sh
2.sh $A is C
PID for 1.sh after run 2.sh: 8152
1.sh $A is B
root@james-desktop:/opt/qt-everywhere/marvell/APP/applications/factory-roast# ./1.sh source
PID for 1.sh :8158
1.sh $A is B
using source...
PID for 2.sh :8158
2.sh get $A=B from 1.sh
2.sh $A is C
PID for 1.sh after run 2.sh: 8158
1.sh $A is C
root@james-desktop:/opt/qt-everywhere/marvell/APP/applications/factory-roast# ./1.sh exec
PID for 1.sh :8159
1.sh $A is B
using exec...
PID for 2.sh :8159
2.sh get $A=B from 1.sh
2.sh $A is C