Jak mogę wykonać program z dowolnego miejsca?

75

Co powinienem zrobić, jeśli chcę móc uruchomić dany program niezależnie od mojego bieżącego katalogu? Czy powinienem utworzyć symboliczne łącze do programu w /binfolderze?

aneuryzm
źródło
5
nie, powinieneś użyć zmiennej PATH powłoki.
msw
7
Myślę, że dobrze byłoby utworzyć ~/bin/folder osobisty , dodać TO do swojej ścieżki i utworzyć dowiązania symboliczne w tym folderze do wszystkiego, co chcesz, aby było wykonywalne z dowolnego miejsca.
frabjous
1
Możesz także ustawić alias z pełną ścieżką do pliku binarnego, który chcesz uruchomić.
datasmurf

Odpowiedzi:

53

Jeśli wpiszesz tylko export PATH=$PATH:</path/to/file>w wierszu polecenia, będzie to trwało tylko przez czas trwania sesji.

Jeśli chcesz to zmienić na stałe, dodaj export PATH=$PATH:</path/to/file>do pliku ~ / .bashrc (tylko na końcu jest w porządku).

oadams
źródło
11
Dzięki, to działa. W przypadku początkujących, takich jak ja, pamiętaj o pominięciu nawiasów kątowych <>. Tak jak: $ PATH: / your / file / path
SAm
4
Nie dołączaj również nazwy pliku programu do ścieżki.
Olli Niemitalo
23

Krótka odpowiedź brzmi: aby uruchomić program, bez względu na katalog, musisz mieć katalog programu na ścieżce wyszukiwania. Problem można rozwiązać, umieszczając program w folderze, który już znajduje się na tej ścieżce lub dodając nowy folder do ścieżki - albo zadziała. Najlepsza odpowiedź zależy od:

Czy ten program to pobrany program, który sam skompilowałeś ze źródła?

Prawdopodobnie będzie już miał mechanizm instalacyjny. W folderze, który skompilowałeś program, jako root, uruchom polecenie „make install”

Czy ten program to pobrany program, który chcesz udostępnić jako część standardowych programów na komputerze?

Sensowne jest umieszczenie tego rodzaju aplikacji w standardowym folderze. dość powszechne jest używanie katalogów takich jak / usr / local / bin dla takich programów. Aby to zrobić, musisz mieć dostęp do konta root.

Jest to program, który napisałeś dla siebie i / lub nie masz żadnych specjalnych uprawnień na komputerze.

Utworzenie folderu w katalogu domowym o nazwie „bin” i umieszczenie w nim programu. Konieczne może być zmodyfikowanie skryptu logowania, aby dodać pełną ścieżkę do tego folderu (np. / Usr / home / jeremy / bin)

Chociaż możesz po prostu dodać jego bieżący katalog do ścieżki wyszukiwania, będziesz musiał to robić z każdym nowym programem - i to więcej pracy w dłuższej perspektywie.

Michael Shaw
źródło
15

Umieszczenie łącza do pliku w /binkatalogu nie jest najlepszym rozwiązaniem z wielu powodów.

  • Jeśli rzeczywisty plik wykonywalny znajduje się w miejscu, którego niektórzy użytkownicy nie widzą ani nie wykonują, widzą go jako zły link lub program dysfunkcyjny.
  • /binKatalog ma być zarezerwowane dla programów, które są wymagane do uruchomienia systemu (takie rzeczy chmod, mkdiritp).

Możesz faktycznie umieścić (zainstalować) plik wykonywalny w, /usr/bin/a nawet /usr/local/bin/. Oczywiście w tym momencie ręcznie zainstalowałeś program; Twoja dystrybucja nie będzie śledzić tego, co robi z pozostałymi programami - będziesz musiał ręcznie zaktualizować, jeśli to konieczne, i ręcznie usunąć, jeśli chcesz, aby zniknął. Musisz także wiedzieć, od jakich pakietów to zależy (wygląda na to, że już korzystasz z programu, więc to załatwione, ale ogólnie ...).

O ile nie konfiguruję programu, którego oczekuję od innych użytkowników, zwykle nie robię tego: tworzę katalog bin tylko dla siebie w katalogu domowym i edytuję profil powłoki, aby dodać go ~/bin/do PATHzmiennej środowiskowej. Łatwiej jest mi śledzić programy, które zainstalowałem w ten sposób, ponieważ są one oddzielone od reszty systemu.

Shawn J. Goff
źródło
6

Jeśli chcesz uruchomić polecenie foow katalogu, w którym aktualnie znajduje się powłoka, zasadniczo masz dwie opcje:

  1. Wpisz ./foow wierszu poleceń powłoki.

  2. Dodaj .katalog ( .to nazwa „bieżącego katalogu”) do PATHzmiennej środowiskowej; jak to zrobisz, zależy od używanej powłoki:

    • dla powłok typu Bourne'a (bash, zsh, ksh itp.) piszesz ( więcej informacji na tej stronie ):

      export PATH=$PATH:.
      
    • dla powłok typu csh (tcsh, csh) piszesz ( więcej informacji na tej stronie ):

      set path = ( $path .)
      

Zauważ, że 2. stanowi zagrożenie bezpieczeństwa w systemach z wieloma użytkownikami: wyobraź sobie, że cdkatalogujesz, /tmpa złośliwy użytkownik utworzył tam plik binarny złośliwego oprogramowania ls.

Riccardo Murri
źródło
2
tak, myślę, że opcje pokazują, że Unix pozwala ci robić rzeczy, co jest uważane za złą praktykę. Dodawanie na twoją ścieżkę mogą również powodować inne działania niepożądane, które są na ogół złe.
The Unix Janitor
1

Bałaganowanie PATHpozwala omyłkowo uruchomić złośliwe programy. Standardowo jest instalowanie „lokalnych” rzeczy pod /usr/local(patrz FHS , który kodyfikuje użycie Uniksa: nieco przestarzałe, ale daje uzasadnienie)., /usr/local/binZwykle jest PATHdla wszystkich użytkowników.

Moje „zainstalowane lokalnie” programy są $HOME/binwłączone, ustawione w standardowym tańcu przez ./configure --prefix=$HOME ..., w połączeniu z kilkoma aliasami (bash), aby wybrać np. Samoukompilowanego gita nad systemem pierwszym (te, które nie kolidują, znajdują się PATHna samym końcu).

vonbrand
źródło