Jak uruchomić skrypt powłoki bez użycia poleceń "sh" lub "bash"?

Mam skrypt powłoki, który chcę uruchomić bez użycia poleceń "sh" lub "bash". Na przykład:

Zamiast: sh script.sh

Chcę użyć: script.sh

Jak mogę to zrobić?

P. S. (i) nie używam skryptów shell i próbowałem czytać o aliasach, ale nie rozumiałem jak ich używać.

(ii) czytałem też o powiązaniu skryptu z innym plikiem w zmiennej PATH. Używam serwera uniwersyteckiego i nie mam uprawnień do tworzenia pliku w tych miejscach.

Author: Ionică Bizău, 2012-01-08

8 answers

Dodaj "shebang"na górze pliku:

#!/bin/bash

I utwórz plik wykonywalny (chmod +x script.sh).

Na koniec zmodyfikuj ścieżkę, aby dodać katalog, w którym znajduje się skrypt:

export PATH=$PATH:/appropriate/directory

(zazwyczaj chcesz $HOME/bin do przechowywania własnych skryptów)

 287
Author: fge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-08 18:18:03

Oto niektóre z warunków wstępnych używania bezpośrednio nazwy skryptu:

  1. Dodaj linię sha-bang {#!/bin/bash) Na samej górze.
  2. Użycie chmod u+x scriptname sprawia, że skrypt jest wykonywalny.
  3. umieść skrypt w folderze /usr/local/bin.
  4. Uruchom skrypt używając tylko nazwy skryptu.

Uwaga: powodem, dla którego zasugerowałem umieszczenie go w /usr/local/bin jest to, że najprawdopodobniej będzie to ścieżka dodana do twojego PATH variable.

Aktualizacja:

Jeśli nie masz dostępu do folderu /usr/local/bin, wykonaj następujące czynności:

  1. Utwórz folder w swoim katalogu domowym i nazwijmy go myscripts.
  2. wykonaj ls -lart w katalogu domowym, aby zidentyfikować skrypt startowy, którego używa twoja powłoka. Powinno być .profile lub .bashrc.
  3. Po zidentyfikowaniu skryptu startowego Dodaj następujący wiersz w swoim skrypcie - export set PATH=$PATH:~/myscript.
  4. Po dodaniu uruchom skrypt startowy lub wyloguj się i zaloguj z powrotem.
  5. Uruchom skrypt używając nazwy skryptu.
 52
Author: jaypal singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-08 18:42:25

Upewnij się, że jest wykonywalny, używając chmod +x. Domyślnie bieżący katalog nie znajduje się na twojej ścieżce, więc będziesz musiał wykonać go jako ./script.sh - lub w inny sposób odwołać się do niego za pomocą kwalifikowanej ścieżki. Alternatywnie, jeśli naprawdę potrzebujesz tylko script.sh, musisz dodać go do swojej ścieżki. (Możesz nie mieć dostępu do modyfikowania ścieżki systemowej, ale prawie na pewno możesz zmodyfikować ścieżkę własnego obecnego środowiska.) Zakłada to również, że Twój skrypt zaczyna się od czegoś takiego jak #!/bin/sh.

Można również nadal używać aliasu, który nie jest tak naprawdę związany ze skryptami powłoki, a tylko powłoką i jest prosty jak:

alias script.sh='sh script.sh'

, które pozwoliłyby na użycie po prostu script.sh (dosłownie - to nie zadziała dla żadnego innego pliku *.sh) zamiast sh script.sh.

 16
Author: ziesemer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-08 18:17:34

W tym przykładzie plik zostanie wywołany myShell

Przede wszystkim musimy zrobić ten plik możemy po prostu zacząć wpisując:

sudo nano myShell

Zauważ, że nie umieściliśmy rozszerzenia .sh? To dlatego, że gdy uruchomimy go z terminala, będziemy musieli tylko wpisać myShell, aby uruchomić naszą komendę!

Teraz, w nano górna linia musi być {[8] } wtedy możesz opuścić nową linię przed kontynuowaniem.

Do demonstracji dodam podstawowe Hello World! odpowiedź

Więc wpisuję:

echo Hello World!

Potem mój przykład powinien wyglądać tak:

#!/bin/bash
echo Hello World!

Zapisz plik i uruchom polecenie:

sudo chmod +x myShell

Teraz wykonywalny plik możemy przenieść do /usr/bin/ za pomocą następującego polecenia:

sudo cp myShell /usr/bin/
Aby upewnić się, że maszyna może wykonać go poprawnie, będziemy musieli ponownie uruchomić maszynę]}

Użyłem sudo shutdown -r now

Gratulacje! Wykonaliśmy rozkaz! W terminalu możemy wpisać myShell i powinno być napisane Hello World!

 11
Author: tripleee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 14:27:15

Musisz włączyć bit wykonywalny dla programu.

chmod +x script.sh

Następnie możesz użyć ./script.sh

Możesz dodać folder do ścieżki w pliku .bashrc (znajdującym się w Twoim katalogu domowym). Dodaj tę linię na końcu pliku:

export PATH=$PATH:/your/folder/here
 9
Author: Uku Loskit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-08 18:22:50

Możesz wpisać sudo install(nazwa skryptu) /usr/local/bin/(co chcesz wpisać, aby wykonać wspomniany skrypt)

Ex: sudo install quickcommit.sh /usr/local/bin/quickcommit wprowadź hasło

Teraz Można uruchomić bez .sh i w dowolnym katalogu

 5
Author: JoelWass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-12 17:27:39

Dodaj . (bieżący katalog) do zmiennej PATH.
Możesz to zrobić, edytując swój .plik profilu.
umieść następujący wiersz w swoim .plik profilu
PATH=$PATH:.

Po prostu upewnij się, że dodałeś linię Shebang (#!/bin/bash) na początku skryptu i uczyniłeś skrypt wykonywalnym(używając chmod +x <File Name>).

 1
Author: Arpit Tyagi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 12:43:45

Oto mój skrypt kopii zapasowej, który da ci pomysł i automatyzację:

Serwer: Ubuntu 16.04 PHP: 7.0 Apache2, Mysql itp...

# Make Shell Backup Script - Bash Backup Script
    nano /home/user/bash/backupscript.sh
        #!/bin/bash
        # Backup All Start
        mkdir /home/user/backup/$(date +"%Y-%m-%d")
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_rest.zip /etc -x "*apache2*" -x "*php*" -x "*mysql*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_apache2.zip /etc/apache2
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_php.zip /etc/php
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_mysql.zip /etc/mysql
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_rest.zip /var/www -x "*html*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_html.zip /var/www/html
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*"
        # Backup All End
        echo "Backup Completed Successfully!"
        echo "Location: /home/user/backup/$(date +"%Y-%m-%d")"

    chmod +x /home/user/bash/backupscript.sh
    sudo ln -s /home/user/bash/backupscript.sh /usr/bin/backupscript

Zmień /home / user do katalogu użytkownika i wpisz: backupscript w dowolnym miejscu na terminalu, aby uruchomić skrypt! (zakładając, że /usr / bin znajduje się na twojej ścieżce)

 -1
Author: Tarik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-30 00:34:17