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

jba*_*sta 11 linux redirect dialog stdout

我正在尝试使用whiptail,因为它是对话框的轻量级替代品,并且似乎默认安装在大多数系统中(即,如果它被"遗忘"或默认情况下未安装,则无需人员安装它).我在这里查看了一些问题#1562666,但是我正在寻找一种替代方法来重定向输出,这样就可以设置一个环境变量,而不仅仅是写入磁盘.

例如,当我尝试使用对话框时,这是有效的(我看到对话框,并设置了一个环境变量):

result=$(dialog --output-fd 1 --inputbox "Enter some text" 10 30)
echo Result=$result
Run Code Online (Sandbox Code Playgroud)

但是,当使用whiptail代替对话框时,这不起作用,因为对话框永远不会显示.我必须将其重定向到磁盘文件并读取它,例如:

result=$(tempfile) ; chmod go-rw $result
whiptail --inputbox "Enter some text" 10 30 2>$result
echo Result=$(cat $result)
rm $result
Run Code Online (Sandbox Code Playgroud)

它工作正常,我可以从头到尾使用相同的tempfile(当脚本结束时删除它).但是为了这个而被迫使用磁盘感觉很尴尬,而不是将它全部保留在内存中(重定向到环境变量).

所以我问:我忘记了什么 - 或者在使用whiptail时我是否真的必须使用磁盘?

提前感谢您的反馈.

Kim*_*ais 30

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

foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3)
Run Code Online (Sandbox Code Playgroud)

  • ...我想可以在最后添加 `3>&-`,让 1 和 2 交换,3 很好地关闭。不过,这并不是特别重要。 (2认同)