execvp:没有此文件或目录

execvp:没有此文件或目录

我编写了一个脚本~/_bin/bcg来调用另一个脚本,该脚本使用 gimp 重新调整目录中随机图像的大小,然后将其写回到另一个文件。然后我的(顶层)脚本用于hsetroot将 X 背景设置为该图像。

唯一的问题是,一旦我用 exec 调用其他人的脚本!/_bin/aura,我的脚本就会停止。

  1. 有没有不用 exec 来调用程序和脚本的方法?
  2. 有没有办法阻止 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";

相关内容