我正在尝试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
指定“工作目录”?
答案 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)
您可以使用pushd
和popd
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
可能有帮助