Você não pode usar file1 > file2
para copiar o conteúdo de file1
para file2
porque não há comando lá. Você tem que emitir algum comando.
- Os redirecionamentos se aplicam a (1) um comando executado ou (2) o shell como um todo (se aplicado ao
exec
builtin). Mas eles funcionam alterando a origem ou o destino das ações que executam operações de entrada - ou seja, que leem ou gravem em um arquivo ou dispositivo. Você tem que realmente realizar alguma ação. -
file1 > file2
é um comando válido, sob algumas circunstâncias, mas não copiafile1
parafile2
. Em vez disso, como l0b0 diz , ele tenta executarfile1
como um programa ou script, e - quer isso tenha sucesso ou não - envia o resultado padrão da execução defile1
para %código%. (Sefile2
for um arquivo regular, ele será sobrescrito). -
É tentador pensar que algo como
file2
funcionaria. Mas isso não acontece: quando você deixa o comando, nenhuma operação é executada.<file1 >file2
é usado como entrada efile1
é usado como saída ... mas como nada é realmente feito , a saída está vazia, o único efeito é (a) criarfile2
se ele já não existe ou (b) criefile2
empty se ele existir: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
Você provavelmente só quer executar file2
.
Assumindo, isto é, que cp file1 file2
é um arquivo regular (ou não existe, mas você quer que ele exista como um arquivo regular após a execução do seu comando), provavelmente você deve simplesmente usar o file2
comando.
Como Sylvain Pineau diz , você pode usar cp
também. No entanto, o comando cat file1 > file2
é bem comportado ao gravar em um arquivo que já existe: ele sobrescreve o destino com a origem, mas mantém o original permissões de máscara (e, portanto, é bom mesmo em situações em que alguém pode pensar intuitivamente cp
foram necessários):
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
Para acrescentar , você provavelmente quer um redirecionamento (diferente).
Tanto o comando cat file1 > file2
quanto o redirecionamento com cp
irão sobrescrever o conteúdo de um arquivo regular, se existir. Mas >
redireciona os anexos.
Portanto, se você quiser acrescentar o conteúdo de >>
a file1
em vez de substituir file2
pelo conteúdo de file2
, um redirecionamento com file1
( não >>
) é uma boa escolha:
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.