O que é um comando * .sorted e por que não funciona no meu bash?

7

Em um Guia do Bash para iniciantes ( sec. 3.2.1.2. Variáveis locais ) Existe um comando de exemplo que deveria listar todas as variáveis locais, que não estão em variáveis ambientais, ou então eu penso:

diff set.sorted printenv.sorted | grep "<" | awk '{ print $2 }'

Acredito que entendi tudo sobre esse comando, exceto a parte *.sorted . Além disso, este comando não funciona no meu Bash, especificamente por causa dos elementos acima. Aqui está a resposta (é a versão polonesa de Nenhum arquivo ou diretório ):

diff: set.sorted: Nie ma takiego pliku ani katalogu
diff: printenv.sorted: Nie ma takiego pliku ani katalogu

Vale a pena notar que eu uso o Ubuntu 14.04 com quase nenhuma alteração em sua instalação padrão.

Por causa disso, não consigo analisar esse comando no meu Bash shell, nem consegui encontrar nada sobre isso no Google, exceto o tutorial do qual tomei este comando.

Ficarei grato por uma explicação abrangente, já que nunca encontrei uma expressão como essa antes.

    
por Lurco 13.01.2016 / 15:15

1 resposta

21

Elas não são expressões, são nomes de arquivos para arquivos produzidos da seguinte forma:

 printenv | sort > printenv.sorted
 set | sort > set.sorted

Isso não está claro na documentação, então sua confusão é compreensível!

Observe que você pode precisar ajudar diff e grep , forçando-os a tratar suas entradas como texto (com -a ); variáveis de ambiente podem conter valores que farão com que eles tratem sua entrada como binária, o que não produzirá nada útil:

diff -a set.sorted printenv.sorted | grep -a "<" | awk '{ print $2 }'

Melhor ainda, use comm para comparar os dois arquivos:

comm -23 set.sorted printenv.sorted

Você pode substituir os arquivos por substituições de processos:

comm -23 <(set|sort) <(printenv|sort)

para evitar a criação de arquivos.

    
por 13.01.2016 / 15:22