Tworzenie aliasu dla skryptu bash

10

Więc próbowałem eksperymentować i stworzyłem aliasw .bashrc. Jednak po przetestowaniu polecenia otrzymuję:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

Oto, co mam w .bashrcpliku:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

Zabawne jest to, że kiedy stworzyłem alias vi, zadziałało. Ale menu nie. Sprawdziłem poprzednie posty na UnixStackExchange i próbowałem śledzić inne posty, ale bezskutecznie. Czy ktoś jeszcze ma jakieś sugestie?

ryekayo
źródło
1
próbowałeś z aliasem menu = 'bash ./menuScript.sh'? (Nie jestem w komputerze z linuksem, nie mogę go przetestować)
Con7e,
Skąd uruchamiasz „menu”? Jeśli nie jest to ten sam katalog co „menuScript.sh”, wówczas narzeka na „nie znaleziono polecenia”. Może powinieneś użyć absolutnej ścieżki?
garethTheRed
1
@garethTheRed To powiedziałoby./menuScript.sh: command not found
Michael Mrozek
@MichaelMrozek - fair one. Właśnie sprawdziłem i powiedziałem No such file or directory, co wciąż nie jest tym samym, co błąd OP. Jednak kwestia ta nadal istnieje - najlepiej byłoby mieć ścieżkę bezwzględną, chyba że alias będzie zawsze używany tylko z katalogu, w którym się menuScript.shznajduje.
garethTheRed
1
@ryekayo zrobione :)
Con7e,

Odpowiedzi:

9

Powinieneś spróbować z alias menu='bash ./menuScript.sh'. Nie jestem obecnie na komputerze z systemem Linux, więc nie mogę go przetestować, ale powinien działać. Kiedy wywołujesz alias, nie wie on, co zrobić ze ścieżką, więc musisz dołączyć bashna początku.

Zresetowanie terminala pomaga po dokonaniu zmiany.

Con7e
źródło
Nie rozumiem, jak ważny jest pierwszy akapit - chyba menuScript.shże nie został on chmodprzystosowany do pliku wykonywalnego, w takim przypadku komunikat o błędzie brzmiałby: „Odmowa zezwolenia”. Podejrzewam, że wymuszenie ponownego odczytania .bashrcpliku jest odpowiedzią. ………………… PS Powłoka wie, co zrobić ze ścieżką w taki sam sposób, jak robi to użytkownik, ./menuScript.shwpisując plik - próbując wykonać plik.
Scott,
7

Kiedy to zrobisz

alias menu='./menuScript.sh'

tworzysz alias, który mówi „ten plik”, ale nie mówi, co właściwie z nim zrobić.

Jeśli jednak to zrobisz

alias menu='source ./menuScript.sh'

lub

alias menu='. ./menuScript.sh'

Mówisz, uruchom ten plik.

Michael Durrant
źródło
6

Czy pamiętasz źródło ~ / .bashrc po wprowadzeniu zmian? Ponieważ zmiany obowiązują w pliku .bashrc po ponownym uruchomieniu komputera lub po prostu pozyskaniu pliku.

cbora
źródło
2
Ten typ postu wydaje się bardziej odpowiedni dla komentarza.
HalosGhost
2
@HalosGhost Jak się masz? To pierwsza rzecz, o której bym pomyślał, spowodowałby właśnie to
Michael Mrozek
@MichaelMrozek, sugeruję to tylko dlatego, że wydaje mi się, że odpowiedzi na posty powinny oferować ostateczne rozwiązanie, np. „Nie pamiętasz źródła .bashrc, wykonaj następujące czynności…”. Z drugiej strony wyjaśnienie pytań (np. „Czy zapomniałeś…?”) Wydaje się bardziej odpowiednie dla komentarzy. Nie wymagałoby to zbytniego zmieniania zdania, aby ten post wydawał się bardziej odpowiedni do odpowiedzi.
HalosGhost
Podczas ponownego uruchamiania komputera wystarczy, aby wylogować się z tty lub sesji (jeśli używasz menedżera logowania). Jeśli jesteś zalogowany w środowisku graficznym i nie chcesz source ~/.bashrclub . ~/.bashrcmożesz otworzyć kolejną powłokę. To takie proste. Ponowne uruchomienie nie jest wymagane.
Dylan
0

Powodem, dla którego działało, vimjest to, że jest to program, który można wywołać bez bezpośredniej ścieżki. Nie musisz wyraźnie mówić „Chcę, aby to było wykonywane jako program”, ponieważ vimjuż jest jeden. Jest na vimstałe zapisany w systemie operacyjnym, że po otrzymaniu polecenia przejdź do pliku i uruchom go w /usr/bin/vidowolnym miejscu.

Nathanael Morgan
źródło
Nie, nie jest na stałe zakodowany w systemie operacyjnym. Istnieje plik o nazwie vimdostępny w, $PATHktóry może być binarnym plikiem wykonywalnym, skryptem wykonywalnym, a nawet dowiązaniem symbolicznym do innego programu. Jeśli usuniesz ten wpis vim, przestanie on być dostępny dla użytkowników.
roaima
@roaima Miałem na myśli to, że wywoływanie vima różni się nieco od wywoływania programu niestandardowego. Rozumiem jednak, do czego
zmierzasz
Mam skrypt o nazwie, ifviktóry mieszka w moim $HOME/bin(który zdarza się w moim $PATH). Po prostu używam go w ten sam sposób, w jaki mogę uruchomić system binarny zainstalowany w systemie. Naprawdę nie ma znaczenia, że ​​jest to program niestandardowy.
roaima 28.04.17
0

Istnieją dwa problemy z aliasem

alias menu='./menuScript.sh'
  1. Wymaga to przebywania w określonym katalogu podczas wywoływania aliasu. Jeśli znajdujesz się w katalogu, w którym menuScript.shnie istnieje, alias się nie uruchomi.

    Byłoby lepiej, gdybyś menuScript.shzdefiniował pełną ścieżkę bezwzględną do skryptu podczas definiowania aliasu, np

    alias menu="$HOME/local/bin/menuScript.sh"

    lub podobne.

  2. Jak już powiedzieli inni, innym powodem niepowodzenia aliasu jest to, że skrypt nie jest wykonywalny lub ma niepoprawną #!linię. Upewnij się, że skrypt jest wykonywalny za pomocą

    chmod +x menuScript.sh

    i że pierwszą linią skryptu jest

    #!/bin/bash

    lub jakąkolwiek ścieżkę do bash(lub jaką powłokę skrypt został napisany) w twoim systemie.

Kusalananda
źródło