3

我目前正在编写一个 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

如何保留换行符?

感谢您的任何帮助,您可以提供。

4

2 回答 2

3

您需要在iefileout时引用,以保留换行符。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 回答