为何使用sh xx.sh和./xx.sh运行的结果不同呢?
发表于 : 2011-01-13 9:35
例如我要运行这个shell script
vi sh01.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World!\a\n"
exit 0
如果我使用shsh01.sh来运行,则会显示-e Hello World!
如果我使用./sh01.sh来运行,则显示正常:Hello World!
而且发现这不是特例,例如
vi sh06.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0
[ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh, interrupt!" && exit 0
echo "I don't know what your choice is" && exit 0
使用./sh06.sh非常正常,
但是使用sh sh06.sh就会显示:
Please input (Y/N):y
[:10:y:unexpected operator
[:11:y:unexpected operator
I don't know what your choice is
以上如果都用source运行,显示都正常,不过都会因为script里面的exit 0而导致整个shell的退出
我知道使用source是在父shell运行script的,而是用路径或者sh是在子shell运行的,是不是因为这种原因导致了三种运行方式都有不同的结果?
大侠能否具体的说明?谢谢
vi sh01.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World!\a\n"
exit 0
如果我使用shsh01.sh来运行,则会显示-e Hello World!
如果我使用./sh01.sh来运行,则显示正常:Hello World!
而且发现这不是特例,例如
vi sh06.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0
[ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh, interrupt!" && exit 0
echo "I don't know what your choice is" && exit 0
使用./sh06.sh非常正常,
但是使用sh sh06.sh就会显示:
Please input (Y/N):y
[:10:y:unexpected operator
[:11:y:unexpected operator
I don't know what your choice is
以上如果都用source运行,显示都正常,不过都会因为script里面的exit 0而导致整个shell的退出
我知道使用source是在父shell运行script的,而是用路径或者sh是在子shell运行的,是不是因为这种原因导致了三种运行方式都有不同的结果?
大侠能否具体的说明?谢谢