ssh -f $user@$machine_name "cd $path; shard_path=`find . -name \"shard0\"`; cd $shard_path; mkdir temp"
目录结构是$ path / node0 / shard0
在这个脚本中,var shard_path
为空,为什么?目录temp
在~/
中构建,但不在shard0
中构建。
答案 0 :(得分:2)
因为您在命令周围使用双引号发送到服务器,所以在本地扩展。它试图根据本地值替换$path
和$shard_path
,并且由于$shard_path
未在本地定义,因此它会扩展为空。
通过在服务器上执行命令使用单引号,可以避免很多这些引用问题。您需要的确切引用取决于这些变量的确切位置。但是根据你的评论,听起来这就是你需要的命令:
ssh -f $user@$machine_name "cd $path;"'shard_path=$(find . -name "shard0"); cd $shard_path; mkdir temp'
答案 1 :(得分:1)
根据您与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]}
(在远程计算机上)
答案 2 :(得分:0)
$ path正在本地扩展。同上$ shard_path。如果您希望远程解释/扩展这些值,您需要转义$,例如\ $路径。