该脚本使用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
答案 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中阅读它们。