Jak uczynić skrypt powłoki globalnym?

84

Korzystam z systemu Mac OS 10.6 i próbuję dowiedzieć się czegoś o skryptach powłoki. Rozumiem, jak zapisać skrypt powłoki i uczynić go wykonywalnym, ale zastanawiam się, co mogę zrobić lub gdzie mogę zapisać plik, aby był globalny (czyli dostępny bez względu na folder, w którym się znajduję).

Na przykład, jeśli zapiszę plik .sh w katalogu / Users / username / i ustawię go jako wykonywalny, mogę wykonać ten skrypt tylko w tym określonym katalogu. Jeśli przejdę na przykład do / Users / username / Downloads, nie mogę wykonać skryptu.

Pomocne byłyby również wszelkie sugestie dotyczące zasobów, które pozwolą dowiedzieć się więcej o skryptach powłoki. Dzięki

zebraman
źródło
1
Przeczytaj PATHnajpierw o zmiennej środowiskowej, a następnie zaktualizuj pytanie.
S.Lott

Odpowiedzi:

137

/usr/local/binbyłaby najwłaściwszą lokalizacją. Mac OS X ma to PATHdomyślnie

unbeli
źródło
1
Bingo! Dzięki :)
Patrick Lynch
44

Tradycyjnie takie skrypty trafiają do ~/bin(tj. Do katalogu bin w twoim katalogu domowym) lub /usr/local/bin/Pierwszy oznacza, że ​​skrypt będzie działał tylko dla ciebie, drugi jest przeznaczony dla skryptów, które chcesz, aby każdy w systemie mógł uruchomić.

Jeśli to umieścisz ~/bin, być może będziesz musiał dodać to do zmiennej środowiskowej PATH. /usr/local/binpowinien już być na ścieżce.

Bryan Oakley
źródło
30

Można to zrobić na dwa sposoby -

  1. Umieść swój skrypt w usr / local / bin i upewnij się, że jest wykonywalny (chmod + x my_script) (to jest już ustawione w ścieżce, możesz sprawdzić, wykonując echo $ PATH)
  2. Utwórz folder w swoim katalogu domowym o nazwie bin. (Dla twoich osobistych skryptów)
    • cd ~ (przenosi do katalogu domowego)
    • mkdir bin (utwórz folder bin)
    • vim .bash_profile (aby ustawić zmienną środowiskową ścieżki)
    • export PATH = ~ / bin: $ PATH (naciśnij i, a następnie dodaj tę linię, a następnie wykonaj esc i wpisz: wq)
    • Teraz możesz po prostu wpisać nazwę swojego skryptu i uruchomić go z dowolnego miejsca.

** UWAGA : Jeśli chcesz uruchomić skrypt za pomocą skróconej komendy, zamiast wpisywać całą nazwę pliku, dodaj następujące polecenie do swojego .bash_profile:
alias myscript='my_script.sh'
Następnie możesz uruchomić skrypt, po prostu wpisując myscript. (możesz subskrybować dowolny alias)

Pika
źródło
4

W systemie operacyjnym Mac

  • Otwórz plik bash ~ / .bashrc.
  • dodaj ścieżkę swojego skryptu do pliku bashrc, używając opcji export PATH = "$ PATH: /Users/sher.mohammad/Office/practice/practiceShell"
  • Otwórz plik ~. / Bash_profile i dodaj [[-s ~ / .bashrc]] && source ~ / .bashrc
  • otwórz nowe okno terminala Teraz za każdym razem, gdy otworzysz terminal, Twój skrypt zostanie załadowany
Sher Mohammad
źródło
dlaczego nie po prostu włożyć go bezpośrednio .bash_profile? Jest to o wiele prostsze (i to źródło .bashrc nigdy nie działało dla mnie).
szeitlin
Zbadałem, że odkryłem, że bash_profile jest wykonywany podczas logowania, bashrc jest używany dla powłok niezalogowanych, OS X domyślnie, takich jak powłoki logowania i ładuje bash_profile, więc dodanie bash_profile będzie działać dobrze, a jeśli piszesz w bashrc, musisz dodać [[- s ~ / .bashrc]] && source ~ / .bashrc w bash_profile, aby załadować bashrc, gdy bash_profile jest uruchamiany w czasie logowania
Sher Mohammad
4

To jest bardzo łatwe, jeśli znasz swój plik bashrc! Spowoduje to wykorzystanie wyłącznie pliku .bashrc i zajmie to 2 sekundy.

(Używam Arch Linux Manjaro, więc używam .bashrc znajdującego się w moim katalogu domowym)

Kod do umieszczenia w pliku .bashrc:

# Simple bashrc method to launch anything in terminal from any directory

YOURCOMMAND () {
  cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}

Jak widzisz, najpierw używasz prostego polecenia 'cd' i podajesz mu katalog lokalizacji skryptów, następnie używasz '&&', aby móc wykonać następne polecenie zaraz po, a na koniec otwórz skrypt tak, jak byś to zrobił normalnie! Super łatwe i zapisane bezpośrednio w pliku .bash! :)

Mam nadzieję, że komuś pomogłem!

Z poważaniem,

AnonymousX

AnonymousX
źródło
to jest świetne ... i pozwala mojemu zsh na autouzupełnianie!
Mediolan
Ale jeśli masz inny skrypt?
Paulo Sergio Schlogl
2

Używając powłoki bash, zapisz ten skrypt jako funkcję, a następnie umieść go w .bashrc lub zbierz plik, który zawiera tę funkcję, przez „nazwa_pliku_źródłowego”

Teraz wykonaj skrypt przez wywołanie funkcji w powłoce.

purushothaman poovai
źródło
1

Zapisanie go w /usr/bin(lub jakimkolwiek innym katalogu obecnym w PATH) lub edycja w PATHcelu uwzględnienia katalogu, w którym go zapisałeś, w zasadzie sprawi, że będzie działać w dowolnym katalogu.

ty
źródło
7
/usr/binmożna całkowicie opróżnić i wymienić podczas aktualizacji systemu operacyjnego, dzięki czemu skrypt w tajemniczy sposób zniknie. /usr/local/binjest do tego celu, jak wspomniał Bryan Oakley. Zobacz także Filesystem Hierarchy Standard
Stephen P
0

z katalogu roboczego „script.sh” „mv [script.sh] / usr / local / bin” (nie testowano, ale wydaje się, że jest najmniej złożonym sposobem IMO).

d1gl3r
źródło
1
Prawdopodobnie będziesz potrzebować sudo mv script.sh /usr/local/bin, ponieważ ten katalog nie jest zapisywalny bez zwiększania uprawnień.
Perette
-2

Powinieneś umieścić go w globalnym katalogu plików wykonywalnych na swoim komputerze. Myślę, że zwykle byłoby to /usr/binw systemach operacyjnych opartych na Uniksie (wymagałoby to jednak najczęściej uprawnień superużytkownika na tej maszynie).

Możesz również umieścić go w dowolnym innym katalogu, który znajduje się w $PATHzmiennej środowiskowej, chociaż działałby tylko dla tych użytkowników, którzy mają ten katalog w tej zmiennej.

Możesz znaleźć wartość $PATH, wpisując echo $PATHshell. Katalogi są oddzielone : .

Frxstrem
źródło
9
Głosuję przeciw, ponieważ / usr / bin to zła odpowiedź. / usr / local / bin jest specjalnie zaprojektowany dla skryptów „lokalnych” (tj. tych, które tworzysz, a nie tych, które są dostarczane z systemem).
Bryan Oakley