. .bash_profile i. ./.bash_profile (./ i.)

2

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?

Noob
źródło
Możesz przyjrzeć się swojej PATH nieco dokładniej. Aktualny katalog, ., jest pierwszą rzeczą w tym. To może wyjaśnić niektóre twoje zamieszanie.
8bittree

Odpowiedzi:

3

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:

$ echo $PATH
/bin:/usr/bin:/opt/bin:/usr/local/bin:

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:

source ~/.bashrc
. ~/.bashrc

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:

$ type date
date is hashed (/bin/date)
$ export PATH=/usr/bin/:nonsense:/bin
$ hash -r  # delete the cache
$ date
Thu Jul  9 11:13:18 PDT 2015

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:

$ export PATH=/usr/bin/:nonsense
$ date
bash: date: command not found
$ cd /bin
$ date
bash: date: command not found
$ ./date
Thu Jul  9 11:17:34 PDT 2015
John1024
źródło
edytowałem moje pytanie, proszę spójrz
Noob
@Noob zaktualizowałem odpowiedź na Twoje poprawione pytania.
John1024
dzięki - nie widziałem. Czy możesz mi również powiedzieć, czy system operacyjny napotkał nieprawidłowy lub pusty katalog na środku ścieżki, czy kontynuuje przeszukiwanie pozostałej ścieżki?
Noob
@Noob Dodałem informacje o nieprawidłowych katalogach. Pusty katalog, czy na początku (dwukropek wiodący) : ), koniec (końcowy dwukropek : ) lub środkowy (dwa sąsiednie dwukropki :: ), jest interpretowany jako bieżący katalog.
John1024
0

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:

filename=".bash_profile"
. "$filename"
glenn jackman
źródło