我正在尝试自动化一个脚本,该脚本通过命令行将文件从本地服务器复制到远程服务器。我已经完成了对scp的研究,并且知道如何将文件复制到远程服务器,但是我想将该文件附加到另一个文件。
这是我的代码:
scp ~/file.txt user@host:
ssh user@host cat file.txt >> other_file.txt
当我手动将所有内容输入命令行时,一切正常:
scp ~/file.txt user@host:
ssh user@host
cat file.txt >> other_file.txt
但是当我运行脚本时,只复制文件,而不是附加到other_file.txt末尾。帮助?
代码的第二行应该是
ssh user@host "cat file.txt >> other_file.txt"
三个要点:
- 你不希望你的本地 shell 以任何方式解释
>>
(如果它没有引号,它会这样做) - 有一个远程 shell,它将正确解释命令中的
>>
。 ssh
的最终参数被"连接"以形成一个命令,而不是按原样携带到argv
数组中。这可能很方便,但也可能导致混淆或错误:ssh cat "$MYFILE"
和ssh "cat '$MYFILE'"
都在一个共同的用例中工作,但它们都因不同的$MYFILE
值而中断。
您需要将要在远程主机上运行的命令括在引号中。否则,重定向将在本地完成,而不是远程完成。试试这个:
scp ~/file.txt user@host:
ssh user@host 'cat file.txt >> other_file.txt'
试试这个:
$ cat file.txt| ssh hostname 'cat >> other_file.txt'