Jak utworzyć plik skryptu dla poleceń terminalu?


114

W systemie Windows mogę napisać plik zawierający polecenia dla cmd (zwykle .cmdlub .batplików). Kiedy kliknę na te pliki, otworzy się cmd.exei uruchomi polecenia zawarte w pliku.

Jak mam to zrobić w Ubuntu?

Jestem pewien, że to duplikat, ale nie mogę znaleźć odpowiedzi.
Jest podobny do tych pytań, ale nie odpowiadają na pytanie:

Przechowuj często używane polecenia terminala w pliku

Emulator CMD.exe w Ubuntu do uruchomienia pliku .cmd / .bat

Odpowiedzi:


150

Istnieją dwie metody.

Najpierw najczęstszym jest zapisanie pliku, upewnij się, że pierwszy wiersz to

#!/bin/bash

Następnie zapisz plik. Następnie oznacz go jako wykonywalny przy użyciuchmod +x file

Następnie po kliknięciu (lub uruchomieniu pliku z terminala) polecenia zostaną wykonane. Zgodnie z konwencją pliki te zwykle nie mają rozszerzenia, jednak można je zakończyć w .shinny sposób.

Kilka uwag:

  • Każdy (i mam na myśli dowolny) plik może być wykonany w systemie Linux, pod warunkiem, że pierwszy wiersz jest ścieżką do programu, który powinien interpretować plik. Typowe przykłady obejmują /bin/python, /bin/sh, /bin/dash, ale nawet dziwne rzeczy działają jak piłka/bin/mysql
  • Bash to pełny język. Jest znacznie bardziej złożony niż cmd.exe w systemie Windows. Ma silny język programowania, który obsługuje funkcje, pętle, warunki, operacje na łańcuchach itp.
  • Te dokumenty mogą pomóc w przypadku problemów.
  • Jeśli nie chcesz, aby plik był wykonywalny, możesz go uruchomić, przekazując go jako argument do bash: bash file/to/run.sh

Prosty przykład bashu

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

Drugą metodą jest nagrywanie poleceń za pomocą script. Uruchom, scripta następnie po prostu rób rzeczy. Kiedy skończysz robić rzeczy, exita skrypt wygeneruje dla ciebie plik ze wszystkimi „rzeczami”, które zrobiłeś. Jest to mniej używane, ale działa całkiem dobrze do tworzenia rzeczy takich jak makra. man scriptpo więcej informacji.


Możesz to zmienić /bin/bashna /bin/sh, bash nie jest nawet domyślny dla Ubuntu.
TC1,

@ TC1 Jest instalowany domyślnie, więc nie ma znaczenia, czy jest domyślny, czy nie.
Carlos Campderrós

1
Chciałbym zaznaczyć, że /bin/dash(do którego /bin/shzwykle prowadzi dowiązanie symboliczne) jest znacznie szybszy niż bash (mierzyłem około 15 razy szybciej). Jeśli to w ogóle możliwe, użyj /bin/dashdo skryptów powłoki :)
MiJyn

4
Jeśli znajdujesz się w tym samym folderze co plik, upewnij się, że ./file.sh
coteyr

1
Próbowałem obu metod, ale jeśli spróbuję dwukrotnie kliknąć plik skryptu bash, po prostu otworzy on plik tekstowy w geany / gedit gotowy do edycji. Chciałbym, aby skrypt został wykonany po dwukrotnym kliknięciu. To pytanie zawiera więcej szczegółów na temat tego, co chcę zrobić.
thymaro

15

Masz na myśli zapis do pliku przy użyciu skryptu powłoki? Oto kilka sposobów:

touch file

Ta metoda po prostu utworzy plik, ale jeśli plik już istnieje, po prostu zmienia datę modyfikacji na czas, w którym użyłeś tego polecenia.

echo "text" > file

Ta metoda zastępuje zawartość filedo text. Jeśli chcesz wyczyścić plik, możesz po prostu to zrobić:

echo "" > file

Powiedzmy, że chcesz napisać do niego więcej niż jedną linię i nie chcesz używać tysięcy echopoleceń, możesz użyć tego polecenia:

cat << EOF > file
test
test1
foo
bar
EOF

Umożliwia to pisanie wielu wierszy w jednym poleceniu. Treść filebyłaby wtedy następująca:

test
test1
foo
bar

Jeśli chcesz dołączyć do pliku, zamień >na >>.

Mam nadzieję że to pomoże!


EDYCJA : Rozumiem, więc zapisujesz plik w gedit, używając .shrozszerzenia (opcjonalnie, ale to dobry pomysł), a następnie w menedżerze plików, kliknij plik prawym przyciskiem myszy, wybierz Właściwości-> Uprawnienia i sprawdź Allow executing file as program. Następnie możesz kliknąć go dwukrotnie, a uruchomi się :). Ponadto, jeśli chcesz to zrobić w terminalu, możesz uruchomić tę komendę, aby była wykonywalna (możesz chcieć dodać, sudojeśli nie należy do ciebie):

chmod +x file

I uruchomić:

./file

Tak naprawdę to, co chcę zrobić, to napisać plik, powiedzmy gedit, który zawiera polecenia terminala. Następnie, gdy kliknę dwukrotnie ten plik, uruchomi on te polecenia w terminalu.
Seth

Świetna odpowiedź, przemyślana aktualizacja. Aby po prostu utworzyć plik, zawsze używałemtouch filename
TryTryAgain

@TryTryAgain, ta metoda jest łatwa, prawdopodobnie szybsza niż echo "" > file. Czy mogę podać tę metodę w odpowiedzi?
MiJyn

@ MiJyn Absolutnie dołącz to, nie krępuj się. Dzięki
TryTryAgain

Jak sprawić, by działał gdziekolwiek w terminalu ... jak globalne polecenie?
Omer

14

Odpowiednikiem plików wsadowych systemu Windows są skrypty powłoki, a doskonałym przewodnikiem dla początkujących jest Bash Scripting .

Przeważnie polecenia, które można wprowadzić w wierszu poleceń, można umieścić w skrypcie powłoki.

Kilka rzeczy, które różnią się od plików wsadowych Windows:

  • Istnieją różne interpretatory poleceń, zwane powłokami. Domyślnie jest to bash, ale jeśli jesteś zainteresowany, istnieją inne, takie jak zsh, ksh, dash, perl, python itp.

  • Aby uruchomić skrypt powłoki, musisz uczynić plik wykonywalnym, co możesz zrobić chmod +x <filename>

  • W Ubuntu bieżący katalog nie jest ścieżką wyszukiwania programu, więc musisz go uruchomić ./<filename>, a nie<filename>

  • Nazwy zmiennych $<varname>nie są%<varname>%

  • Polecenia w skrypcie powłoki nie są domyślnie drukowane, jak w pliku wsadowym.

  • Rozszerzenie nazwy pliku może być .shlub (bardziej zwyczajowo) nie musisz używać rozszerzenia. Umieść #!/bin/bashw pierwszym wierszu pliku , który informuje Ubuntu, jakiego programu użyć do uruchomienia pliku.

  • Komentarze zaczynają się od #, nie rem.

Mam nadzieję, że to pomoże i baw się dobrze ze skryptami!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.