一尘不染

鞭尾:如何将输出重定向到环境变量?

linux

我正在尝试使用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

它可以工作,并且我可以从头到尾使用相同的临时文件(在脚本结束时将其删除)。但是,被迫为此仅使用磁盘而不是将其全部保留在内存中(重定向到环境变量)感觉很尴尬。

所以我问:是我忘了一些东西吗?还是在使用鞭尾时 真的 必须使用磁盘?

预先感谢您的反馈。


阅读 244

收藏
2020-06-03

共1个答案

一尘不染

这可能是因为鞭尾使用stdin和stdout打印输入框,因此您不能将stderr直接重定向到stdout,但需要交换它们,例如:

foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3)
2020-06-03