别名从另一个目录中获取bash文件并返回当前目录

时间:2013-04-08 11:04:20

标签: bash firefox-addon-sdk

我正在尝试source Firefox addon sdk。为此,我必须cd进入sdk的目录,然后运行source bin/activate。如果我没有cd进入该目录,并直接从我目前的任何路径获取,则会发生以下情况:

$ source ~/src/devtools/addon-sdk/bin/activate
Welcome to the Add-on SDK. Run 'cfx docs' for assistance.
$ cfx
-bash: cfx: command not found

我希望有一个别名,将cd放入sdk,获取它,然后返回到我当前的目录:

alias acfx='cd ~/src/devtools/addon-sdk && source bin/activate && cd "$(dirname "$0")"'

这正确地获取了sdk,但是唉不会返回我调用别名的目录:

$ acfx
Welcome to the Add-on SDK. Run 'cfx docs' for assistance.
dirname: illegal option -- b
usage: dirname path

我迷失在这里,如何返回原始目录?或者为source指定“工作目录”?

4 个答案:

答案 0 :(得分:3)

您可以在子shell中执行cd和后续命令,如下所示:

(cd ~/src/devtools/addon-sdk && source bin/activate)

如果由于某种原因你不想创建子shell,那么使用cd -将dir更改为前一个目录:

cd ~/src/devtools/addon-sdk && source bin/activate && cd -

答案 1 :(得分:1)

您可以使用pushdpopd shell builtins:

alias acfx='pushd ~/src/devtools/addon-sdk && source bin/activate && popd'

$(dirname "$0")技巧仅在从脚本调用时才有效;在提示中,$0将为bash,因此您将尝试返回.(因为dirname bash打印.)。在你的情况下,我猜$0是不同的东西;也许-bash

答案 2 :(得分:1)

您可以保存上一个路径,然后转到它:

prev_dir=$(pwd); ... your commands ... ; cd $prev_dir

在你的情况下:

alias acfx='prev_dir=$(pwd); cd ~/src/devtools/addon-sdk; source bin/activate; cd $prev_dir'

答案 3 :(得分:0)

如果这解决了你原来的问题,我并不好奇。你可以尝试cd到那个目录,源,CD到其他临时目录,然后尝试cfx?我的意思是,无论是从目前的目录还是某个特定的目录,采购都不应该有所不同。如果脚本假定用户出现在当前目录中,则表示错误。可能在这种情况下,在脚本中添加export PATH=~/src/devtools/addon-sdk:$PATH可能有帮助