ssh -f $user@$machine_name "cd $path; shard_path=`find . -name \"shard0\"`; cd $shard_path; mkdir temp"

目录结构是$path/node0/shard0
在这个脚本中,varshard_path为空,为什么?目录temp是在~/中构造的,而不是在shard0中。

最佳答案

因为在发送到服务器的命令周围使用了双引号,所以该命令将在本地展开。它试图根据它们的局部值来替换$path$shard_path,并且由于$shard_path不是局部定义的,所以它扩展为空。
通过在服务器上执行命令时使用单引号,可以避免许多此类引号问题。您需要的精确引用取决于这些变量的确切定义位置。但从你的评论来看,这似乎是你需要的命令:

ssh -f $user@$machine_name "cd $path;"'shard_path=$(find . -name "shard0"); cd $shard_path; mkdir temp'

关于linux - 我的bash脚本怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13717859/

10-10 12:53