Linux 中的 exec 命令未找到错误

Linux 中的 exec 命令未找到错误

下面的命令给出输出并退出终端

exec sleep 60
exec pwd

下面的命令会抛出错误。请就 exec 行为提出建议

$ exec test1.sh
-bash: exec: test1.sh: not found

$ exec cd /home/
-bash: exec: cd: not found

答案1

  • test1.sh很可能不在路径中。

    test1.sh如果位于当前目录中,请使用它:

    exec ./test1.sh
    

    否则,请指定完整路径或将命令放在$PATH.

  • cd是一个内置的 shell,并且您的系统上没有可用的该实用程序的外部变体。

    您只能要求 shell 将自身替换为外部命令,而不能使用内置命令。不知道什么尝试而不是如何有人尝试过,我不确定我能说什么。

    例如,您可以从中间 shell 执行双重执行:

    exec sh -c 'cd /home && exec sleep 60'
    

    这将使sleep命令在当前工作目录更改为 的情况下运行,/home而不会留下任何额外的 shell。

答案2

您实际上还没有提出问题,因此不清楚“退出航站楼“ ” 也是一个问题以下命令会引发错误”

其他人已经解释了为什么尝试运行test1.sh会引发错误,但为了完整起见,我将在这里重申这一点。这是因为您的搜索路径($PATH变量)故意不包括当前目录。要运行不在其中的内容,$PATH您必须至少包含一个目录分隔符。对于当前目录中的某些内容,最短的解决方案是在其名称前加上./;前缀。所以你最终会得到./test1.sh. (例如,您也可以使用绝对路径,/home/myusername/test1.sh但这需要更多的输入。)

更重要的是,我认为,您似乎有exec运行应用程序所需的期望。事实并非如此。事实上,我建议你暂时忘记这个动词的存在。切勿使用exec*

只需使用它们即可运行命令。因此,在第一组示例中,您只需编写以下内容:

sleep 60
pwd

而在第二盘中,

./test1.sh

cd /home

* 至少,exec在您理解为什么需要一个偶然此建议的例外。

相关内容