我想知道可以用来从子shell更改父shell的目录的任何机制。例如,我在$ HOME中运行脚本“settings.sh”。我的$ HOME有一个目录$ HOME / TEST / run。如果我的“settings.sh”脚本如下所示
#!/bin/bash
# some shell related code
# some shell related code
cd $HOME/TEST/run
exit 0
我在$ HOME的命令提示符下执行上面的脚本。执行后,我希望我的命令提示符在目录$ HOME / TEST / run中。我明白在子shell中,它正在被cd到$ HOME / TEST / run,但是在执行结束时,它又回到了$ HOME。
使用单个脚本是否有任何优雅的方法来完成上述操作。 一种方法是修改脚本“settings.sh”以生成另一个脚本,然后使用“。$ HOME / generatedScript.sh”
答案 0 :(得分:5)
您可以做的是让shell将信息保存到文件中或打印目录或...如果父母想要,父母至少可以使用它来更改目录。
答案 1 :(得分:2)
Wes Hardaker解释了为什么执行该脚本不会导致它更改父shell的目录的原因。为了解决这类问题,你必须“编写”脚本而不是执行它。这会导致脚本中的命令在当前shell中运行,而不是在子进程中运行。
. ./settings.sh
第一个“。”是一个命令,告诉shell“源”指定的文件。以下是help .
的文档:
:.文件名[参数] 从当前shell中的文件执行命令。
Read and execute commands from FILENAME in the current shell. The entries in $PATH are used to find the directory containing FILENAME. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed. Exit Status: Returns the status of the last command executed in FILENAME; fails if FILENAME cannot be read.