无法在复杂的 bash 命令上使用“run”例程

发布于 2025-01-12 04:55:37 字数 998 浏览 0 评论 0原文

得到这个命令: cd /some/dir; /usr/local/bin/git log --diff-filter=A --follow --format=%aI -- /some/dir/file | /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 , $dirname,;, $output_file, <| tail -1>, :out, :err;

Git 抛出错误:

fatal: --follow 只需要一个路径规范

直接从命令行运行时,相同的 git 命令运行良好。

我已确认 $dirname$output_file 都是正确的。

git log --help 没有为我提供任何线索。命令直接从命令行运行良好。

更新:所以如果我摘下| tail -1 位,我从 raku(日期)中的命令中获取输出。我还发现,如果我在命令行上运行时取出管道,输出就会通过管道传输到 more 中。我对 bash 以及它如何与 raku 的 run 命令交互的了解不够,无法确定发生了什么。

Got this command: cd /some/dir; /usr/local/bin/git log --diff-filter=A --follow --format=%aI -- /some/dir/file | tail -1

I want to get the output from it.

Tried this:

my $proc2 = run 'cd', $dirname, ';', '/usr/local/bin/git', 'log', '--diff-filter=A', '--follow', '--format=%aI', '--', $output_file, '|', 'tail', '-1', :out, :err;

Nothing output.

Tried this:

my $proc2 = run </usr/local/bin/git -C>, $dirname, <log --diff-filter=A --follow --format=%aI -->, $output_file, <| tail -1>, :out, :err;

Git throws an error:

fatal: --follow requires exactly one pathspec

The same git command runs fine when run directly from the command line.

I've confirmed both $dirname and $output_file are correct.

git log --help didn't shed any light on this for me. Command runs fine straight from command line.

UPDATE: So if I take off the | tail -1 bit, I get output from the command in raku (a date). I also discovered if I take the pipe out when running on the command line, the output gets piped into more. I'm not knowledgeable enough about bash and how it might interact with raku's run command to know for sure what's going on.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痞味浪人 2025-01-19 04:55:37

您需要为管道运行单独的过程:

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;

在这种情况下您也不需要 tail,您可以执行以下操作:

put .out.lines(:close).tail with $p

You need to run a separate proc for piping:

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;

Also you don't need tail in this case, you can do:

put .out.lines(:close).tail with $p
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文