arv*_*ind 7 command-line scripts redirect
通过命令外壳,我们可以重定向三个标准文件流,以便我们可以从文件或另一个命令而不是从键盘获取输入,并且我们可以将输出和错误写入文件或将它们作为输入发送给后续命令。
那么为什么我们不能将输入提供给另一个文件
~# /root/Documents/text1.txt > /root/Documents/text2.txt
Run Code Online (Sandbox Code Playgroud)
Eli*_*gan 17
您不能使用file1 > file2to copyfile1的内容,file2因为那里没有命令。你必须发出一些命令。
exec内置程序)。但它们的工作方式是更改执行输入输出操作的操作的源或目标,即从文件或设备读取或写入的操作。您必须实际执行一些操作。file1 > file2在某些情况下是一个有效的命令,但它不会复制file1到file2. 相反,正如l0b0 所说,它尝试作为程序或脚本运行 file1,并且——无论是否成功——将运行的标准输出发送file1到file2. (如果file2是普通文件,它会被覆盖。)很容易认为类似的事情<file1 >file2会起作用。但它不会:当您离开该命令时,不会执行任何操作。file1用作输入并file2用作输出...但由于实际上什么也没做,输出为空,唯一的影响是(a)file2如果它不存在则创建,或者(b)file2如果存在则为空:
ek@Ilex:~$ echo foobar > file1
ek@Ilex:~$ echo quux > file2
ek@Ilex:~$ cat file1
foobar
ek@Ilex:~$ cat file2
quux
ek@Ilex:~$ <file1 >file2
ek@Ilex:~$ cat file2
ek@Ilex:~$ file file1 file2
file1: ASCII text
file2: empty
Run Code Online (Sandbox Code Playgroud)cp file1 file2.假设这file2是一个常规文件(或不存在但您希望它在命令运行后作为常规文件存在),您可能应该简单地使用该cp命令。
正如Sylvain Pineau 所说,您也可以使用cat file1 > file2。但是,该cp命令在写入已存在的文件时表现良好:它用源覆盖目标,但保留目标的原始权限掩码(因此即使在直觉上认为cat file1 > file2需要的情况下也很好):
ek@Ilex:~$ echo glockenspiel > file1
ek@Ilex:~$ echo flugelhorn > file2
ek@Ilex:~$ cat file1
glockenspiel
ek@Ilex:~$ cat file2
flugelhorn
ek@Ilex:~$ chmod +x file2
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 11 Sep 16 03:28 file2
ek@Ilex:~$ cp file1 file2
ek@Ilex:~$ cat file2
glockenspiel
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 13 Sep 16 03:28 file2
Run Code Online (Sandbox Code Playgroud)
无论是cp命令和重定向与>将覆盖一个普通文件的内容,如果存在的话。但>>重定向附加。
所以,如果你想要的内容附加file1到file2,而不是覆盖file2与内容file1,具有重定向>>(不 >)是一个不错的选择:
ek@Ilex:~$ echo 'Violets are blue.' > file1
ek@Ilex:~$ echo 'Roses are red.' > file2
ek@Ilex:~$ cat file1
Violets are blue.
ek@Ilex:~$ cat file2
Roses are red.
ek@Ilex:~$ cat file1 >> file2
ek@Ilex:~$ cat file2
Roses are red.
Violets are blue.Run Code Online (Sandbox Code Playgroud)
您可以使用以下cat命令重定向 text1.txt 的内容:
~# cat /root/Documents/text1.txt > /root/Documents/text2.txt
Run Code Online (Sandbox Code Playgroud)
注意:您还可以使用cat来创建新的二进制文件,例如:
~# cat mypic.jpg > my_new_pic.jpg
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4397 次 |
| 最近记录: |