Wiem, że istnieje określony zestaw reguł, które rozszerzają polecenia wpisywane przez użytkownika. (porozmawiajmy o powłoce bash).
Czy po rozwinięciu powłoki można wydrukować polecenie w formie? Wydaje się, że dobrym narzędziem jest nauka i sprawdzanie, jak powłoka rozwija znaki specjalne.
na przykład
$ echo *
{all the filenames in current dir}
Chcę wydrukować rozwinięte polecenie, które jest następującą linią:
echo {all the filenames in .}
echo cat * | someprogram
, które nie robią tego, co myślisz na podstawie tej odpowiedzi.Możesz użyć
set -x
.Rozważmy na przykład skrypt:
Po uruchomieniu wyświetla rozwiniętą
echo
instrukcję przed jej wykonaniem:I, jak zauważa Kundor, działa to również interaktywnie w wierszu poleceń:
Dokumentacja
man bash
wyjaśnia, coset -x
robi w następujący sposób:Domyślną wartością
PS4
jest, jak pokazano powyżej, znak plus, po którym następuje spacja.źródło
W przypadku interaktywnej powłoki naciśnięcie,
Ctrl+x
a następnie*
wpisanie wzorca globu spowoduje edycję linii poleceń z rozwiniętym wzorcem globu. Ze strony podręcznika użytkownika bash:Możesz być także zainteresowany rozszerzeniami glob-list (
Ctrl+x
,g
).źródło
Ctrl+x, *
zaraz po wpisaniuecho *
i przed naciśnięciem klawisza Enter? Jeśli nadal nie działa, możesz zmodyfikować~/.inputrc
glob-expand-word i powiązać go z czymś innym.Ctrl+x
a następnieShift+8
. Możesz spróbować sprawdzić, czyCtrl+x, g
działa, lub, jak powiedziałem wcześniej, przypisz własny klucz do.inputrc
pliku.Jeśli chcesz zobaczyć, jak argumenty są rozwijane lub tokenizowane, możesz użyć programu lub skryptu, który wypisuje swoje argumenty. Oto jedna implementacja w
bash
:Zakładając, że umieścisz to w pliku o nazwie
printargs.sh
(i sprawisz, że będzie wykonywalny), otrzymasz wynik w ten sposóbźródło