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.