Imprimindo em “saída padrão” e “erro padrão”

0

Estou intrigado com alguma terminologia usada na lição de casa:

Assim, a maneira como entendi a pergunta é que eu deveria imprimir echo , cat , etc., o que eu faria com o comando echo , por exemplo

echo echo
echo cat 
echo ´!!´

É o que significa "está impresso na saída padrão"? Estou no caminho certo aqui?

Então, eu não sei o que significa "nada é impresso no erro padrão quando o comando é digitado".

    
por Haz 06.09.2015 / 00:39

2 respostas

2

Acredito que você deve interpretar este trabalho de casa como significando que você precisa exibir a palavra blotz usando cada um dos comandos echo , cat , ls , grep e !! por sua vez.

O caso trivial é echo blotz , claro.

O comando cat pode ser considerado para exibir o conteúdo de um arquivo. ( man cat pode ser útil aqui.) Sua lição de casa permite que você prepare um arquivo antes para você produzir, então, novamente, isso deve ser muito simples.

Os outros pensarão em alguns para alcançar o resultado necessário.

    
por 06.09.2015 / 00:58
1

A pergunta diz para você usar cada uma das listas de comandos e fazer com que o comando imprima a string blotz e nada mais. Se o seu professor quiser ter uma nova linha impressa após cada blotz (o que não está claro na sua pergunta), você poderia fazer:

$ echo "blotz"
blotz
$ echo "blotz" > file && cat file
blotz
$ touch blotz && ls blotz
blotz
$ echo blotz | grep b  ## This might also include (invisible) color codes
blotz
$ echo blotz | grep --color=never b ## This one avoids the color codes
blotz

Usar !! é mais complicado, pois, por padrão, ele também imprime o comando executado. Por exemplo:

$ blotz      ## run blotz to get that saved as !!
blotz: command not found
$ echo !!  ## print the value of !!
echo blotz ## Unfortunately, this also prints the command being run. 
blotz

Para contornar isso, você pode criar um pequeno script:

set -o histexpand
set -o history

blotz
echo !!

E, em seguida, execute da seguinte forma:

$ bash foo.sh 2> /dev/null 
blotz

Pode haver um hack inteligente para isso usando subshells, mas não consegui encontrá-lo.

Se o seu professor nem quiser a nova linha, use-o:

$ echo -n "blotz"
$ echo -n "blotz" > file && cat file
$ touch blotz && ls blotz | tr -d $'\n'
$ echo blotz | grep --color=never b | tr -d $'\n'

E para o script !! :

$ bash foo.sh 2> /dev/null | tr -d $'\n'
    
por 06.09.2015 / 17:50