Zainspirowany tym pytaniem, zatytułowanym: Kiedy wbudowane polecenia są ładowane do pamięci , próbując na nie odpowiedzieć, wypróbowałem następujące polecenie i byłem nieco zaskoczony, że nie mogłem go uruchomić:
$ strace cd $HOME
Czy istnieje metoda, za pomocą której mogę uruchomić strace dla wbudowanych poleceń Bash?
strace
nie uruchomienie programu nie powoduje żadnych śladów?Odpowiedzi:
Jeśli pomyślisz o tym, jak
strace
działa, to ma całkowity sens, że żadne z wbudowanych w Bash nie będzie możliwe do śledzenia.strace
może śledzić tylko rzeczywiste pliki wykonywalne, podczas gdy wbudowane nie.Na przykład moje
cd
polecenie:Trick na strace'ing cd?
Natknąłem się na tę technikę, w której można przywoływać
strace
rzeczywistybash
proces i w ten sposób pośrednio prześledzić wcd
ten sposób.Przykład
Co powoduje, że mogę śledzić
bash
proces w następujący sposób:To jest monit Bash, w którym siedzi tam i czeka na dane wejściowe. Dajmy więc komendę
cd ..
:Z powyższych danych wyjściowych możesz zobaczyć, gdzie wpisałem polecenie,
cd ..
i naciśnij Enter, (\n
). Stamtąd widać, żestat()
funkcja została wywołana, a następnie Bash siedzi w kolejnejread(0..
zachęcie, czekając na kolejne polecenie.źródło
Do
strace
powłoki wykonującejcd /some/dir
:źródło
$1
tu, nabash
, nie powinno to być%
albo%1
?Możesz spróbować:
Na przykład:
źródło