这是最奇怪的事情。剧本从 shell 运行时有效没有问题。当我将其作为 Openbox 管道菜单运行时,出现错误“管道菜单的输出无效”。在尝试了该脚本后,我发现它与打印第五列特别相关。
更令人困惑的是,这种情况只发生在七月。所有其他月份将显示正确运行脚本。
这是应该的脚本。它作品从终端执行时:
#!/bin/bash
echo "<openbox_pipe_menu>"
cal | while read i;do
echo "<item label=\"$i\"/>"
done
echo "</openbox_pipe_menu>"
echo "</openbox_pipe_menu>"
脚本的输出:
$ ./date-menu.sh
<openbox_pipe_menu>
<item label="July 2014"/>
<item label="Su Mo Tu We Th Fr Sa"/>
<item label="1 2 3 4 5"/>
<item label="6 7 8 9 10 11 12"/>
<item label="13 14 15 16 17 18 19"/>
<item label="20 21 22 23 24 25 26"/>
<item label="27 28 29 30 31"/>
<item label=""/>
</openbox_pipe_menu>
这是简化版本,在作为管道菜单运行时仍然失败:
#!/bin/bash
calRow () {
cal | gawk -v row=$1 '{ if (NR==row) { print $0 } }'
}
echo "<openbox_pipe_menu>"
echo "<item label=\"`calRow 5`\"/>"
echo "</openbox_pipe_menu>"
但是...如果我使用除 5 之外的任何数字执行相同的脚本,它就会像魅力一样工作:
#!/bin/bash
calRow () {
cal | gawk -v row=$1 '{ if (NR==row) { print $0 } }'
}
echo "<openbox_pipe_menu>"
echo "<item label=\"`calRow 2`\"/>"
echo "<item label=\"`calRow 3`\"/>"
echo "<item label=\"`calRow 4`\"/>"
echo "<item label=\"`calRow 6`\"/>"
echo "<item label=\"`calRow 7`\"/>"
echo "<item label=\"`calRow 8`\"/>"
echo "</openbox_pipe_menu>"
这是 menu.xml 文件,以防有人想查看它:
<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
<menu id="root-menu" label="Openbox 3">
<item label="Terminal emulator">
<action name="Execute">
<execute>x-terminal-emulator</execute>
</action>
</item>
<item label="Browser">
<action name="Execute">
<execute>x-www-browser</execute>
</action>
</item>
<item label="Virtualbox">
<action name="Execute">
<execute>virtualbox</execute>
</action>
</item>
<!-- This requires the presence of the 'menu' package to work -->
<menu id="/Debian"/>
<separator/>
<item label="obmenu">
<action name="Execute">
<execute>obmenu</execute>
</action>
</item>
<item label="ObConf">
<action name="Execute">
<execute>obconf</execute>
</action>
</item>
<item label="Reconfigure">
<action name="Reconfigure"/>
</item>
<item label="Restart">
<action name="Restart"/>
</item>
<separator/>
<menu execute="obpipes/sysinfo.sh" id="pipe-sysinfo" label="System Info"/>
<menu execute="obpipes/date-menu.sh" id="pipe-datemenu" label="Date"/>
<menu id="client-list-menu"/>
<separator/>
<item label="Exit">
<action name="Exit"/>
</item>
</menu>
</openbox_menu>
答案1
事实证明,是突出显示的当天导致了问题。我可以通过关闭突出显示来修复它(cal -h)