我试图使用whiptail,因为它是对话框的轻量级替代品,似乎在大多数系统中默认安装(即,如果“忘记”或默认情况下未安装,则人们不必四处安装)。 我在这里检查了问题#1562666的几个例子,但我正在寻找一个替代redirect输出,以便设置一个环境variables,而不是只写入磁盘。
例如,当我尝试与对话框,这个工程(我看到对话框,并设置了一个环境variables):
result=$(dialog --output-fd 1 --inputbox "Enter some text" 10 30) echo Result=$result
但是,当使用whiptail代替对话框时,这不起作用,因为对话框从不出现。 我必须将其redirect到磁盘文件并读取它,例如:
result=$(tempfile) ; chmod go-rw $result whiptail --inputbox "Enter some text" 10 30 2>$result echo Result=$(cat $result) rm $result
它的工作原理,我可以从头到尾使用相同的临时文件(当脚本结束时删除它)。 但是为了这个而强迫使用磁盘,而不是把它全部保存在内存中(redirect到一个环境variables),感觉很尴尬。
所以我问:我忘记了什么 – 或者当我使用whiptail时真的必须使用磁盘吗?
预先感谢您的反馈。
这可能是因为whiptail使用stdin和stdout来打印输入框,所以你不能直接将stderr重定向到stdout,但你需要交换它们,例如:
foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3)
看来,whiptail(1)根据TERM环境变量的设置将其控制输出写入终端。 因此,您不能使用whiptail(1)的标准输出流设置变量。 此外,whiptail(1)将输入框的用户输入写入标准错误流,因此您不能使用其标准输出流来设置变量。