Kiedy wprowadzam pojedynczy cudzysłów '
w terminalu, przechodzi on w inny tryb i polecenia nie są wykonywane. Co to jest ten tryb i kiedy go używamy?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
command-line
bash
manikanta
źródło
źródło
'
)Odpowiedzi:
W efekcie powłoka prosi o podanie pełnego polecenia / wyrażenia iz tego powodu wyświetla
PS2
ciąg zachęty.Od
man bash
:A nieco wcześniej:
Tak więc, jak można się domyślić po przeczytaniu dokumentacji, powłoki mają wiele podpowiedzi w różnych celach.
PS1
Szybka toroot@sai:~#
ciąg, który pojawia się zwykle podczas wprowadzania poleceń.>
jestPS2
monitem. Są też inne:PS3
doselect
bloku poleceń iPS4
do debugowania za pomocąset -x
polecenia. W tym przypadku jesteśmy bardziej zainteresowaniPS2
.Istnieje wiele sposobów wyświetlania
PS2
zachęty przez powłokę (i gdzie konieczne może być wypełnienie polecenia w nowym wierszu). Ten sam monit jest używany podczas wykonywaniahere-doc
przekierowania (w którym polecenie jest uważane za zakończone, gdy zobaczysz ciąg kończący, w tym przykładzieEOF
):Bardzo często kontynuację długiego polecenia można wykonać przez dodanie
\
i natychmiastowego (!) Znaku nowej linii, co spowoduje pojawienie się tego samego monitu:Kiedy potoki, operatory logiczne lub specjalne słowa kluczowe pojawiają się w wierszu poleceń przed znakiem nowej linii, polecenie jest również uważane za niekompletne, dopóki nie zostaną wprowadzone wszystkie końcowe instrukcje:
W twoim konkretnym przypadku pojedynczy cytat oznacza dosłowną interpretację tego, co znajduje się pomiędzy pojedynczymi cytatami. Zatem, jak wskazała Zanna, wpisujesz polecenie składające się z nowej linii +
ls
+ nowej linii. Nie można znaleźć takiej wykonywalnej nazwy pliku (i zazwyczaj nazwy plików poleceń powinny składać się wyłącznie ze znaków alfanumerycznych oraz znaków podkreślenia, myślników i kropek). Chociaż rzeczywiście możliwe jest posiadanie nazw plików zawierających znaki specjalne, zawsze można tego uniknąć.UWAGA : takie zachowanie, jak pokazano w twoim przykładzie, jest specyficzne dla powłok podobnych do Bourne'a, w tym
bash
:dash
(na Ubuntu jest to dowiązanie symboliczne/bin/sh
)ksh
, imksh
.csh
a jego pochodne nie zachowują się w taki sposób:Jednak w trybie interaktywnym
csh
nadal będzie wyświetlany?
jako monit2, gdy wymagane jest więcej danych wejściowych:Zobacz też:
źródło
What's the difference between <<, <<< and < < in bash?
jest offline / zły.Powłoka czeka tylko na końcowy cytat. Gdy go wpiszesz, zrobi dokładnie to, co zwykle, i spróbuje wykonać wprowadzone polecenie.
Cytaty powodują, że powłoka nie interpretuje znaków specjalnych, co oznacza, że rozszerzenia nie są wykonywane. Pojedyncze cudzysłowy całkowicie eliminują wszelkie interpretacje znaków specjalnych. Zwykle nowa linia rozdziela polecenia, ale tutaj uwzględniłeś nowe linie jako część polecenia, cytując je.
Ponieważ nie ma takiej komendy jak
<newline>ls<newline>
, nie można jej znaleźć.źródło