我正在運行Chef-client 11.12.8。我寫了一個bash腳本包含以下行:Bash腳本在終端中正常工作,但在主廚中運行的腳本失敗
aws s3 ls s3://my-bucket/prod-builds/
我只是使用awscli
工具來從S3存儲文件的列表。當我在我的終端上手動運行此(Ubuntu的14.04 LTS),我得到這樣的輸出:
2014-10-10 21:27:50 42081271 aragorn-38d5afe23f1fa09a991c4cdbcb8461ed8709d15f.tgz
但是當廚師的客戶端執行bash腳本,與此相同的線,採用printf
語句,我看到bash腳本僅輸出:
2014-10-10
看起來命令輸出中存在空格會讓主廚客戶感到困惑。
下面是從我的廚師食譜,執行bash腳本行:
execute "Download latest build" do
command "bash /path/to/my/script"
creates "/file/that/gets/created"
user "aragorn"
action :run
end
任何想法如何,我可以解決這個問題?
更新:按照要求,這裏是我的腳本的一部分:
if [ -z "$gitCommitId" ]; then
# Take a filename like "aragorn-38d5afe23f1fa09a991c4cdbcb8461ed8709d15f.tgz" and extract the commitId from it
# Note that we take the topmost result
gitCommitId=$(aws s3 ls s3://my-bucket/prod-builds/ | sort -r | head -2 | sed -n '1!p' | awk -F "aragorn-" '{print $2}' | cut -d'.' -f 1)
fi
我確認這行代碼執行(使用printf
語句輸出),但奇怪的是,當我執行命令aws s3 ls s3://my-bucket/prod-builds/ | sort -r | head -2 | sed -n '1!p' | awk -F "aragorn-" '{print $2}' | cut -d'.' -f 1
直接在我的終端(或手動從我的終端運行腳本),它工作正常。但是,當從廚師跑gitCommitId
設置爲無。
更新#2:我寫了一個更簡單的bash腳本來測試廚師和終端之間的差異。我確認Chef run會輸出與調用aws s3 ls s3://my-bucket/prod-builds
不同的結果,而不是從終端調用它的結果。具體而言,它在S3終端中存在的一個文件夾中存在終端呼叫。我仍然無法解釋這一點。
我清盤使用下面的線,給了我一致的結果,確保只有建立了展示,並沒有文件夾:
aws s3 ls s3://my-bucket/prod-builds/ | grep aragorn | sort -r | head -1 | cut -d'-' -f 4 | cut -d'.' -f 1
特別感謝兩個@TejayCardon和@StephenC指着我在正確的方向!
我們將需要更多信息。至於這是廚師的問題,它更可能是一個紅寶石問題,但幾乎可以肯定這是你的腳本的問題。如果我們有完整的腳本,我們可能會提供幫助。 – 2014-10-11 15:37:33
感謝您的建議。問題更新與腳本的相關部分。 – 2014-10-11 17:10:11
我會在你的'gitCommitId = .....'行之後加上'echo $ gitCommitId >>/tmp/testme'。查看放入文件的內容。我猜測(而且完全是)你正在發生一個變量範圍問題。 – 2014-10-11 23:33:23