Jeśli użyję wbudowanego w cd polecenia „cd” BASH, wypisuje on dodatkowe rzeczy na standardowe wyjście, ale tylko wtedy, gdy zostanie potokowane, np. Mniej.
$ 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)
Co się tam dzieje? To zachowanie nie jest udokumentowane na stronie podręcznika bash dla cd. Oczywiście uruchamianie po prostu „cd” w podstawianiu poleceń jest głupie, ale coś w tym stylu
NEWDIR=`cd mypath; pwd`
może być przydatne.
Rozwiązałem to, używając
NEWVAR=`cd mypath > /dev/null 2>&1; pwd`
ale nadal chcę wiedzieć, co się dzieje.
Wersja Bash: GNU bash, wersja 3.2.25 (1) -release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc.
Distro: Scientific Linux SL wersja 5.5 (Boron)
cd
wypisz prawdziwą ścieżkę. A może zdefiniowałeś Alias dlacd
?type cd
, wynik powinien byćcd is a shell builtin
. Upewnić sięecho `builtin cd .` | less
powoduje to samo. Wymusza użycie wbudowanego polecenia powłoki. Nie można repro, bash 3.2.48 (1) na OS X.command
omija użycie wbudowanego basha, ale zamiast tego wykonuje program zwrócony zwhich cd
.Odpowiedzi:
Widzisz sekwencję ucieczki xterm (ESC 2; nowy-tytuł ^ G), aby zmienić tytuł okna.
(Poniżej znajduje się głównie przypuszczenie.)
Kiedy piszesz dane wyjściowe do terminala, emulator terminala (zgaduję) usuwa go ze strumienia przed wyświetleniem go na ekranie. Gdy potokujesz wyjście przez less, widzisz całe wyjście.
Sprawdź wartość
$PROMPT_COMMAND
; może pojawić się tam polecenie, które wypisuje ciąg (prawdopodobnie z udziałem$PWD
lub połączenie dopwd
).źródło