Shell 命令输出到文件并执行命令

Shell 命令输出到文件并执行命令

除了将命令输出到文件之外,如何输出命令本身?

我知道我能做到如何在 shell 脚本中将文本输出到屏幕和文件?捕获输出。我的用例特定于 pytest。

pytest /awesome_tests -k test_quick_tests -n auto &> test_output_$(date -u +"%FT%H%MZ").txt

在输出中执行命令确实很有帮助,这样我就可以明确知道结果的用途。

答案1

另一种选择是,仅使用 bash 进行&>您开始时的重定向,但否则与 sh 兼容:

set -- '/awesome_tests' '-k' 'test_quick_tests' '-n' 'auto'
{ printf '%s %s\n' 'pytest' "$*";
  pytest "$@";
} &> test_output_$(date -u +"%FT%H%MZ").txt

这将设置位置参数以包含命令的参数pytest;然后它在大括号分组内运行两个命令{}

  1. 打印pytest字符串,后跟由空格连接的参数( 的默认第一个字符$IFS
  2. pytest使用给定参数运行实际命令

然后该大括号组将像以前一样重定向。

答案2

sh -v <<< 'pytest /awesome_tests -k test_quick_tests -n auto' \
    &> test_output_$(date -u +"%FT%H%MZ").txt

sh -v导致sh将每个命令行回显到stderr,因此由于您已经捕获stderr到输出文件,因此所需要做的就是使用该-v选项并提供sh您希望运行的命令。

请注意,在我的测试中,sh -v -c 'your-command-here'没有起作用。

echo 'pytest /awesome_tests -k test_quick_tests -n auto' | \
    sh -v &> test_output_$(date -u +"%FT%H%MZ").txt

确实有效,但这echo ... |就是bash<<<用途。

相关内容