我目前正在开发一个shell脚本,其中有时可能会将错误输出到文件但我需要移动错误,因为它并不意味着什么,只要错误不存在,一切正常。
我有一个脚本,其中包含以下内容:
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
从文件中删除错误。我已将shell脚本更改为以下内容。测试注意事项我已将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
如何保留换行符?
感谢您提供的任何帮助。
答案 0 :(得分:3)
您需要在fileout
echo
时引用echo "$fileout" > $5
,以保留换行符。
但是,您应该使用sed
来编辑文件&#34;就地&#34;而不是这样做。然后,您不必将sed
的输出保存到变量中,然后echo
将其再次退出,这会导致问题。
使用:
sed -i '/?Invalid command./d' $5
而不是:
fileout=$(sed '/?Invalid command./d' $5)
echo $fileout > $5
答案 1 :(得分:0)
只是做:
ftp ftp://$2:$3@$1 << BLOCK | sed ... > $5
...
BLOCK
或者,如果您愿意:
ftp ftp://$2:$3@$1 << BLOCK |
...
BLOCK
sed ... > $5