在这个简单的脚本上
#!/bin/bash -i
trap 'echo "(ctrl+c was hit)"' INT
while true; do
echo -n "hit Enter..";read
echo "still on loop"
done
如果我按 ctrl+c 它将退出循环
如果我让它不与第一行交互#!/bin/bash
,它会起作用!
问题是我有几个脚本(使用存储在的“启动应用程序”运行~/.config/autostart
)只能在启用交互性的情况下正常工作#!/bin/bash -i
,主要是因为它们加载了选项.bashrc
授予的再次-i
。
有小费吗?
编辑:我在请求我的~/.bashrc
文件时发现了这个:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
这可以防止将该文件作为非交互式脚本中的源加载,我没有把它放在那里,我不知道它为什么在那里......
编辑:所以,由于问题是加载设置在的内容~/.bashrc
,但脚本的行为并不奇怪,我发现由存储在的“启动应用程序”启动的脚本~/.config/autostart
可能会以这种方式运行:
xterm -e "bash -i -c myScript.sh"
#or
bash -i -c 'xterm -e "myScript.sh"' #this way the title looks better
所以脚本不会有-i
选项,只会从#!/bin/bash
正常运行开始,并且~/.bashrc
文件也会正确设置环境。