下面的命令给出输出并退出终端
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
在您理解为什么需要一个偶然此建议的例外。