[英]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.