我想设置一个shell脚本,只有从交互式shell中调用会话才会启动screen
会话(或重新加入现有会话)。我所看到的解决方案是检查是否$-
包含字母“i”:如何从shell脚本中判断调用它的shell是否是交互式shell?
#!/bin/sh -e
echo "Testing interactivity..."
echo 'Current value of $- = '"$-"
if [ `echo \$- | grep -qs i` ]; then
echo interactive;
else
echo noninteractive;
fi
然而,这种失败,因为脚本是由一种新的非交互shell中运行,调用在顶部的#!/bin/sh
的结果。如果我编写脚本而不是运行脚本,它可以按照需要运行,但这是一个丑陋的黑客。当我运行它时,我宁愿让它工作。
那么如何测试脚本中的交互性呢?
我只是想做点出来你的shebang说“sh”,但你的问题说“bash”。如果你期望在你的脚本中使用Bash特性,你应该将你的shebang设置为'#!/ bin/bash'(即使在你的系统中'sh'被符号链接到'bash')。 – 2010-07-14 13:18:54