Jak uruchamiać skrypty bez wpisywania pełnej ścieżki?

57

Chciałbym wiedzieć, czy istnieje sposób na uruchomienie programu / skryptu powłoki bez wpisywania pełnej ścieżki:

/opt/idea/bin/idea.sh
Poorman_Patrick
źródło
Zawsze możesz podać pełną ścieżkę do pliku.
muru
Dziękuję @muru, wiem o tym, ale jest to program, którego często używam, więc chciałbym móc go uruchomić za pomocą prostej komendy, a nie długiej ścieżki pliku.
Jonny
nufailm.blogspot.com/2012/05/… to pomoże pomysłowi :)
dedunumax,

Odpowiedzi:

60

Możesz po prostu utworzyć dowiązanie symboliczne . Utwórz to w /usr/local/bin. Wystarczy uruchomić polecenie:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

Następnie powinieneś ustawić swój fileplik wykonywalny:

chmod +x /full/path/to/your/file

Teraz powinieneś być w stanie uruchomić name_of_new_commandw dowolnym momencie w swoim terminalu.

Pamiętaj, że jest to dobre rozwiązanie tylko do użytku domowego z Linuksem.

c0rp
źródło
11
Zauważ, że nie powinieneś umieszczać w /usr/local/bintym miejscu dowiązania symbolicznego do skryptu w prywatnym folderze domowym, na przykład /home/jack/myscript.sh, ponieważ tylko użytkownik jackzwykle byłby w stanie go wykonać. Dowiązanie symboliczne będzie widoczne dla innych użytkowników, ale nie dla pliku, na który wskazuje. W systemie dla jednego użytkownika może to nie mieć znaczenia, ale „dobrą praktyką” jest umieszczanie skryptów (lub linków do skryptów), które mogą czytać wszyscy użytkownicy /usr/local/bin, oraz prywatnych, samodzielnie wykonanych skryptów (lub linków do skryptów) pojedynczy użytkownik w swoim ~/binfolderze.
Malte Skoruppa
dodanie dowiązania symbolicznego w / usr / sbin / umożliwia dostęp z dowolnego miejsca
Seyfi
28

Możesz dodać /opt/idea/bindo swojej PATHzmiennej:

PATH=/opt/idea/bin:"$PATH"

Następnie możesz uruchomić go w prosty sposób idea.sh.

Prawdopodobnie chcesz dodać tę linię do swojego ~/.bashrcpliku.

janos
źródło
2
także: jeśli uczynisz skrypt wykonywalnym, rozszerzenie .sh można pozostawić bez zmian (zakładając, że użyjesz shebang na górze skryptu). wystarczy „pomysł”.
Jacob Vlijm
1
@Jacob: nie można pominąć rozszerzenia, ponieważ jest to część nazwy pliku wykonywalnego (to nie jest Windows, gdzie taka magia powoduje inne problemy). Aby wywołać skrypt o nazwie idea, musisz utworzyć link lub alias o tej nazwie wskazującej na idea.shskrypt.
Jonathan Callen
2
@JonathanCallen Callen na pewno możesz! spraw, aby skrypt był wykonywalny, usuń rozszerzenie .sh zarówno z nazwy pliku, jak i polecenia, aby go uruchomić, biorąc pod uwagę fakt, że uruchamiasz skrypt za pomocą shebang #! / bin / bash.
Jacob Vlijm
1
@Jacob, co mam na myśli, bez zmiany nazwy pliku , nie możesz (i wygląda na to, że jest to część większego pakietu oprogramowania, więc nie powinieneś po prostu zmieniać nazw plików)
Jonathan Callen
2
Dzięki @Jacob, zauważ, że jest napisane: „Kiedy skrypty są instalowane w katalogu w ścieżce systemowej” . idea.shSkrypt nie jest taki scenariusz, w rzeczywistości przesuwając go poza jego instalacji dir jest całkowicie obsługiwane. Zasady pakowania Debiana nie mają tutaj zastosowania.
Janos
15

Możesz utworzyć funkcję w ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

Lub możesz utworzyć alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

W obu przypadkach możesz go uruchomić, wywołując:

$ some-name

Jeśli plik nie zależy od tego, gdzie jest uruchomiony, rozważ dodanie go do ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/bin, jeśli istnieje, zostanie $PATHautomatycznie dodany do twojego . Następnie dzwonisz bezpośrednio file:

$ file

(Jednak zły wybór nazwy, spróbuj nazwać to mniej ogólną).

