从脚本中更改shell目录?

时间:2010-04-04 23:40:47

标签: linux bash

我想制作一个脚本(to),让我更容易输入文件夹。

所以,例如。如果我键入“to apache”,我希望它将当前目录更改为/ etc / apache2。

然而,当我在脚本中使用“cd”命令时,似乎它改变了脚本中的路径,因此shell中的路径没有改变。

我怎么能让这个工作?

4 个答案:

答案 0 :(得分:5)

使用别名或函数,或者源代码而不是执行它。

BASH FAQ entry #60

答案 1 :(得分:4)

使用功能

to_apache(){
  cd /etc/apache
}

放入一个文件,例如mylibrary.sh,无论何时您想使用它,都要获取文件。例如

#!/bin/bash
source /path/mylibrary.sh
to_apache

答案 2 :(得分:2)

正如伊格纳西奥所说,把它变成一个函数(或者也许是一个别名)。

我倾向于这样做的方法是创建一个创建函数的shell脚本 - 脚本和函数具有相同的名称。然后,在某个时间点,我将获取脚本('。funcname'),然后我可以简单地使用该函数。

我倾向于选择功能别名;管理论点等更容易。

另外,对于更改目录的特定情况,我使用CDPATH。使用CDPATH的诀窍是在开头有空条目:

export CDPATH=:/work4/jleffler:/u/jleffler:/work4/jleffler/src:\
/work4/jleffler/src/perl:/work4/jleffler/src/sqltools:/work4/jleffler/lib:\
/work4/jleffler/doc:/u/jleffler/mail:/work4/jleffler/work:/work4/jleffler/ids

在这台机器上,我的主目录是/ work4 / jleffler。我可以一次性使用'cd whatever'到达大多数相关的子目录。

如果你没有先放入空条目(或明确的'。'),那么你就不能'cd'到当前目录的子目录,这至少令人不安。

答案 3 :(得分:0)

Ignacio Vazquez-Abrams给出了可能回答问题的链接,尽管我并没有真正遵循它。简短的回答是在命令之前使用“source”或单个点,例如: 。到阿帕奇

但是,如果你有一个更复杂的脚本,我发现存在问题。似乎原始脚本文件名变量($ 0)丢失了。我看到“-bash”,所以你的脚本不能回显那些包含完整文件名的错误文本。

此外,您不能使用“exit”命令,否则您的shell将退出(特别是从ssh中产生的不满)。

此外,如果您使用“basename”函数,则会出错。

所以,在我看来,函数可能是解决其中一些问题的唯一方法,比如传递参数。