Por que o cd imprime quando executado na substituição do comando?

3

Se eu usar o BASH 'cd' embutido em uma substituição de comando, ele imprime material extra para stdout, mas somente quando canalizado para, por exemplo, menos.

$ echo 'cd .'

# The output is a single newline, appended by echo.


$ echo 'cd .' | less
# less displays:
ESC]2;my.hostname.com - tmp/testenv^G
(END) 

O que está acontecendo lá? Esse comportamento não está documentado na página man bash do cd. Obviamente, executando apenas 'cd' em uma substituição de comando é bobo, mas algo como

NEWDIR='cd mypath; pwd'

pode ser útil.

Eu resolvi isso usando

NEWVAR='cd mypath > /dev/null 2>&1; pwd'

mas ainda quero saber o que está acontecendo.

Versão do Bash: GNU bash, versão 3.2.25 (1) -release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc.

Distro: Lançamento do SL Linux Scientific 5.5 (Boro)

    
por reasgt 29.08.2012 / 21:39

1 resposta

0

Você está vendo a sequência de escape do xterm (ESC 2; new-title ^ G) para alterar o título da janela.

(O que se segue é principalmente conjectura.)

Quando você grava a saída no terminal, o emulador de terminal (eu estou supondo) o remove do fluxo antes de exibi-lo na tela. Quando você canaliza a saída por menos, você vê toda a saída.

Verifique o valor de $PROMPT_COMMAND ; você pode ver um comando lá que imprima a string (provavelmente envolvendo $PWD ou uma chamada para pwd ).

    
por 30.08.2012 / 03:31

Tags