muru
źródło
@Oli zawsze daj mi pięć minut, zwykle dodam wcięcia. :) Jest to po prostu denerwujące, ponieważ muszę oszukać edytora, aby używał Ctrl-K do wcięć drugiego poziomu.
muru
2
+1 w szczególności za rozwiązanie dodawania filedo twojego ~/bin, co zwykle robię (dla dłuższych skryptów). Prawdopodobnie nawet umieściłbym ten na górze :) Aliasy są dobre dla skrótów do poleceń o określonych parametrach, np alias l='ls -CF'. Chociaż widziałem znacznie więcej niesamowitych zastosowań aliasów . Nie mam tendencji do deklarowania funkcji w ~/.bashrc(wolę mieć wszystkie moje skrypty ułożone w osobnych plikach w ~/bin). Chociaż wszystko to jest kwestia gustu, chyba :)
Malte Skoruppa
@MalteSkoruppa Właśnie preferowałem metody, które najłatwiej się do tego nadają cd, ponieważ skrypt może zależeć od katalogu roboczego. :) W przeciwnym razie tak, zwykle wkładam pliki do ~/binsiebie.
muru
10

Możesz utworzyć program uruchamiający za pomocą następującego polecenia:

gnome-desktop-item-edit --create-new <path-where-to-save>. Otworzę to okno.

wprowadź opis zdjęcia tutaj

Nazwij go, jak chcesz, a następnie w polu poleceń wpisz

sh -c '/opt/idea/bin/idea.sh' i zapisz to.

Teraz możesz uruchomić ten plik za pomocą nowo utworzonego programu uruchamiającego

LUB

Możesz utworzyć plik .desktop z następującą zawartością

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Teraz zapisz go z .desktoprozszerzeniem w dowolnym miejscu.

Zrób to za pomocą tego polecenia chmod a+x <your-desktop-file>

Teraz kliknij dwukrotnie, aby go otworzyć.

g_p
źródło
7

Możemy zdefiniować funkcję i dodać skrót klawiszowy, używając binddo tego polecenia. Otwórz ~/.bashrcplik i dodaj do niego następującą linię:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Teraz, gdy naciśniesz F12, program się uruchomi.

Uwaga: Szybki sposób na określenie kodu ucieczki:

Otwórz terminal i naciśnij Ctrl+ V. Teraz naciśnij ulubiony skrót klawiaturowy. Powinien pojawić się prawidłowy kod ucieczki. Wystarczy upewnić się, aby wymienić ^[się \eprzed dodaniem skrótu, np wymiany ^[[24~z \e[24~.

αғsнιη
źródło
7

Możemy również uruchomić /opt/idea/bin/idea.shplik bezpośrednio za pomocąbash_aliases

Otwórz ~/.bashrcplik, uruchamiając,

gedit ~/.bashrc

Usuń #przed wierszami i zapisz go, aby linie wyglądały,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Teraz otwórz ~/.bash_aliasesplik,

gedit ~/.bash_aliases

Dodaj poniższe wiersze w tym pliku i zapisz go,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Wreszcie źródło ~/.bashrcpliku,

source ~/.bashrc

Teraz możesz uruchomić /opt/idea/bin/idea.shplik bezpośrednio,

idea
Avinash Raj
źródło
4

Oprócz innych dobrych odpowiedzi, rozważ symlinkowanie ~/.local/bini dodanie tego katalogu do ŚCIEŻKI ( .bashrcna przykład z poziomu twojego ). Ta metoda nie wymaga specjalnych uprawnień ( /usr/local/binna przykład w przypadku dowiązania symbolicznego ). W ten sposób możesz mieć standardową strukturę katalogów bez zalewania $ HOME. Przeczytaj więcej na ten temat na tych https://unix.stackexchange.com/ pytaniach:

abstrus
źródło
1

Utwórz miękki link w /usr/bindirecotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Teraz uruchom go za pomocą:

idea.sh
J.Franks
źródło
0

Lub możesz po prostu użyć

nano ~/.bashrc

i dodaj

PATH=/full/path/to/file:"$PATH"

na końcu, a następnie zapisz i wyjdź. Następnie możesz po prostu wpisać nazwę pliku.

Pomóż nowicjuszowi
źródło
0

Śledziłem wszystkie odpowiedzi tutaj i w innych miejscach i tak niewielu nie wspomina, że ​​może być konieczne WYLOGOWANIE, aby polecenie mogło w końcu zadziałać.

Podsumowując, szczególnie dla Xubuntu , ale także dla innych wariantów Debiana / Ubuntu , napisałem te proste instrukcje.

(w poniższych instrukcjach używamy katalogu ~ / bin , ponieważ jest to automatycznie miejsce, z którego te systemy operacyjne szukają poleceń. Zobacz tutaj :

Głupie instrukcje, aby Twoje polecenie działało:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
Manu Järvinen
źródło