0

コマンドラインでローカルサーバーからリモートサーバーにファイルをコピーするスクリプトを自動化しようとしています。私は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の末尾には追加されません。ヘルプ?

4

3 に答える 3

1

コードの2行目は次のようになります

ssh user@host "cat file.txt >> other_file.txt"

3つの重要なポイント:

  1. ローカルシェルが何らかの方法で解釈することを望まない>>(引用符で囲まれていない場合は解釈する)
  2. コマンドを正しく解釈するリモートシェルがあります。>>
  3. の最後の引数sshは、コマンドを形成するために「結合」され、argvそのまま配列に取り込まれることはありません。便利かもしれませんが、混乱やバグにつながる可能性もありますssh cat "$MYFILE"ssh "cat '$MYFILE'"どちら一般的なユースケースで機能しますが、値が異なる機能しなくなります。$MYFILE
于 2013-01-30T21:54:10.130 に答える
1

リモートホストで実行するコマンドを引用符で囲む必要があります。それ以外の場合、リダイレクトはリモートではなくローカルで実行されます。代わりにこれを試してください:

scp ~/file.txt user@host:
ssh user@host 'cat file.txt >> other_file.txt'
于 2013-01-30T21:54:20.567 に答える
0

これを試して:

  $ cat file.txt| ssh hostname 'cat >> other_file.txt'
于 2013-01-30T21:54:50.790 に答える