将命令/脚本参数传递给日志文件的首选方法是什么?

将命令/脚本参数传递给日志文件的首选方法是什么?

一般来说,我想知道如何将终端命令中的参数传递到 stdout。更具体地说,我在备份过程中使用 tar,并且我希望将参数(尤其是排除的目录)传递到日志文件。对于排除的目录,我尝试过tar --show-omitted-dirs,但没有像我想象的那样起作用。

我是使用 bash 脚本的新手,但我读了有关“$@”的内容,并认为我可以编写自己的函数

myLS() { echo "$@"; ls "$@"; }

首先将命令回显到 stdout,然后将其传递给ls。管道echo

myLS() { echo "$@" | tr " " "\n"; ls "$@"; }

或使用printf

myLS() { printf '%s\n' "$@"; ls "$@"; }

用新行分隔这些参数,这正是我想要的日志文件顶部的内容。

虽然这种方法可行,但我很好奇是否有更好的方法来实现它,这样每次我想记录运行命令时使用的参数时,就不需要重写自己的函数。通用解决方案和特定解决方案都tar很有帮助。

答案1

事实上,没有首选的方法来做到这一点。我能想到的最好的方法,我使用的方法正是你所做的。创建一个函数,首先打印参数,然后使用这些参数运行命令。我能想到的唯一改进是,你可以编写一个函数,例如,而不是为每个命令使用不同的函数:

#!/bin/bash
function show_args {
    echo "$@" | tr " " "\n" >> logfile
    $@
}

该函数可以这样调用:

show_args ls -ah ~/documents/

它会将堆叠在一起的参数回显到“logfile”,然后运行该命令。

相关内容