Answers:
这是一种预期的行为,并且已经讨论了多次。
该脚本在子外壳程序中运行,并且无法更改父外壳程序工作目录。完成时会失去效果。
要永久更改目录,应提供脚本源,如下所示:
. ./script
source ./script
一样的吗?
.
和source
bash相等。2. ./
如果文件名在同一目录中,则无需在文件名前使用。可以仅运行以下命令:. script
exec bash
末bash脚本在其当前环境或其子级环境上运行,但绝不在其父级环境上运行。
但是,经常会问这个问题,因为一个人想在另一个目录中执行 bash脚本后,留在某个目录中的bash提示符下。
如果是这种情况,只需在脚本末尾执行一个子bash实例:
#!/usr/bin/env bash
cd desired/directory
exec bash
这将创建一个新的子外壳。键入exit
以返回到最初启动脚本的第一个外壳程序。
exec
通常被认为是无赖的最后手段。.:)
exit
(或Ctrl + D)完全终止会话,则必须执行11到21次。(2)使用可执行脚本的另一个缺点是,如果您在交互式shell会话中设置了任何shell选项(例如 dotglob
或 globstar
),则会丢失它们,因为您正在启动新的shell。
为什么不使用它的“ exec”接缝来完全按照我的意愿去做。
#!/bin/bash
cd someplace
exec bash
~/someplace
exit
(或Ctrl + D)完全终止会话,则必须执行11到21次。
dotglob
或 globstar
),则会丢失它们,因为您正在启动新的外壳程序。…(续)
您可以使用函数或使用&&进行此操作。下面的示例将安装Zabbix并创建一个文件,其中包含一行。
例如:
#!/bin/bash
# Create Function:
installZabbix(){
cd /usr/src/zabbix-4.2.4;
./configure --enable-agent;
make install;
cd /usr/src/;
>file;
echo "Hi, this is a file." >>file;
}
# Call the function:
installZabbix
要么:
#!/bin/bash
cd /usr/src/zabbix-4.2.4 && ./configure --enable-agent && make install && cd /usr/src && >file && echo "Hi, this is a file." >>file
return
退出以这种方式获得的脚本的方式,而不是exit
-它们类似于shell函数,并且exit
将退出获得该脚本的shell。