为了账号安全,请及时绑定邮箱和手机立即绑定

从Bash脚本更改当前目录

/ 猿问

从Bash脚本更改当前目录

烙印99 2019-11-23 13:49:39

是否可以通过脚本更改当前目录?


我想在Bash中创建用于目录导航的实用程序。我创建了一个如下所示的测试脚本:


#!/bin/bash

cd /home/artemb

当我从Bash shell执行脚本时,当前目录不会更改。是否可以通过脚本更改当前的shell目录?


查看完整描述

3 回答

?
偶然的你

您需要将脚本转换为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

}

原因是每个进程都有其自己的当前目录,并且当您从外壳执行程序时,它将在新进程中运行。标准的“ cd”,“ pushd”和“ popd”内置于shell解释器中,因此它们会影响shell进程。


通过使程序成为shell函数,您将添加自己的进程内命令,然后任何目录更改都会反映在shell进程中。


查看完整回答
反对 回复 2019-11-23
?
桃花长相依

启动脚本时,将创建一个仅继承您的环境的新进程。当它结束时,它结束。您当前的环境保持不变。


相反,您可以像这样启动脚本:


. myscript.sh

该.会在目前的环境评估脚本,所以它可能被改变


查看完整回答
反对 回复 2019-11-23
?
慕尼黑8549860

鉴于答案的可读性和过于复杂,我认为这是请求者应该做的

  1. 将该脚本添加到 PATH

  2. 运行脚本为 . scriptname

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


查看完整回答
反对 回复 2019-11-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信