我正在尝试使用whiptail,因为它是dialog的轻量级替代品,并且似乎默认安装在大多数系统中(即,如果人们不必四处安装它它被“遗忘”或默认没有安装)。 我在这里查看了question #1562666的一些示例,但我正在寻找一种替代方法来重定向输出,以便设置环境变量,而不是仅写入磁盘。
例如,当我尝试使用对话框时,这是有效的(我看到对话框,并设置了一个环境变量):
result=$(dialog --output-fd 1 --inputbox "Enter some text" 10 30)
echo Result=$result
但是,当使用whiptail代替对话框时,这不起作用,因为对话框永远不会显示。我必须将其重定向到磁盘文件并读取它,例如:
result=$(tempfile) ; chmod go-rw $result
whiptail --inputbox "Enter some text" 10 30 2>$result
echo Result=$(cat $result)
rm $result
它可以工作,我可以从头到尾使用相同的tempfile(当脚本结束时删除它)。但是为了这个而被迫使用磁盘感觉很尴尬,而不是将它全部保存在内存中(重定向到环境变量)。
所以我问:我忘了什么 - 或者我真的在使用whiptail时必须使用磁盘吗?
提前感谢您的反馈。
答案 0 :(得分:30)
这可能是因为whiptail使用stdin和stdout来打印输入框,所以你不能将stderr直接重定向到stdout,但你需要交换它们,例如:
foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3)
答案 1 :(得分:2)
看来whiptail(1)根据TERM环境变量的设置将其控制输出写入终端。因此,您不能使用whiptail(1)的标准输出流来设置变量。此外,whiptail(1)将输入框的用户输入写入标准错误流,因此,再次,您不能使用其标准输出流来设置变量。