一般来说,我想知道如何将终端命令中的参数传递到 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”,然后运行该命令。