Kiedy kompiluję egxc przez:
GCC x.c -o x
Aby wykonać wynik, muszę napisać:
./x
I tylko wpisując:
x
Nie działa z tą wiadomością:
x: polecenie nie znaleziono
Oznacza to, że Linux nie szuka go w bieżącym katalogu! Czy za tym zachowaniem kryje się (jestem pewien, że) jakiś rozsądny problem?
Odpowiedzi:
Ponieważ domyślnie bieżącego katalogu roboczego nie ma w
PATH
zmiennej.Jest to środek bezpieczeństwa / wygody. Jeśli masz pliki binarne / skrypty nazywane np
cd
,ls
itp w bieżącym katalogu roboczym, byłoby to bardzo irytujące, jeśli były one uruchamiane domyślnie.źródło
cd
wbash
, wykonuje rutynowe wewnętrzny do bash i nie/bin/cd
), chyba że poprzedzić z `.`sl
masz ten sam problem. Powinny być w nim tylko zaufane katalogi,$PATH
a ścieżki względne jak nigdy nie.
są zaufanym katalogiem dla interaktywnej powłoki.rm -r target
kiedy miałem na myśli,rm -f target
zwykle nie ma różnicy. Jeśli piszę,rm -f target
kiedy miałem na myślirm -r target
, albo nie ma różnicy, albo całkowite usunięcie kończy się niepowodzeniem. Co więcej, myślę, że za każdym razem, zanim piszęrm
, szczególnie jeśli dodam-f
lub-r
glob - to z natury niebezpieczne polecenie. Nikt nie myśli przedls
ing.Oznacza to, że bieżącego katalogu nie ma w zmiennej $ PATH.
źródło
Możesz to naprawić, dodając bieżący katalog (reprezentowany pojedynczą kropką) do
PATH
zmiennej środowiskowej.Sposób na zrobienie tego zależy od używanej powłoki.
jeśli używasz bash, możesz dodać linię
export PATH=$PATH:.
do.bashrc
pliku w swoim katalogu domowym.jeśli używasz csh lub tcsh, dodaj wiersz
set PATH = ($PATH .)
do pliku .cshrc w katalogu domowym.IMHO, w przypadku domowego komputera stacjonarnego jest to do zaakceptowania - ze względów bezpieczeństwa.
źródło