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
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.
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)
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:
- Dodaj linię
sha-bang {#!/bin/bash)
Na samej górze. - Użycie
chmod u+x scriptname
sprawia, że skrypt jest wykonywalny. - umieść skrypt w folderze
/usr/local/bin
. - 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:
- Utwórz folder w swoim katalogu domowym i nazwijmy go
myscripts
. - wykonaj
ls -lart
w katalogu domowym, aby zidentyfikować skrypt startowy, którego używa twoja powłoka. Powinno być.profile
lub.bashrc
. - Po zidentyfikowaniu skryptu startowego Dodaj następujący wiersz w swoim skrypcie -
export set PATH=$PATH:~/myscript
. - Po dodaniu uruchom skrypt startowy lub wyloguj się i zaloguj z powrotem.
- Uruchom skrypt używając nazwy skryptu.
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
.
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!
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
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
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>
).
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)
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