无法在复杂的 bash 命令上使用 `运行` 例程
Unable to use `run` routine on complex bash command
得到这个命令:cd /some/dir; /usr/local/bin/git log --diff-filter=A --follow --format=%aI -- /some/dir/file | tail -1
我想得到它的输出。
试过这个:
my $proc2 = run 'cd', $dirname, ';', '/usr/local/bin/git', 'log', '--diff-filter=A', '--follow', '--format=%aI', '--', $output_file, '|', 'tail', '-1', :out, :err;
没有输出。
试过这个:
my $proc2 = run </usr/local/bin/git -C>, $dirname, <log --diff-filter=A --follow --format=%aI -->, $output_file, <| tail -1>, :out, :err;
Git 抛出错误:
fatal: --follow requires exactly one pathspec
相同的 git 命令 运行 当直接从命令行 运行 时没问题。
我已经确认 $dirname
和 $output_file
都是正确的。
git log --help
没有为我阐明这一点。命令 运行 可以直接从命令行直接使用。
更新: 因此,如果我取消 | tail -1
位,我会从 raku(日期)中的命令得到输出。我还发现,如果我在命令行上 运行ning 时取出管道,输出将通过管道传输到 more
。我对 bash 以及它如何与 raku 的 run
命令交互了解不够,无法确定发生了什么。
您需要运行一个单独的管道过程:
my $p = run «git -C "$dirname" log --diff-filter=A --format=%aI», :out, :err;
my $p2 = run <tail -1>, :in($p.out), :out;
put .out.slurp: :close with $p2;
在这种情况下你也不需要尾巴,你可以这样做:
put .out.lines(:close).tail with $p
得到这个命令:cd /some/dir; /usr/local/bin/git log --diff-filter=A --follow --format=%aI -- /some/dir/file | tail -1
我想得到它的输出。
试过这个:
my $proc2 = run 'cd', $dirname, ';', '/usr/local/bin/git', 'log', '--diff-filter=A', '--follow', '--format=%aI', '--', $output_file, '|', 'tail', '-1', :out, :err;
没有输出。
试过这个:
my $proc2 = run </usr/local/bin/git -C>, $dirname, <log --diff-filter=A --follow --format=%aI -->, $output_file, <| tail -1>, :out, :err;
Git 抛出错误:
fatal: --follow requires exactly one pathspec
相同的 git 命令 运行 当直接从命令行 运行 时没问题。
我已经确认 $dirname
和 $output_file
都是正确的。
git log --help
没有为我阐明这一点。命令 运行 可以直接从命令行直接使用。
更新: 因此,如果我取消 | tail -1
位,我会从 raku(日期)中的命令得到输出。我还发现,如果我在命令行上 运行ning 时取出管道,输出将通过管道传输到 more
。我对 bash 以及它如何与 raku 的 run
命令交互了解不够,无法确定发生了什么。
您需要运行一个单独的管道过程:
my $p = run «git -C "$dirname" log --diff-filter=A --format=%aI», :out, :err;
my $p2 = run <tail -1>, :in($p.out), :out;
put .out.slurp: :close with $p2;
在这种情况下你也不需要尾巴,你可以这样做:
put .out.lines(:close).tail with $p