2013-04-08 81 views
3

我正在嘗試sourceFirefox addon sdk。爲此,我必須將cd放入sdk的目錄中,然後運行source bin/activate。如果我不cd到該目錄,並直接從我在目前任何路徑源,會發生以下情況:別名從另一個目錄中獲取bash文件並返回到當前目錄

 
$ 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

僅供參考,如果將SDK的'bin'目錄添加到$ PATH中,則可以在不需要activate/virtualenv-esque環境的情況下以這種方式運行cfx。 – canuckistani 2013-04-09 05:12:02

回答

3

你可以像這樣的一個子shell執行CD和後續命令:

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

如果你不想創建子shell,然後使用cd -改變目錄到以前的某些原因DIR:

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

的解釋是的,我嘗試過使用子shell,但源代碼需要添加變量和東西到我將要使用的shell中;第二種方法只是起作用:) – Kosmotaur 2013-04-08 11:29:34

1

您可以使用pushdpopd shell內建的:

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

$(dirname "$0")把戲只能從腳本調用時的作品;在提示符下,$0將爲bash,因此您會嘗試返回.(因爲dirname bash打印.)。在你的情況下,我猜$0是不同的;也許-bash

+0

完美的作品,感謝$ – Kosmotaur 2013-04-08 11:28:40

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' 
+0

我會如何在別名定義中做到這一點? – Kosmotaur 2013-04-08 11:28:18

+0

查看我的更新回答,@Kosmotaur – fedorqui 2013-04-08 11:30:57

+1

已確認可以正常工作,謝謝 – Kosmotaur 2013-04-08 11:41:12

0

我不好奇,如果這解決了你原來的問題。你可以嘗試CD到該目錄,源,CD到一些其他的臨時目錄,然後嘗試CFX?我的意思是採購不應該是不同的,不管是從當前目錄還是某個特定目錄完成。如果腳本假定用戶在當前目錄中,那麼這是錯誤的。可能在這種情況下,在腳本中添加export PATH=~/src/devtools/addon-sdk:$PATH可能會有所幫助

+0

第三方腳本需要來自特定的目錄,這就是它的方式;添加你提到的路徑不允許我來源bin /激活 – Kosmotaur 2013-04-08 11:46:21

相關問題