从脚本更改当前目录

是否有可能从脚本更改当前目录?

我想为bash中的目录导航创build一个util。 我创build了如下所示的testing脚本:

#!/bin/bash cd /home/artemb 

当我从bash shell执行脚本时,当前目录不会改变。 是否有可能从脚本中更改当前shell目录?

您需要将脚本转换为shell函数:

 #!/bin/bash # # this script should not be run directly, # instead you need to source it from your .bashrc, # by adding this line: # . ~/bin/myprog.sh # function myprog() { A=$1 B=$2 echo "aaa ${A} bbb ${B} ccc" cd /proc } 

原因是每个进程都有自己的当前目录,当你从shell执行一个程序时,它将在一个新的进程中运行。 标准的“cd”,“pushd”和“popd”内置于shell解释器,以便它们影响shell进程。

通过将程序设置为shell函数,您将添加自己的进程内命令,然后将所有目录更改反映到shell进程中。

当您启动脚本时,会创build一个只inheritance您的环境的新进程。 当它结束时,它结束。 您当前的环境保持原样。

相反,你可以像这样开始你的脚本:

 . myscript.sh 

. 将在当前环境中评估脚本,因此可能会改变

鉴于答案的不可读性和过分复杂,我相信这是请求者应该做的事情

  1. 将该脚本添加到PATH
  2. 运行脚本为. scriptname . scriptname

. (点)将确保脚本不在子shell中运行。

把上面的内容放在一起,你可以做一个别名

 alias your_cmd=". your_cmd" 

如果你不想写的领先的“。” 每次你想把你的脚本发送到shell环境,或者你只是不想记住,脚本必须正确工作。

如果你使用bash,你可以尝试别名:

进入.bashrc文件添加这一行:

 alias p='cd /home/serdar/my_new_folder/path/' 

当你在命令行上写“p”时,它会改变目录。

如果你运行一个bash脚本,那么它将运行在当前的环境或者它的subprocess上,而不是父进程。

如果目标是运行你的命令:goto.sh / home / test然后在/ home / test中以交互方式工作的一种方法是在脚本中运行bash交互式子shell:

 #!/bin/bash cd $1 exec bash 

这样,你将在/ home / test中,直到你退出(退出或Ctrl + C)这个shell。

使用pushd将当前目录压入目录堆栈,并将其更改为给定目录,然后popup堆栈顶部的目录并更改为该目录。

 pushd ../new/dir > /dev/null # do something in ../new/dir popd > /dev/null 

我已经做了一个脚本来改变目录。 看看: https : //github.com/ygpark/dj

只需去

 yourusername/.bashrc (or yourusername/.bash_profile on MAC) by an editor 

并在最后一行旁边添加此代码:

 alias yourcommand="cd /the_path_you_wish" 

然后退出编辑。

然后键入:

 source ~/.bashrc or source ~/.bash_profile on MAC. 

现在你可以在terminal中使用: yourcommand

基本上我们使用cd..从每个目录回来。 我想通过提供一次需要返回的目录数量来使它更容易。 您可以使用别名命令使用单独的脚本文件来实现此目的。 例如:

code.sh

 #!/bin/sh _backfunc(){ if [ "$1" -eq 1 ]; then cd .. elif [ "$1" -eq 2 ]; then cd ../.. elif [ "$1" -eq 3 ]; then cd ../../.. elif [ "$1" -eq 4 ]; then cd ../../../.. elif ["$1" -eq 10]; then cd /home/arun/Documents/work fi } alias back='_backfunc' 

在当前shell中使用source code.sh ,您可以使用:

 $back 2 

从当前目录返回两个步骤。 在这里详细解释。 这里还解释了如何将代码放在〜/ .bashrc中,以便每一个打开的新shell都会自动拥有这个新的别名命令。 您可以通过添加更多if conditions和不同的参数来修改代码,从而添加新的命令以转到特定的目录。 你也可以在这里从git中取出代码。

这种方法对我来说比较容易。

假设你是一个pipe理员的个人iMac,在打开命令窗口的默认目录下,/ Users / jdoe,这将成为目录:/Users/jdoe/Desktop/Mongo/db.3.2.1 /箱。

这些是可以完成工作的步骤:1.我用mongobininput:“cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin”作为第一行。 2. chmod 755 mongobin 3.源mongobin 4. pwd

瞧!