当我想在本地运行Wireshark以显示在另一台机器上运行的数据包捕获时,这适用于bash,使用来自子shell输出的输入重定向:
wireshark -k -i <(ssh user@machine "sudo dumpcap -P -w - -f '<filter>' -i eth0")
根据我的发现,fish shell上类似行为的语法是相同的但是当我在fish上运行该命令时,我在终端上获得了Wireshark输出,但是看不到Wireshark窗口。
我有什么遗失的吗?
答案 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 -