【问题标题】:Write output to file with tabs/text added in ksh script将输出写入文件,并在 ksh 脚本中添加选项卡/文本
【发布时间】:2012-12-06 16:26:17
【问题描述】:

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

这样可以吗?

编辑:另外我应该提到我正在重定向的文本来自 stderr。我的线路目前看起来像这样:

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

【问题讨论】:

    标签: shell unix logging scripting ksh


    【解决方案1】:

    注意:以下不适用于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 中描述了该技术。

    【讨论】:

    • 啊,是的,你提出了我忘了提的另一点。我正在记录的文本来自 stderr。这会对我的实施方式产生影响吗?
    • @MasterZ 你只需要调整重定向。例如,请参阅this question
    • 我修改了我的代码以考虑您提供的链接,但现在脚本的一部分根本没有运行,我收到错误“无法识别的命令:/^/\t/”.. . 如果有帮助,我使用我正在使用的代码编辑了我的原始问题。
    • @MasterZ 问题似乎出在对sed 的调用中。你能展示一下你是如何使用它的吗?
    • 感谢您将代码添加到您的答案中。我很高兴看到我在测试这个方面并没有太远,我只是忘记了 sed 中的 s/。但是,它还不是 100%。将“t”添加到行首而不是制表符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多