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.)


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.