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:
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.
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):
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!
/bin/bash
na/bin/sh
, bash nie jest nawet domyślny dla Ubuntu./bin/dash
(do którego/bin/sh
zwykle 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/dash
do skryptów powłoki :)Masz na myśli zapis do pliku przy użyciu skryptu powłoki? Oto kilka sposobów:
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.
Ta metoda zastępuje zawartość
file
dotext
. Jeśli chcesz wyczyścić plik, możesz po prostu to zrobić:Powiedzmy, że chcesz napisać do niego więcej niż jedną linię i nie chcesz używać tysięcy
echo
poleceń, możesz użyć tego polecenia:Umożliwia to pisanie wielu wierszy w jednym poleceniu. Treść
file
byłaby wtedy następująca: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
.sh
rozszerzenia (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ć,sudo
jeśli nie należy do ciebie):I uruchomić:
źródło
touch filename
echo "" > file
. Czy mogę podać tę metodę w odpowiedzi?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ć
.sh
lub (bardziej zwyczajowo) nie musisz używać rozszerzenia. Umieść#!/bin/bash
w pierwszym wierszu pliku , który informuje Ubuntu, jakiego programu użyć do uruchomienia pliku.Komentarze zaczynają się od
#
, nierem
.Mam nadzieję, że to pomoże i baw się dobrze ze skryptami!
źródło