gpt4 book ai didi

bash - 即使我有一个应该阻止它的陷阱 INT,我的交互式 bash 脚本循环也会中断吗?

转载 作者:行者123 更新时间:2023-12-04 04:51:08 27 4
gpt4 key购买 nike

在这个简单的脚本上

#!/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文件也将正确设置环境。

最佳答案

以交互方式运行 bash 可以启用作业控制、历史扩展、别名和其他一些您可能不希望在脚本中出现的东西,包括对信号行为的更改。

如果您只想从 ~/.bashrc 加载变量,你有没有想过只是source ~/.bashrc ?

关于bash - 即使我有一个应该阻止它的陷阱 INT,我的交互式 bash 脚本循环也会中断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com