Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
在linux脚本中正确使用IO重定向将用户输入附加到文件?_Linux_Redirect_Input_Scripting_Output - Fatal编程技术网

在linux脚本中正确使用IO重定向将用户输入附加到文件?

在linux脚本中正确使用IO重定向将用户输入附加到文件?,linux,redirect,input,scripting,output,Linux,Redirect,Input,Scripting,Output,我刚刚开始学习linux脚本,并学习用户输出/输入。我需要学习的一件事是将用户输入附加到文件输出中,并且一直尝试着这样做,但没有效果。差不多 读取文本>text.dat 或 阅读课文 $text>text.dat 通常会以失败告终,或者创建text.dat,无论用户键入什么,该文件都会以空结束。我遗漏了什么?read命令,如其中所述,将获取一行用户输入,并将其分配给一个变量,您可以将该变量命名为参数。如果您传递多个名称,它还将拆分用户输入并将其分配给多个变量。它将在后台完成这一切,而不打印任何形

我刚刚开始学习linux脚本,并学习用户输出/输入。我需要学习的一件事是将用户输入附加到文件输出中,并且一直尝试着这样做,但没有效果。差不多

读取文本>text.dat

阅读课文 $text>text.dat


通常会以失败告终,或者创建text.dat,无论用户键入什么,该文件都会以空结束。我遗漏了什么?

read命令,如其中所述,将获取一行用户输入,并将其分配给一个变量,您可以将该变量命名为参数。如果您传递多个名称,它还将拆分用户输入并将其分配给多个变量。它将在后台完成这一切,而不打印任何形式的对标准的确认。我们还知道,
操作符将标准从命令重定向到文件描述符。还需要注意的是,除非明确告诉bash一行包含多个命令(通过使用分号或类似方式),否则它将假定该行是一个具有多个参数的命令

让我们看看您的示例,看看发生了什么:

read text > text.dat
这将运行read命令,该命令将静默地将用户输入分配给名为$text的变量。然后,它会将命令的输出重定向到一个名为text.dat的文件中(无,因为它是静默的)。最终结果:一个空text.dat和一个未使用的$text变量

read text $text > text.dat
Bash将解析这个命令,并首先尝试获取分配给$text变量的值,此时它是未定义的,因此将被忽略。因此,它将运行read命令,该命令将静默地将用户输入分配给名为$text的变量。然后,它会将命令的输出重定向到一个名为text.dat的文件中(无,因为它是静默的)。最终结果:一个空text.dat和一个未使用的$text变量

read text $text > text.dat
那么我们如何解决这个问题呢?第一个命令很好,我们使用
readtext
允许用户输入一行,并将该行分配给名为$text的变量。然后,我们需要一种方法将该变量发送到标准输出,以便重定向它。为此,我们可以使用
echo
命令,我们可以重定向该命令

例如:

read text
echo $text > text.dat
另一件需要注意的事情是
操作符将覆盖文件,要附加到文件中,可以使用
>
操作符

因此,要获取用户输入并将其附加到文件中,我们有:

read text
echo $text >> text.dat