簡體   English   中英

在shell腳本中循環不在遠程服務器上工作

[英]Loop in shell script not working on remote server

代碼嘗試從本地服務器ssh到遠程服務器並運行一些命令。

ssh root@$remoteip 'bash -s' <<END3               
gcdadirs=`strings binary | egrep '.gcda$'`       
for dir in ${gcdadirs[@]}; do
directory=$(dirname ${dir})
echo $dir >> dirstr.txt
mkdir -p $directory
chown $root:$root $directory
chmod 777 $directory
done
END3

以上創建了遠程服務器上的目錄結構,工作正常。

我想tar目標結構相同。 所以我使用與上面相同的邏輯。

ssh root@$remoteip 'bash -s' <<END3   
touch emptyfile
tar -cf gcda.tar emptyfile
gcdadirs=`strings binary | egrep '.gcda$'`
for dir in ${gcdadirs[@]}; do
tar -rf gcda.tar $dir
done
END3

上面的代碼應該創建一個tar,其中包含for循環返回的所有目錄。 我通過將代碼復制到遠程服務器並在那里運行它來嘗試代碼邏輯,並且它工作正常。 但是,如果我從本地服務器ssh連接到遠程服務器並嘗試它不是for循環。 它沒有附加任何東西到第二行用空文件創建的tar文件。

試試<<'END3'

注意END3周圍的引號,它們會阻止here-document中的shell替換。 您希望將$ -signs傳輸到ssh連接的另一端,而不是在本地解釋。 對於反引號也一樣。


從評論中提取為已接受的答案。 發布為社區維基

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM