Redirecionamento e espaços de saída

9

Estou paranóico com isso, mas espero que seja uma pergunta simples:

Existe alguma diferença entre

cat file1 | egrep -oP "[Mm]y string" > /home/user/file.txt

e

cat file1|egrep -oP "[Mm]y string">/home/user/file.txt

ou seja, importa se tenho espaços preenchendo os caracteres pipe (|) e redirecionamento (>)? Estou realmente paranóico que, tendo espaços lá, os espaços de alguma forma acabam no arquivo de saída quando não quero isso. Alguém pode esclarecer? (Usando o Ubuntu 12 / bash, se isso interessar.)

Magnus
fonte
As únicas diferenças são: a) cosmética eb) conveniência ao editar linhas de comando no bash - por exemplo, uma "palavra" é delimitada por espaços, portanto, sem espaços ao redor |ou >digitando Ctrl-Wpara excluir a "palavra" anterior, isso excluiria mais do que você provavelmente desejava. idem para cursor do movimento teclas como Esc-fe Esc-betc
cas

Respostas:

8

Na linha de comando do shell, os espaços não citados servem apenas para delimitar palavras durante a análise de comandos. Eles não são transmitidos, nem nos argumentos que o comando vê, nem no fluxo de entrada padrão.

jw013
fonte
Tem certeza de que não há uma vulnerabilidade de segurança ao usar um espaço após os operadores? Estou com dificuldade para reproduzi-lo agora, mas há uma exploração comum em que um usuário mal-intencionado pode alterar a operação pretendida usando um arquivo como "fileName" quando o arquivo pretendido era "fileName".
usar o seguinte