2013-08-02 57 views
5

我配置了詹金斯的工作,來源,來源bash腳本另一它增加了一個別名到其用戶的.bashrc和源.bashrc本身 bash腳本,然後原來的腳本嘗試使用該別名(由第二個設置)。但是,似乎無法找到它剛創建的別名。除了使用「通過SSH發送文件或執行命令」構建步驟來源腳本之外,我沒有使用任何腳本插件。詹金斯不能訪問外殼別名

作業做到這一點:

source ./test_script.sh 

test_script.sh看起來是這樣的:

echo "In test_script.sh" 
echo $USER 
echo $HOME 
source ./setup_env.sh 
echo "\nBack in test_script.sh" 
alias foo 
foo 

最後,setup_env.sh看起來是這樣的:

echo "\nIn setup_env.sh" 
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc 
source $HOME/.bashrc 2>/dev/null 
cat $HOME/.bashrc 

我從詹金斯接收輸出工作看起來像這樣:

In test_script.sh 
my_user 
/home/my_user 
\nIn setup_env.sh 
...all of my bashrc... 
alias foo="echo foo" 
\nBack in test_script.sh 
alias foo='echo foo' 
./test_script.sh: line 7: foo: command not found 

我不明白爲什麼會發生這種情況,我可以在命令行自己高興地運行它並觀察它是否成功。爲什麼不能使用新的別名,當它明顯地發現它(如alias foo命令的輸出所示)?

+0

見(http://unix.stackexchange.com/a/1498/43764) – Armali

回答

4

\n是在你的echo命令
的輸出,顯示錶明這不是bash下運行,因爲你可能預期。

請檢查您的詹金斯用戶的設置
(或您運行詹金斯與任何其他用戶) -
尤其是默認的shell的設置。

爲了驗證這一點,添加這些行之一,在你的腳本的開頭:

env 

env | grep -i shell 

也應考慮確保您的正確的shell下運行腳本,
在每個腳本中添加「shebang」行作爲第一行。
在「慶典」,例如,您應該添加以下第一線的情況下:

#!/bin/bash 

(它不是一個評論,儘管什麼自動語法高亮可能會認爲...)

7

爲別人誰是有這個問題,你可能需要設置expand_aliases外殼選項,這似乎在默認情況下詹金斯離開:爲什麼沒有我的bash腳本識別別名]

shopt expand_aliases # check if it's on 
shopt -s expand_aliases # set expand_aliases option to true 
shopt expand_aliases # it should be on now 

# test with a simple alias, should print 1 
alias x="python -c 'print 1'" 
x