2009-05-11

3 sposoby na niestandardowe ścieżki programów wykonywalnych

Czasami zdarza się (rzadko, ale jednak) korzystać z programów znajdujących się w niestandardowym miejscach - ani w /bin, ani w /usr/bin, ani nawet w /usr/local/bin tylko w jakimś katalogu o przydługawej ścieżce typu: /katalog1/katalog2/katalog3/program. Na przykład na ostatniej pracowni komputerowej uruchamialiśmy Gromacsa poleceniem /opt/Apps/GROMACS/i686-pc-linux-gnu/bin/grompp_d, które do najkrótszych nie należy. Czy jest na to rada? Oczywiści, że jest. Po kilku minutach znalazłem aż trzy!

Sposób pierwszy - stworzenie aliasu

Wystarczy do pliku ~/.bashrc dodać następującą linijkę:

alias program="/katalog1/katalog2/katalog3/program"

Sposób drugi - linkowanie symboliczne

Czyli wydajemy w konsolce polecenie:

ln -s /katalog1/katalog2/katalog3/program /usr/bin/program

/usr/bin jest jedną z domyślnych ścieżek przy poszukiwaniu poleceń, więc wpisanie w konsoli polecenia program powinno nam go uruchomić. Niestety, aby operować na /usr/bin należy mieć uprawnienia roota.

Sposób trzeci - dodanie odpowiedniej ścieżki do zmiennej PATH

Wystarczy dodać do ~/.bashrc linijkę o treści:

export PATH="$PATH:/katalog1/katalog2/katalog3/"

2 komentarze:

  1. jak /opt nie jest za duży, to można uczynić taki plik wykonywalnym i robić do niego linki o właściwych nazwach:

    #!/bin/bash
    IFS=\x0 FILES=($(find /opt -type f -executable -name $(basename $0) -print0 2>/dev/null))
    "${FILES[0]}" "$@"

    (uruchomi pierwszy znaleziony, jest odporny na spacje w nazwach plików i katalogów)

    można też użyć inotify do indeksowania plików wykonywalnych w zadanych lokalizacjach i np. tworzenia plików .desktop

    OdpowiedzUsuń
  2. ale popełniłem bzdurę, ale to zadziała, o ile nie ma dwukropków w nazwach plików, co jest mało prawdopodobne

    #!/bin/bash
    IFS=':' FILES=($(find /opt -type f -executable -name $(basename $0) -printf '%p:' 2>/dev/null))
    "${FILES[0]}" "$@"

    OdpowiedzUsuń