【问题标题】:bash script not getting piped databash脚本没有获取管道数据
【发布时间】:2014-07-20 19:34:17
【问题描述】:

我正在尝试编写一个 bash 脚本来操作从 xsel 传输的数据。

...
ary=()
while read data; do
    echo $data
    ary=( "${ary[@]}" "$data" )
done

问题是我打电话时没有读取任何内容:

xsel | myscript.sh

我试过了

echo "testing testing" | myscript.sh

这行得通,而且我还确保有来自 xsel 的东西

xsel | festival --tts --pipe
# will read the clipboard string piped from xsel aloud

有什么建议吗?提前致谢

【问题讨论】:

标签: bash pipe


【解决方案1】:

如果read 无法读取整行,则会失败,并且xsel 不会输出换行符。

将循环替换为:

readarray ary   # new in Bash 4

如果您只是在数组中添加行作为将所有数据粘贴到变量中的代理,您可以改为:

input=$(cat)

【讨论】:

  • 您忘记将-t 添加到readarray。此外,对read 使用超时 (-t) 也会有所帮助。
  • -t 去除尾随换行符,但最初的问题似乎是没有尾随换行符可以去除。
  • @chepner 如果 OP 实际上希望数据不是多行的,那么使用单个 read 就足够了。不需要readarray
  • 顺便说一句,我不确定您的编辑是否适用,因为它不是从文件中读取输入,而是从命令中读取。
猜你喜欢
  • 1970-01-01
  • 2023-01-25
  • 2016-04-10
  • 2016-04-03
  • 2013-01-26
  • 2015-03-28
  • 2012-08-25
  • 1970-01-01
  • 2016-04-28
相关资源
最近更新 更多