art*_*emb 175 bash environment
是否可以从脚本更改当前目录?
我想在Bash中为目录导航创建一个实用程序.我创建了一个如下所示的测试脚本:
#!/bin/bash
cd /home/artemb
Run Code Online (Sandbox Code Playgroud)
当我从Bash shell执行脚本时,当前目录不会更改.是否可以从脚本中更改当前的shell目录?
Nor*_*rtl 203
启动脚本时,会创建一个仅继承环境的新进程.当它结束时,它结束.您当前的环境保持不变.
相反,您可以像这样启动脚本:
. myscript.sh
Run Code Online (Sandbox Code Playgroud)
在.
将评估在当前环境中的脚本,所以它可能被改变
小智 164
您需要将脚本转换为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
}
Run Code Online (Sandbox Code Playgroud)
原因是每个进程都有自己的当前目录,当您从shell执行程序时,它将在新进程中运行.标准的"cd","pushd"和"popd"内置于shell解释器,因此它们会影响shell进程.
通过使程序成为shell函数,您将添加自己的进程内命令,然后任何目录更改都会反映在shell进程中.
小智 38
将上述内容放在一起,您可以创建一个别名
alias your_cmd=". your_cmd"
Run Code Online (Sandbox Code Playgroud)
如果你不想写领先的"." 每次要将脚本源代码发送到shell环境时,或者只是不想记住必须完成脚本才能正常工作.
aka*_*rca 31
如果您使用bash,可以尝试别名:
进入.bashrc文件添加以下行:
alias p='cd /home/serdar/my_new_folder/path/'
Run Code Online (Sandbox Code Playgroud)
当您在命令行上写"p"时,它将更改目录.
phi*_*rdy 16
如果您运行bash脚本,那么它将在其当前环境或其子环境上运行,而不是在父环境中运行.
如果目标是运行您的命令:goto.sh/home/test然后在/ home/test中以交互方式工作,一种方法是在脚本中运行bash交互式子shell:
#!/bin/bash
cd $1
exec bash
Run Code Online (Sandbox Code Playgroud)
这样你将进入/ home/test,直到你退出(退出或Ctrl + C)这个shell.
seb*_*seb 13
使用pushd,当前目录被推送到目录堆栈并且它被更改为给定目录,popd获取堆栈顶部的目录然后更改为它.
pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null
Run Code Online (Sandbox Code Playgroud)
只需转到
yourusername/.bashrc (or yourusername/.bash_profile on MAC) by an editor
Run Code Online (Sandbox Code Playgroud)
并将此代码添加到最后一行旁边:
alias yourcommand="cd /the_path_you_wish"
Run Code Online (Sandbox Code Playgroud)
然后退出编辑器。
然后输入:
source ~/.bashrc or source ~/.bash_profile on MAC.
Run Code Online (Sandbox Code Playgroud)
现在您可以使用:您的终端命令