簡體   English   中英

我的bash腳本怎么了?

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

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