获取su后执行的脚本的返回值

时间:2023-03-08 17:50:50

错误的方式:

# su - testuser -c "/tmp/test.sh; echo $?"
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
0

正确的方式:

# su - testuser -c '/tmp/test.sh; echo $?'
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
3

区别就在于单引号和双引号的含义不同,双引号会进行内容解析,单引号是原样传入。可以用set -x查看:

# set -x
# su - testuser -c "/tmp/test.sh; echo $?"
+ su - testuser -c '/tmp/test.sh; echo 0'
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
0
# su - testuser -c '/tmp/test.sh; echo $?'
+ su - testuser -c '/tmp/test.sh; echo $?'
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
3

理解了上面内容,就能发现,其实这样也是可以的

su - testuser -c "/tmp/test.sh; echo \$?"