鱼壳输入从子壳输出重定向

时间:2016-06-10 16:37:55

标签: shell remote-access wireshark fish

当我想在本地运行Wireshark以显示在另一台机器上运行的数据包捕获时,这适用于bash,使用来自子shell输出的输入重定向:

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

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

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:4)

你在bash中使用的是process substitution<()语法)。它是 bash特定的语法(尽管zsh采用了相同的语法及其自己的=())。

fish does have process substitution使用不同的语法((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 :(得分:2)

相当于<()的鱼不太适合这种用例。有什么理由你不能使用这种更简单,更便携的配方吗?

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