Poniższe zachowuje się tak samo w Fedorze i CentOS.
cd mydirectory
Pracuje.
cd notadirectory
działa (pobiera błąd z Bash).
Jednak,
cd `
daje mi jakiś monit:
>
Nic, co chciałem wprowadzić, nie daje żadnej odpowiedzi, po prostu przechodzi do następnej linii, aby ponownie zapytać. Po prostu używam CTRL+, Caby wrócić do mojego root@localhost
.
Jaki jest tego cel i co można z tym zrobić?
Dzięki!
>
niż tykania wstecznego, ponieważ może się to zdarzyć także w innych sytuacjachOdpowiedzi:
To, co wpisałeś, to backstick - jest to początek instrukcji bash, aby ocenić, co wpisujesz jako polecenie.
>
Jest wyświetlany w celu wskazania nadal wprowadzając komendę w następnym wierszu.Jeśli zamkniesz lewy tyknięcie, przekonasz się, że uruchomi się całe polecenie. Na przykład
źródło
cd `dirname \`which ls\``
= cd do katalogu, w którym znajduje się plik binarny „ls”. (tj.cd /bin
ponieważ to jest/bin/ls
) [edytuj: uff, ucieczka przed$()
się``
. Twój przykład (plus prawidłowe cytowanie) stałby sięcd "$(dirname "$(which ls)")"
znacznie mniej szalony.$()
go w specyfikacji POSIX zamiast cudzysłowów .Odpowiedź JohnC już wyjaśnia backtick. Ale zastanawiasz się również nad
>
pytaniem. Jest to monit o kontynuację i jest uruchamiany nie tylko przez kliknięcie wstecz, ale zawsze, gdy powłoka wyraźnie wie, że nie skończyłeś wpisywać polecenia. Najłatwiejszym przykładem jest umieszczenie wyraźnej kontynuacji linii\
na końcu linii wejściowej (co pomaga podzielić długie dane wejściowe):Pamiętaj, że podobnie jak
PS1
kontroluje wygląd wiersza polecenia, możesz także ustawićPS2
zmianę wiersza kontynuacji, npIstnieje wiele przyczyn kontynuacji. Pojedynczy ruch wstecz jest niekompletny, ale możesz także wpisać coś takiego
w jednym wierszu (uwaga: zalecane jest użycie
$(
i)
zamiast tego, ponieważ w nawiasach widać, gdzie zaczyna się i kończy ekspansja, a pojedyncze cofnięcia utrudniają zobaczenie, gdzie brakuje. I zagnieżdżanie ...). Inne możliwe przyczyny monitu o kontynuację:done
powhile
lubfor
fi
poif
esac
pocase
(cd $HOME; cat .bashrc)
|
a także wykonanie warunkowe||
i&&
(&
choć nie , ponieważ powoduje to, że polecenie działa w tle)'
lub"
)Co ciekawe, brakujący nawias
}
po rozszerzeniu zmiennej${
powoduje również monit o kontynuację, ale nie powiedzie się z powodu wstawionej spacji:źródło
Oznacza to, że twoje polecenie jeszcze się nie zakończyło. W rzeczywistości znak wstecznego znaku
`
służy do rozgraniczenia polecenia wbudowanego.Przykład:
źródło
Strzałka wsteczna rozpoczyna / kończy zastępowanie poleceń. Powłoka odczytuje polecenie wewnątrz backticksa, interpretuje wyniki i umieszcza je w poleceniu. Na przykład:. ls
which cp
powoduje wykonanie „what cp”, a wynik tej komendy, tj. / bin / cp zostanie użyty jako argument komendy ls. To zachowanie jest jednak przestarzałe, na korzyść bardziej wyraźnego i czytelnego podstawiania poleceń $ (cmd).Podczas wpisywania cd `Powłoka oczekuje, że polecenie zostanie wykonane, a następnie zostanie zamknięte za pomocą backsticka.
W przypadku rozszerzania zmiennej za pomocą nawiasów, powłoka wyświetla monit o kontynuację, ponieważ nawiasy te są oceniane leksykalnie przed wykonaniem rozwinięcia.
źródło