使用ksh脚本中添加的选项卡/文本将输出写入文件

时间:2012-12-06 16:26:18

标签: shell unix logging scripting ksh

我正在编写一个记录到文件的KornShell(ksh)脚本。我将我的一个命令(scp)的输出重定向到同一个文件,但我想在可能的情况下在日志文件的这些行的开头添加一个选项卡。

这可能吗?

编辑:另外我应该提一下,我重定向的文本来自stderr。我的行目前看起来像这样:

scp -q ${wks}:${file_location} ${save_directory} >> ${script_log} 2>&1

1 个答案:

答案 0 :(得分:2)

注意:以下内容不适用于ksh(有关可能的解决方案,请参阅this question)。


您可能会做类似

的事情
my_command | sed 's/^/\t/' >> my.log

我们的想法是以某种方式使用像sed这样的流编辑器处理命令的输出。在这种情况下,将在每行的开头添加一个选项卡。考虑:

$ echo -e 'Test\nfoobar' | sed 's/^/\t/'
    Test
    foobar

我没有在ksh中对此进行过测试,但快速网络搜索表明它应该有效。

另请注意,某些命令可以同时写入stdoutstderr,但不要忘记处理它。

修改:以回应问题中的评论和编辑,调整后的命令可能看起来像

scp -q ${wks}:${file_location} ${save_directory} 2>&1 | \
    sed 's/^/\t/' >> ${script_log}

或者,如果你想完全摆脱stdout

scp -q ${wks}:${file_location} ${save_directory} 2>&1 >/dev/null | \
    sed 's/^/\t/' >> ${script_log}

该技术在this answer中描述。