我想制作一个脚本(to),让我更容易输入文件夹。
所以,例如。如果我键入“to apache”,我希望它将当前目录更改为/ etc / apache2。
然而,当我在脚本中使用“cd”命令时,似乎它改变了脚本中的路径,因此shell中的路径没有改变。
我怎么能让这个工作?
答案 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”函数,则会出错。
所以,在我看来,函数可能是解决其中一些问题的唯一方法,比如传递参数。