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

Fish shell input redirection from subshell output

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

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

据我所知,fish shell 上类似行为的语法是相同的,但是当我 运行 在 fish 上执行该命令时,我在终端上获得了 Wireshark 输出,但可以没看到 Wireshark window.

有没有我遗漏的东西?

您在 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)

<() 的 fish 等价物不太适合此用例。您有什么理由不能使用这种更简单、更便携的公式吗?

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