当我想在本地运行Wireshark以显示在另一台机器上运行的数据包捕获时,在bash上使用输入重定向从子shell的输出中运行此命令:
wireshark -k -i <(ssh user@machine "sudo dumpcap -P -w - -f '<filter>' -i eth0")
根据我的调查发现,fish shell的类似行为语法相同,但是当我在fish上运行该命令时,我可以在终端上看到Wireshark输出,但无法看到Wireshark窗口。
我是否遗漏了什么?
当我想在本地运行Wireshark以显示在另一台机器上运行的数据包捕获时,在bash上使用输入重定向从子shell的输出中运行此命令:
wireshark -k -i <(ssh user@machine "sudo dumpcap -P -w - -f '<filter>' -i eth0")
根据我的调查发现,fish shell的类似行为语法相同,但是当我在fish上运行该命令时,我可以在终端上看到Wireshark输出,但无法看到Wireshark窗口。
我是否遗漏了什么?
<()
语法)。这是一种特定于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)
<()
不太适合这种用例。有没有什么原因你不能使用这个更简单、更便携的公式?ssh user@machine "sudo dumpcap -P -w - -f '<filter>' -i eth0" | wireshark -k -i -
>(ls)
的等效命令。 - glenn jackman(psub|cat)
不会失败,但是它会给出一个临时FIFO名称而不是流。 - grochmal