3

私は現在、エラーがファイルに出力されることがあるシェルスクリプトに取り組んでいますが、それは何の意味もなく、エラーがない限りすべてが正常に機能するため、エラーを移動する必要があります。

次のようなスクリプトがあります。

ftp ftp://$2:$3@$1 << BLOCK > $5
cd "$4"
ls
quit
BLOCK

$ 5は、FTPコマンドの出力が書き込まれるファイルです。したがって、ファイルには次のものがあります

total 8
-rw-r--r--  1 root  root  42 Dec 17 14:26 test1.txt
-rw-r--r--  1 root  root   6 Dec 17 14:08 test2.txt

時々エラーが発生するので、ファイルからエラーを削除する?Invalid command.ために使用しています。sedシェルスクリプトを次のように変更しました。error上記のエラーメッセージが表示されることを確認するために、FTP内に配置したテストに注意してください。

ftp ftp://$2:$3@$1 << BLOCK > $5
cd "$4"
ls
error
quit
BLOCK
fileout=$(sed '/?Invalid command./d' $5)
echo $fileout > $5

これは、エラーメッセージを削除しているという意味で機能していますが、改行も削除しているため、ファイルを見ると次のようになります。

total 8 -rw-r--r-- 1 root root 42 Dec 17 14:26 test1.txt -rw-r--r-- 1 root root 6 Dec 17 14:08 test2.txt

改行を保持するにはどうすればよいですか?

あなたが提供できるどんな助けにも感謝します。

4

2 に答える 2

3

改行を保持するために、つまり、引用fileoutする必要があります。echoecho "$fileout" > $5

ただし、それを行う代わりにsed、ファイルを「インプレース」で編集するために使用する必要があります。そうすれば、の出力をsed変数に保存しechoてから再び元に戻す必要がなくなり、問題が発生します。

使用する:

sed -i '/?Invalid command./d' $5

それ以外の:

fileout=$(sed '/?Invalid command./d' $5)
echo $fileout > $5
于 2012-12-17T15:31:09.657 に答える
0

ただ行う:

ftp ftp://$2:$3@$1 << BLOCK | sed ... > $5
...
BLOCK

または、必要に応じて:

ftp ftp://$2:$3@$1 << BLOCK | 
...
BLOCK
sed ... > $5
于 2012-12-17T15:57:56.533 に答える