Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将标准输出同时重定向到变量和文件?_Bash_Io Redirection - Fatal编程技术网

Bash 如何将标准输出同时重定向到变量和文件?

Bash 如何将标准输出同时重定向到变量和文件?,bash,io-redirection,Bash,Io Redirection,这个问题来自Chris Johnson在第2章练习2中提出的Pro Bash编程 使用$RANDOM编写脚本,将以下输出写入文件和变量。以下数字仅用于显示格式;您的脚本应生成不同的数字: 1988.2365 13798.14178 10081.134 3816.15098 以下是我的解决方案: printf -v var "%5d.%-5d\n" $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM > FIL

这个问题来自Chris Johnson在第2章练习2中提出的Pro Bash编程

使用$RANDOM编写脚本,将以下输出写入文件和变量。以下数字仅用于显示格式;您的脚本应生成不同的数字:

 1988.2365
13798.14178
10081.134
 3816.15098
以下是我的解决方案:

printf -v var "%5d.%-5d\n" $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM > FILE
似乎输出直接进入var,文件为空

我的问题是,有没有一种方法可以将标准输出同时重定向到变量和文件

var="$(printf '%5d.%-5d\n' $RANDOM ... | tee FILE)"
用于“拆分”标准输出,使其既进入
文件
,又进入新的标准输出,可使用在变量中捕获。

您可以编写:

var="$(printf '%5d.%-5d\n' $RANDOM ... | tee FILE)"

使用“拆分”标准输出,使其既进入
文件
,又进入新的标准输出,可以使用在变量中捕获。

@47dev47null这在脚本中或通过命令行对您有效吗?如果我在命令行中输入这个,它会“起作用”,尽管var中的文本格式不正确(没有换行符,每个数字之间只有空格)。然而,如果我在脚本中运行这个完全相同的命令(相同的命令,但文件顶部有#!/bin/bash),var随后将为空。如果我从脚本内部打印var,就可以了。知道为什么运行脚本后var没有保持设置吗?谢谢@MikeBell:Re:“var中的文本格式不正确(没有换行符,每个数字之间只有空格)”:听起来好像你忘记了双引号。Re:“知道运行脚本后为什么var没有保持设置吗?”:总是这样。Bash脚本是一个独立的程序,而不是调用它的shell的一部分。独立程序不能修改调用程序的环境。(如果您想在单独的文件中定义变量,可以使用
source
内置程序,在当前shell中读取文件并将其内容作为Bash命令运行。)@ruakh非常感谢您的澄清!你是对的——如果我这样做了,而不是在脚本中,那么var的内容将正确显示。再次感谢@47dev47null这是通过脚本实现的,还是通过命令行实现的?如果我在命令行中输入这个,它会“起作用”,尽管var中的文本格式不正确(没有换行符,每个数字之间只有空格)。然而,如果我在脚本中运行这个完全相同的命令(相同的命令,但文件顶部有#!/bin/bash),var随后将为空。如果我从脚本内部打印var,就可以了。知道为什么运行脚本后var没有保持设置吗?谢谢@MikeBell:Re:“var中的文本格式不正确(没有换行符,每个数字之间只有空格)”:听起来好像你忘记了双引号。Re:“知道运行脚本后为什么var没有保持设置吗?”:总是这样。Bash脚本是一个独立的程序,而不是调用它的shell的一部分。独立程序不能修改调用程序的环境。(如果您想在单独的文件中定义变量,可以使用
source
内置程序,在当前shell中读取文件并将其内容作为Bash命令运行。)@ruakh非常感谢您的澄清!你是对的——如果我这样做了,而不是在脚本中,那么var的内容将正确显示。再次感谢!