我编写了一个脚本~/_bin/bcg
来调用另一个脚本,该脚本使用 gimp 重新调整目录中随机图像的大小,然后将其写回到另一个文件。然后我的(顶层)脚本用于hsetroot
将 X 背景设置为该图像。
唯一的问题是,一旦我用 exec 调用其他人的脚本!/_bin/aura
,我的脚本就会停止。
- 有没有不用 exec 来调用程序和脚本的方法?
- 有没有办法阻止 exec 切断我的脚本?
如果我在不使用 exec 的情况下运行,我会得到:
execvp:没有此文件或目录
我认为这意味着 bash 隐式使用某个程序execvp
来解析每一行,而该程序无法找到(或不会执行)~/_bin/aura
。
我可以在终端输入每一行并得到我想要的内容。我只是不能把所有内容都放在脚本中,但这就是我想要的。
我能做些什么?
#!/bin/bash
if [ -f ~/.bcg.bmp ]
then
rm ~/.bcg.bmp
fi
~/_bin/aura "~/_wall";
hsetroot -center ~/.bcg.bmp
答案1
通常,当您在 bash 脚本中调用命令时,shell 会等到命令完成后再运行下一个命令。当您使用 时exec
,您是在告诉 shell 用即将运行的命令替换自身,即命令启动后就没有 shell 了。因此,当命令完成时,就好像原始脚本也完成了一样。exec
如果您希望脚本在命令完成后继续运行,则必须在不执行 的情况下运行命令。
execvp: No such file or directory
看起来不像是 bash 错误消息。它可能来自脚本aura
,该脚本正在尝试运行在搜索路径中找不到的某些内容。
答案2
当你引用 ~ 时,它会失去其特殊行为,但你可以使用 $HOME
#~/_bin/aura "~/_wall";
~/_bin/aura "$HOME/_wall";