cat在一行中显示多行文件内容

时间:2019-06-21 09:34:47

标签: linux bash concatenation logfile

在Linux Shell脚本中,我试图在日志文件中跟踪每个命令状态(成功或失败)。

下面是我的代码段,用于将条目记录到日志文件中。

scp $user@$host:$from $to 2>error.txt

command_run_status=$?

if [[ $command_run_status == 0 ]]; then log_message="secure copy on ("${host}") with ("${user}") is successful"; else log_message="error copying files "`cat error.txt`; fi

./logging.sh "$CURRENT_PID" "$log_message" "D"

使用以下条目创建日志文件:

DEBUG 2019-06-21 10:05:35,347 BST [pid1234] [autouser]: error copying files usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 [...] [[user@]host2:]file2

但是,我希望下面的日志条目-error.txt文件内容带有换行符。

DEBUG 2019-06-21 10:05:35,347 BST [pid1234] [autouser]: error copying files

usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]

           [-l limit] [-o ssh_option] [-P port] [-S program]

           [[user@]host1:]file1 [...] [[user@]host2:]file2

error.txt的内容如下:

usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]

           [-l limit] [-o ssh_option] [-P port] [-S program]

           [[user@]host1:]file1 [...] [[user@]host2:]file2

有人可以注释显示多行文件内容的原因是在日志文件的一行中显示吗?

要在日志文件中打印错误文件内容(带有换行符),需要对命令进行哪些更改?

1 个答案:

答案 0 :(得分:2)

`cat error.txt`
  

Bash通过在子shell环境中执行命令并将命令替换替换为命令的标准输出来执行扩展,并删除所有尾随的换行符。嵌入的换行符不会被删除,但在分词过程中可能会被删除

为防止单词分裂,请在双引号中包括命令替换。

echo $(printf 'a\nb\nc')

打印

a b c

同时

echo "$(printf 'a\nb\nc')"

打印

a
b
c

(最好将$(command)替换为旧式的`command`)。