2017-09-18 19 views
4

在詹金斯運行Tcl命令時,我有一個奇怪的問題。的Tcl腳本詹金斯開始轉動命令爲小寫

而TCL腳本有以下行(講究大寫我的編號):

foreach name $docker_names { 
    set name "TestName" 
    puts $name 
    set command "docker inspect --format='{{.Id}}' ${name} > /home/temp/id.txt" 
    send -- "$command\n" 
    expect "$" 
} 

在jeknins登錄我看到作業失敗,因爲什麼是在第二次迭代發送迴路是上面的命令,但是是小寫的。我需要Id中的I爲大寫。

這就是在發送到迴路的第二次迭代:

docker inspect --format='{{.id}}' testname > /home/temp/id.txt 

注:在第一次迭代,一切都正常發送。

任何人有爲什麼會這樣的想法?

謝謝!

+0

除非明確要求,否則Tcl不會更改字符串的大小寫。你有沒有試過讓你發送的字符串在你發送之前顯式回顯給你? –

+0

如果你指的是這樣的:把 「泊塢窗檢查--format = '{{ID}}' $(名稱)> /home/temp/id.txt」,是的,它返回OK。這隻發生在我從詹金斯運行腳本時。 – zephirus

+0

聽起來好像還有其他事情正在發生,那就是將一個轉換應用到您不期待的某些程序文本中。唉,當你有一堆複雜的軟件時,這很容易完成。一般來說,我覺得最簡單的方法是將每種語言的腳本保存在自己的文件中,這樣就沒有額外的陷阱讓你的一天變得可怕,但這對你沒有任何幫助。 –

回答

0

它不能從單純的TCL的角度發生。這是TCL解釋器集成在Jenkins中的一個副作用:我想有一個隱藏層可以解析腳本並根據非TCL語法對其進行修改。 我會做2項試驗: 首先是儘量減少TCL parsings F中的字符串:

foreach name $docker_names { 
    set name "TestName" 
    puts $name 
    set command [concat {docker inspect --format='{{.Id}}'} $name { > /home/temp/id.txt} "\n"] 
    send -- $command 
    expect "$" 
} 

如果沒有幫助,嘗試backquoting可以通過另一層解釋curlybraces:

foreach name $docker_names { 
    set name "TestName" 
    puts $name 
    set command "docker inspect --format='\{\{.Id\}\}' ${name} > /home/temp/id.txt" 
    send -- "$command\n" 
    expect "$" 
}