[英]what's wrong with my bash script?
ssh -f $user@$machine_name "cd $path; shard_path=`find . -name \"shard0\"`; cd $shard_path; mkdir temp"
目錄結構為$ path / node0 / shard0
在此腳本中,var shard_path
為null,為什么? 目錄temp
是在~/
構造的,而不是在shard0
。
因為要在發送給服務器的命令周圍使用雙引號,所以正在本地進行擴展。 它試圖根據$path
和$shard_path
的本地值來替代它們,並且由於$shard_path
不是本地定義的,因此擴展為$shard_path
。
通過對服務器上要執行的命令使用單引號,可以避免很多此類引號問題。 您需要的確切報價取決於這些變量的確切定義位置。 但是從您的評論看來,這是您需要的命令:
ssh -f $user@$machine_name "cd $path;"'shard_path=$(find . -name "shard0"); cd $shard_path; mkdir temp'
通過與Brian Campbell的討論,我假設$path
變量在本地客戶端上,而$shard_path
在遠程位置上。
然后嘗試以下操作:
ssh -f xce@ns20.xce.n.xiaonei.com "echo $path; cd $path; shard_path=\$(find . -name \"shard0\"); echo \$shard_path;"
注意:如果有可能存在多個名為“ shard0”的文件,find將輸出許多路徑,因此您可能需要使用
shard_path_array=( \\$(find . -name \\"shard0\\") );
這會將find的輸出放入一個數組中,然后您可以使用例如
cd \\${shard_path_array[0]}
(在遠程計算機上)
在通過ssh將命令發送到目標計算機之前,將在本地擴展$ path。 同上$ shard_path。 如果要遠程解釋/擴展這些值,則需要轉義$,例如\\ $ path。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.