我正在尝试使用whiptail,因为它是dialog的轻量级替代,并且似乎默认安装在大多数系统中(即,如果它被“遗忘”或默认情况下未安装,人们不必四处安装它)。我在此处检查了问题#1562666的几个示例,但我正在寻找一种重定向输出的替代方法,这样可以设置一个环境变量,而不仅仅是写入磁盘。
例如,当我尝试使用对话框时,此方法有效(我看到对话框,并设置了环境变量):
result=$(dialog --output-fd 1 --inputbox "Enter some text" 10 30) echo Result=$result
但是,当使用发尾代替对话框时,这将不起作用,因为对话框永远不会显示。我必须将其重定向到磁盘文件并读取它,例如:
result=$(tempfile) ; chmod go-rw $result whiptail --inputbox "Enter some text" 10 30 2>$result echo Result=$(cat $result) rm $result
它可以工作,并且我可以从头到尾使用相同的临时文件(在脚本结束时将其删除)。但是,被迫为此仅使用磁盘而不是将其全部保留在内存中(重定向到环境变量)感觉很尴尬。
所以我问:是我忘了一些东西吗?还是在使用鞭尾时 真的 必须使用磁盘?
预先感谢您的反馈。
这可能是因为鞭尾使用stdin和stdout打印输入框,因此您不能将stderr直接重定向到stdout,但需要交换它们,例如:
foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3)