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

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

#!/bin/bash
cd /home/artemb

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


当前回答

这种方法对我来说更容易。

假设在个人iMac上,你是管理员,当打开命令窗口时,在默认目录下/Users/jdoe,这将是进入的目录:/Users/jdoe/Desktop/Mongo/db.3.2.1/bin。

下面这些步骤可以帮助你完成工作:

vi mongobin,我进去了: cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin作为第一行。 Chmod 755 mongobin 源mongobin 松材线虫病

拖鞋!

其他回答

这种方法对我来说更容易。

假设在个人iMac上,你是管理员,当打开命令窗口时,在默认目录下/Users/jdoe,这将是进入的目录:/Users/jdoe/Desktop/Mongo/db.3.2.1/bin。

下面这些步骤可以帮助你完成工作:

vi mongobin,我进去了: cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin作为第一行。 Chmod 755 mongobin 源mongobin 松材线虫病

拖鞋!

这是以上答案的一个简化汇编。 创建shell文件shell .sh 在脚本中,在函数中更改目录

#!/bin/bash

cd folder1/folder2/

现在运行脚本。在这之前。 . 使用当前线程/会话执行脚本。

. shellfile.sh

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

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条件和不同的参数来修改代码,从而添加新的命令以进入特定的目录。你也可以从git中获取代码。

如果您运行bash脚本,那么它将在其当前环境或其子环境上操作,而不会在父环境上操作。

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

#!/bin/bash
cd $1
exec bash

这样,您将处于/home/test中,直到退出(退出或按Ctrl+C)这个shell。

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

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

. myscript.sh

的。将评估当前环境中的脚本,因此它可能会被更改