来自子shell输出的Fish shell输入重定向

7

当我想在本地运行Wireshark以显示在另一台机器上运行的数据包捕获时,在bash上使用输入重定向从子shell的输出中运行此命令:

wireshark -k -i <(ssh user@machine "sudo dumpcap -P -w - -f '<filter>' -i eth0")

根据我的调查发现,fish shell的类似行为语法相同,但是当我在fish上运行该命令时,我可以在终端上看到Wireshark输出,但无法看到Wireshark窗口。

我是否遗漏了什么?

2个回答

15
你在bash中使用的是进程替换<()语法)。这是一种特定于bash的语法(尽管zsh采用了相同的语法和自己的=())。 fish确实有不同语法的进程替换(process | psub))。例如:
wireshark -k -i (ssh user@machine "sudo dumpcap -P -w - -f '<filter>' -i eth0" | psub)

bash        | equivalent in fish
----------- | ------------------
cat <(ls)   | cat (ls|psub)
ls > >(cat) | N/A (need to find a way to use a pipe, e.g. ls|cat)

1
根据文档显示,Fish 没有相当于 >(ls) 的等效命令。 - glenn jackman
@glennjackman - 没错,谢谢您。我有信心测试过了。(psub|cat)不会失败,但是它会给出一个临时FIFO名称而不是流。 - grochmal

1
鱼类等效的<()不太适合这种用例。有没有什么原因你不能使用这个更简单、更便携的公式?
ssh user@machine "sudo dumpcap -P -w - -f '<filter>' -i eth0" | wireshark -k -i -

@grochmal的回答对我没有起作用,行为仍然是一样的(Wireshark窗口没有本地显示),也许还有其他缺失的东西...不过这个方法有效,谢谢。 - fabiomargarido

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接