从脚本更改当前目录
是否有可能从脚本更改当前目录?
我想为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
的.
将在当前环境中评估脚本,因此可能会改变
鉴于答案的不可读性和过分复杂,我相信这是请求者应该做的事情
- 将该脚本添加到
PATH
- 运行脚本为
. 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
瞧!