3

我正在尝试sourceFirefox插件 sdk。为此,我必须cd进入 sdk 的目录,然后运行source bin/activate​​. 如果我不cd进入该目录,而是直接从我当前所在的任何路径获取,则会发生以下情况:

$ source ~/src/devtools/addon-sdk/bin/activate
欢迎使用附加 SDK。运行“cfx docs”以获得帮助。
$cfx
-bash:cfx:找不到命令

我想为此设置一个别名,将其 cd 放入 sdk,获取它,然后返回到我的当前目录:

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

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

$acfx
欢迎使用附加 SDK。运行“cfx docs”以获得帮助。
dirname: 非法选项 -- b
用法:目录名路径

我在这里迷路了,如何回到原来的目录?或者指定一个“工作目录” source

4

4 回答 4

5

您可以像这样在子 shell 中执行 cd 和后续命令:

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

如果由于某种原因您不想创建子外壳,请使用cd -将目录更改为上一个目录:

cd ~/src/devtools/addon-sdk && source bin/activate && cd -
于 2013-04-08T11:09:17.953 回答
1

您可以使用pushdpopdshell 内置函数:

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

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

于 2013-04-08T11:06:55.903 回答
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'
于 2013-04-08T11:10:42.837 回答
0

I am not curious if this solves your original problem. can you try cd to that dir, source , cd to some other temp dir, and then try cfx ? i mean sourcing should not be different whether done from the current dir, or some specific dir. If the script assumes the user to be present in the current dir, then it's wrong. May be in that case adding export PATH=~/src/devtools/addon-sdk:$PATH in script might help

于 2013-04-08T11:25:33.900 回答