2014-02-28 35 views
0

我想製作一個腳本,它貫穿所有可用的機器並將一些數據保存到我的主文件夾中。如何在命令中將變量的名稱替換爲文件名?

machines=`cat $OAR_FILE_NODES | uniq` 
for machine in ${machines} 
do 
    echo "connecting to:" ${machine} 
    oarsh ${machine} 'tar -zcvf data_${machine}.tar.gz /tmp/data' 
done 

的問題是,所有的數據被保存到data_.tar.gz存檔,覆蓋了好幾遍。

如何讓shell替換變量機器進入傳遞給oarsh的命令?

+0

如果在'oarsh'行中使用雙引號會怎麼樣?這樣,'$ machine'將會被擴展。 – fedorqui

+0

像這樣'oarsh $ {machine} tar -zcvf「data _ $ {machine} .tar.gz」/ tmp/data'? –

+0

像'oarsh $ {machine}「tar -zcvf data _ $ {machine} .tar.gz/tmp/data」'。 – fedorqui

回答

1

正如在評論中看到的,它是關於變量沒有擴大,因爲單引號'。通過改變對雙引號"變量被適當擴大:

oarsh ${machine} "tar -zcvf data_${machine}.tar.gz /tmp/data" 
       ^          ^

注意使用單引號的時候,有什麼oarsh將收到的文字:

tar -zcvf data_${machine}.tar.gz /tmp/data 

同時使用雙引號將提供$machine值被替換:

tar -zcvf data_THE_MACHINE.tar.gz /tmp/data 
相關問題