我有一个调用xclip
内部的脚本。像这样的东西:
#!/bin/bash
RESULT="some data"
echo $RESULT | xclip
echo $RESULT
xclip
puts 将数据从它的标准输入放到剪贴板,生成一个后台线程来保存该缓冲区(这就是剪贴板在 X11 中的工作方式)并将其与 tty 分离。
如果我直接运行脚本,它会按预期工作:
$ ./script.sh
some data
$
但是,如果我尝试将其输出传递到管道中,它会挂起直到xclip
后台进程结束(基本上,直到其他人将数据放入剪贴板)。
$ ./script.sh | ./another_script.sh # it hangs
我发现xclip
有一个-f
标志似乎可以解决这个问题。
从手册页:
当在输出级别设置为静默(默认值)的输入模式下调用 xclip 时,过滤器选项将导致 xclip 将通过管道传输到标准输入的文本打印回未修改的标准输出
但是,我试图理解为什么它会这样工作。
我创建了另一个行为相同的示例:
echo $(sleep 5 &)
另外,有人告诉我,在fish
我的示例中没有-f
标志。
所以,问题是:
1. 这是 shell ( bash
and zsh
) 的错误还是预期的行为?
2.-f
标志如何影响这种行为?从手册页来看,它似乎不是很相关。
3. 如何使其他脚本(例如)以使用标志sleep
的方式xclip
工作?-f