当前位置: 首页 > 面试题库 >

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

盛跃
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 在bash中,调用将在stdout上显示该命令的任何输出。 调用会将该命令的任何输出重定向到指定的文件(在本例中为“输出”)。 有没有一种方法可以将输出重定向到文件 并 在stdout上显示? 问题答案: 您想要的命令名为 : 例如,如果您只关心标准输出: 如果要包括stderr,请执行以下操作: 将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将两

  • 问题内容: 我有一个cron作业,现在将其输出重定向到文件中。看起来如下 有人可以帮助我将其输出重新分配到stdout吗? 问题答案: 在任何终端上输入,我们将获得该特定终端窗口的设备文件,例如。将cron作业重新命名为该文件

  • 问题内容: 我想从Groovy程序中执行foo.bat,并将生成的进程的输出重定向到stdout。Java或Groovy代码示例都可以。 foo.bat可能需要花费几分钟才能运行并生成大量输出,因此我希望在生成后立即查看输出,而不是必须等到该过程完成之后才能立即查看所有输出。 问题答案: 它使用一个类读取执行的程序生成的所有输出,并将其显示在其自己的stdout中。

  • 问题内容: 我正在AIX 6上工作,在KIX Shell上运行Java命令,并且正在尝试调试类加载问题。我放了-verbose:class来打印加载的类,然后>> / home / user / log.log将控制台放到一个文件中。已创建log.log文件,但其大小为零。文件不包含任何信息,所有详细信息都在一闪而过。 问题答案: 也尝试重定向: 您的Java代码可能正在编写您的命令未重定向的信息

  • 我想让我的程序记录给定对象的XML使用: 目前,我使用stdout作为输出流。但是stdout没有打印在log4j日志文件中。 如何将此方法的输出重定向到log4j日志文件? 谢啦

  • 问题内容: 我正在尝试将命令输出重定向到变量: 然后阅读: 运行它时,输出如下: 但是变量保持空白。对于其他命令,我已经尝试过相同的方法,并且一切正常。 这会将文件列表写入变量,以便以后可以读取。我应该怎么做才能使其正常工作? 问题答案: 也许输出去了,不是吗? 尝试这个: