我在用信息文本填充我的 WM 栏时遇到了这个有趣的问题,这是通过设置根窗口的标题来应用的,即 xsetroot -name "clever words"
为此,在终端中打印财富可以正常工作:
fortune -s | while read -r; do xsetroot -name "$REPLY"; done
Run Code Online (Sandbox Code Playgroud)
然而,当从 shell 脚本运行时,同样会失败:
#!/bin/sh
cat /tmp/afile | while read; do echo "$REPLY"; done
Run Code Online (Sandbox Code Playgroud)
产生:
$ sh afilereader
afilereader: 2: read: arg count
当然,这是通过将我们的财富结果分配给一个变量,然后将 xsetroot 与所述变量一起使用来解决的。但我仍然想了解为什么这在脚本中不起作用。
我意识到管道任一侧的每个命令都在它自己的子 shell 中运行,但看不到它们的本地化变量如何影响 while 读取循环。或者甚至在循环迭代之间变量是否超出范围?
我错过了什么?
更新:在sh
我以前被链接到仪表板,这是正在取得POSIX兼容的过程。使用更古老的bash
解决了这个问题。
Chr*_*own 10
您似乎正在 中运行第一个示例bash
,而在 指向的任何内容中运行第二个示例/bin/sh
,这是一个 POSIX shell,需要传递一个参数来指定您希望将输入放入的变量。将shebang更改为#!/bin/bash
应该可以解决此问题。
归档时间: |
|
查看次数: |
8685 次 |
最近记录: |