rozumiem .bash_profile
jest ukrytym plikiem, stąd okres przed.
Rozumiem, aby wykonać skrypt w bieżącym katalogu. Musisz określić ./
, Ale nie jestem pewien, dlaczego jesteśmy już w bieżącym katalogu i skrypt znajduje się w bieżącym katalogu.
q1) Dlaczego musimy nadal ./
? Czy możemy po prostu umieścić nazwę skryptu?
q2) Jaka jest różnica pomiędzy . bash_profile
i . ./.bash_profile
?
Jest .
odnoszące się do bieżącego katalogu lub .
= pozyskiwanie?
==================================
Pytania dodatkowe
Poniżej znajduje się moja ŚCIEŻKA
[oracle@SJOAM scripts]$ echo $PATH
.:/usr/local/java/bin:/usr/local/java/db/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oracle/bin:/u01/app/oracle/product/11.2.0/dbhome_1/bin:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin:/u01/app/oracle/dba_scripts/bin
Jak widać, nie kończy się to na: a potem nie ma miejsca. Jestem teraz w katalogu
[oracle@SJOAM bin]$ cd ~/scripts
[oracle@SJOAM scripts]$ pwd
/home/oracle/scripts
[oracle@SJOAM scripts]$ ls
rmanbkp.sh test.sh
Ale nadal jestem w stanie wykonać test.sh bez określenia ./test.sh / home / oracle / scripts nie znajduje się w moim $ PATH
=============================
P1) Dlaczego nadal mogę wykonać skrypt bez określenia ./?
P2) Jeśli mój $ PATH ma katalog, który nie istnieje, czy wyszukiwanie jest kontynuowane przez resztę PATH?
P3) Czy nieprawidłowy katalog w katalogu $ PATH = bieżący katalog?
.
, jest pierwszą rzeczą w tym. To może wyjaśnić niektóre twoje zamieszanie.Odpowiedzi:
q1
Gdy polecenie jest określone bez katalogu, PATH jest wyszukiwane dla polecenia. Jeśli polecenie nie zostanie znalezione w PATH, zostanie wyświetlony komunikat o błędzie. To dla twojego bezpieczeństwa i ochrony.
Jeśli polecenie jest określone ścieżką, powłoka zakłada, że wiesz, co robisz i uruchamia to polecenie.
Czasami ludzie umieszczają bieżący katalog w PATH. PATH to rozdzielona dwukropkami lista katalogów. Jeśli jeden z tych katalogów jest pusty, to jest interpretowany jako bieżący katalog. Na przykład w tej ścieżce pusta przestrzeń po ostatnim dwukropku jest interpretowana jako bieżący katalog:
Z taką PATH możesz wykonać polecenie w bieżącym katalogu bez określania
./
przed jego nazwą. Bądź jednak świadomy, że może to czasami prowadzić do przykrych niespodzianek.q2
Tak, oznacza to wiodącą przestrzeń kropkową źródło scenariusz. Pozyskiwanie skryptu oznacza, że jest uruchamiany w bieżącej powłoce, a nie w podpowłoce. Skrypt źródłowy może zmienić obecne środowisko. Skrypt w podpowłoce nie może. Następujące dwa polecenia są równoważne:
Podsumowując, (1) wiodąca kropka w linii poleceń oznacza „źródło skryptu” i (2) wiodąca kropka na nazwie pliku oznacza, że plik jest ukryty. Te dwa zastosowania kropki są oddzielne i niezależne.
Q1
Pierwszy katalog w PATH to
.
który jest bieżącym katalogiem. Dlatego możesz wykonywać skrypty w bieżącym katalogu bez określania ich katalogu.Ponieważ katalog bieżący jest określony jako pierwszy, to PATH jest szczególnie niebezpieczny: oznacza to, że każdy skrypt w bieżącym katalogu będzie miał pierwszeństwo przed wszystkimi standardowymi plikami wykonywalnymi w
/bin
,/usr/bin
, itp. Może to spowodować awarię dowolnego programu, który oczekuje na uruchomienie zwykłych plików wykonywalnych.Q2
Zróbmy test, dodając nieistniejący katalog, nazwijmy go
nonsense
, do ścieżki:Nieprawidłowe ścieżki są ignorowane, a wyszukiwanie jest kontynuowane z następnym elementem na liście PATH.
Q3
Nie, złe katalogi w PATH nie są interpretowane jako bieżący katalog. Na przykład:
źródło
:
), koniec (końcowy dwukropek:
) lub środkowy (dwa sąsiednie dwukropki::
), jest interpretowany jako bieżący katalog.Nazwa pliku to
.bash_profile
z wiodącą kropką.Polecenie do źródła pliku do bieżącej powłoki to
.
(kropka)Więc chcesz
. .bash_profile
- (polecenie = "."; argument = ". bash_profile" `)Inny sposób powiedzenia tego, co może być bardziej oczywiste:
źródło