您好,我想将命令的输出和已运行以创建输出的命令保存到同一个文件中。我理解其中之一
*some_command* > file.txt
*some_command* | tee file.txt
可以做到,但无论哪种情况一些命令 不会保存到文件中,但只会保存它的输出。有办法这样做吗?
答案1
您可以将命令存储在数组中,打印并运行它:
# Define command
mycmd=(some_command -o "some option")
# Print command
echo "${mycmd[@]}"
# Run command
"${mycmd[@]}"
请注意,这将在打印命令时去除引号。
将其放入一个函数中:
lognrun(){ echo "$@"; "$@"; }
lognrun some_command -o "some_option" > logfile
答案2
使用带有以下内容的子 shell set -x
:
$ ( set -x; printf '%s\n' a b "c d"; ) 2>&1 | tee logfile
+ printf '%s\n' a b 'c d'
a
b
c d
答案3
使用“脚本”命令怎么样?
$ script logfile
$ somecommand
lots of command output...
这会将您在 shell 上执行的所有操作记录到日志文件中。按 Ctrl+D 停止。
如果您只需要一个命令,则可以使用“-c”选项:
-c, --command 命令 运行命令而不是交互式 shell。 这使得脚本可以轻松捕获程序的输出 当它的标准输出不是 tty 时,其行为会有所不同。