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?

Christophe
źródło
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 ...

Stephen Kitt
źródło
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.

Valentin Bajrami
źródło
0

Musisz mieć. na początku zmiennej PATH:

export PATH=".:$PATH"
Guru
źródło