前面介绍了与标准输出跟标准错误输出相对应的数据重定向符“>”跟“2>”,那么与标准输入相对应的数据重定向符“<”又有什么功能呢?简单地说,就是将原本需要由键盘输入的数据,改由文件内容或字符串来替代。接下来,我们就使用 cat 命令来体验一下什么叫做键盘输入吧。
trevor@trevor-PC:~/linux/linux100$ ls 06 trevor@trevor-PC:~/linux/linux100$ cat > test This is a test to show how to input content to a file named test by the command cat , in order to end this input, we have to press the "Ctrl+c". Now, I prepare to press the "Ctrl+c" to end this input.^C trevor@trevor-PC:~/linux/linux100$ trevor@trevor-PC:~/linux/linux100$ ls 06 test trevor@trevor-PC:~/linux/linux100$ cat test This is a test to show how to input content to a file named test by the command cat , in order to end this input, we have to press the "Ctrl+c". trevor@trevor-PC:~/linux/linux100$
这个实例中,我们将键盘输入的内容传递给 cat 命令,cat 命令再依靠重定向命令 > 将其存入 test 文件中。需要主要注意的是,上面实例中,最后一行由于没有换行便结束了输入,导致系统未将最后一行写入缓冲区,因此,test 文件中未能保存实际输入的最后一行,倘若想保存那一行,应该换行以后再按“Ctrl+c”来结束输入。那我们是否可以使用文件内容或字符串来取代键盘输入呢?可以的,见如下实例:
trevor@trevor-PC:~/linux/linux100$ ls 06 trevor@trevor-PC:~/linux/linux100$ cat > test < ~/.bashrc trevor@trevor-PC:~/linux/linux100$ ls 06 test trevor@trevor-PC:~/linux/linux100$ ls -l test ~/.bashrc -rw-r--r-- 1 trevor trevor 3353 2011-03-09 18:30 /home/trevor/.bashrc -rw-r--r-- 1 trevor trevor 3353 2012-02-23 23:36 test trevor@trevor-PC:~/linux/linux100$
我们发现,实例中两个文件的大小一样,其实内容也一模一样,几乎跟 cp 命令拷贝过来的一样。原理也不难理解,即将 ~/.bashrc 文件中的内容代替标准输入传递给 cat 命令,cat 命令再结合重定向命令 > 将其存入 test 文件中。
跟 < 不同的是,<< 只用来指定键盘输入的结束符,比方说,我要使用 cat 命令记录我在键盘输入的信息,且当我输入 end 时结束输入,那么我就可这样做:
trevor@trevor-PC:~/linux/linux100$ ls 06 trevor@trevor-PC:~/linux/linux100$ cat > test << "end" > This is a test > for the command > cat, >, and << > The input will auto exist when I input the string "end" in a new line > end trevor@trevor-PC:~/linux/linux100$ ls 06 test trevor@trevor-PC:~/linux/linux100$ cat test This is a test for the command cat, >, and << The input will auto exist when I input the string "end" in a new line trevor@trevor-PC:~/linux/linux100$
由如上实例可知,利用 << 命令右侧的指定字符,我们可以结束本次输入过程,而不必按“Ctrl+c”来终止。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。