Bash, zawsze sprawdzaj $ PWD jako część ścieżki?


15

Tło: Jeden z moich kolegów, który nie pochodzi z Linuksa, zapytał mnie o użycie ./przed niektórymi poleceniami, a nie innymi, więc wytłumaczyłem mu, jak PATHdziała i jak wybierane są pliki binarne. Jego odpowiedź była taka, że ​​był głupi i po prostu nie musiał pisać ./przed poleceniami.

Pytanie: Czy istnieje sposób na łatwą modyfikację zachowania powłoki, tak aby $PWDzawsze był pierwszym elementem PATH?


Głupi może być (ale nie musi), ale każde środowisko ma swoje dziwactwa, i jest to typowe dziwactwo powłoki uniksowej.
— RonJohn

12
To środek bezpieczeństwa. Powszechnie używane były do tego powłoki (przyp. 1970), a systemy wielu użytkowników były z tego powodu atakowane.
— Charles Duffy,

3
Odpowiedział, że to głupie : powiedział, że kolega musi kształcić siebie na ten temat. Ta nieszablonowa odpowiedź pokazuje odpowiedź w stylu PHB : brak zrozumienia lub uznania dla systemu bazowego.
— Chmura,

2
Dlaczego po prostu nie upuścić plików binarnych ~/bini uczynić go częścią PATH? To także zapewnia porządek.
— Sergiy Kolodyazhnyy

3
@Ziazis w systemie Windows bieżący katalog jest brany pod uwagę niezależnie od tego, czy jest on częścią PATH(co jest zwykle źródłem takich rozważań).
— Stephen Kitt

Odpowiedzi:


55

Jeśli naprawdę chcesz, możesz to zrobić, przygotowując się .na swoją ścieżkę:

export PATH=".:$PATH"

Jest to jednak zły pomysł, ponieważ oznacza, że ​​twoja powłoka wybierze dowolne polecenie w bieżącym katalogu zamiast innych. Jeśli ktoś (lub jakiś program) upuści złośliwe lspolecenie w katalogu, którego często używasz, masz problem ...


13
To doskonały punkt, choć być może wystarczyłoby przesunąć. na końcu ścieżki, a następnie wyeksportuj ŚCIEŻKA = "$ ŚCIEŻKA :."
— Christophe

12
Rzeczywiście pamiętam, że .na początku twój PATHbył domyślny dla zwykłych użytkowników (jeśli stworzyłem użytkownika z „sam” na HP-UX, przynajmniej; nie jestem pewien co do starego SunOS). Później to ustawienie domyślne zostało usunięte ze względów bezpieczeństwa. Jeśli masz .ten ostatni element PATH, wciąż ktoś może mieć nadzieję na typowe literówki.
— Philippos

6
@Philippos, tak jak niesławne /tmp/slskrypty do pranków, aby atakować użytkowników za pomocą takich ŚCIEŻEK. W Debianie i pochodnych zainstaluj slpakiet, aby dowiedzieć się, jak często piszesz slzamiast ls.
— Stéphane Chazelas

Nie, to nie jest zły pomysł, jest dobry, szczególnie jeśli jesteś programistą. Oczywiście utrzymywanie środowiska, w którym nikt nie popełnia złośliwych poleceń, to kolejny dobry pomysł.
— jamesqf

4
@ jamesqf, w rzeczywistości dobrym pomysłem jest wpisanie, ./kiedy chcesz wywoływać polecenia w bieżącym katalogu. Lub, jeśli to zwykły katalog bieżący /project/under/development/bin, a następnie dodać , że do Twojego PATH. Rozwiązuje to przypadek użycia przez programistę. Umieszczenie .na początku PATHto zły pomysł, kropka.
— Wildcard

14

Chociaż nie jest to bezpośrednia odpowiedź na twoje pytanie, najlepszą praktyką byłoby utworzenie binkatalogu w katalogu domowym jako /home/user/bin:

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

Umieść tam swoje osobiste skrypty. PATHByłby ruch w kolejności zdefiniować i wykonać swoje skrypty bez .potrzeby.


0

Musisz mieć. na początku zmiennej PATH:

export PATH=".:$PATH"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.