在ssh上运行的Bash脚本无法看到远程文件

时间:2011-10-22 18:21:26

标签: bash ssh

该脚本使用scp上传文件。这很有效。

现在我想用ssh,cd登录到保存上传文件的目录,在文件上做一个md5sum。该脚本一直告诉我md5sum找不到$ LOCAL_FILE。我尝试转义:\ $ LOCAL_FILE。尝试引用EOI:<<'EOI'。我部分理解这一点,没有逃避意味着一切都在本地发生。未转义的echo pwd给出了本地路径。但为什么我可以“回显$ MD5SUM> $ LOCAL_FILE.md5sum”,并在远程机器上创建文件,但“echo md5sum $LOCAL_FILE> md5sum2”不起作用?如果它是本地md5sum,我怎么告诉它在遥控器上工作?


scp "files/$LOCAL_FILE" "$i@$i.567.net":"$REMOTE_FILE_PATH"             

ssh -T "$i@$i.567.net" <<EOI                                                                       
touch I_just_logged_in                        
cd $REMOTE_DIRECTORY_PATH                     
echo `date` > I_just_changed_directories      
echo `whoami` >> I_just_changed_directories   
echo `pwd` >> I_just_changed_directories      
echo "$MD5SUM" >> I_just_changed_directories  
echo $MD5SUM > $LOCAL_FILE.md5sum             
echo `md5sum $LOCAL_FILE` > md5sum2           
EOI

1 个答案:

答案 0 :(得分:0)

您必须考虑何时解释$LOCAL_FILE。在这种情况下,由于您使用了双引号,因此它将在发送计算机上进行解释。您需要引用字符串,使$LOCAL_FILE位于接收计算机的命令行中。您还需要使“此处的文档”正确无误。您显示的内容只是将输出发送到touch到ssh。

您需要的内容类似于

ssh -T address <'EOF'
cd $REMOTE_DIRECTORY_PATH
...
EOF

bash中的引用规则有些神秘。您可能想在Mendel Cooper的Advanced Guide to Bash Scripting中阅读它们。