Wie man eine Datei (zB ein .sh-Skript) ausführbar macht, damit sie von einem Terminal ausgeführt werden kann

245

Ich habe eine script.sh-Datei und Typ dieser Datei ist Shellscript-Datei. Ich möchte diese Datei als application / x-executable-Datei erstellen. Wie kann ich es schaffen?

Ziyaddin Sadigov
quelle
1
Mögliches Duplikat von Wie führe ich SH-Dateien aus?
Karl
Es ist kein Duplikat, da ich ausdrücklich darum gebeten habe, es application / x-executable zu machen. Die andere Frage fragt nur nach dem Öffnen der sh-Datei im Terminal.
Ziyaddin Sadigov

Antworten:

326

Sie können die Datei als ausführbar markieren:

chmod +x filename.sh

Sie können es dann folgendermaßen ausführen:

./filename.sh

Wenn Sie einen anderen Befehl zum Starten verwenden möchten, können Sie einen Alias ​​hinzufügen:

gedit ~/.bashrc

Fügen Sie dies am Ende der Datei hinzu:

alias <new name>='/home/<full path to script>/filename.sh'

Öffnen Sie eine neue Terminalsitzung oder geben Sie source ~/.bashrcIhr Terminal ein, um sich zu bewerben. Verwenden Sie dann einfach den neuen Namen, um das Skript zu starten.

rɑːdʒɑ
quelle
Wissen Sie, wie Sie den Befehl sudo verwenden, nachdem Sie den folgenden Befehl eingegeben haben: "alias command1 = '/home/user_name/dir/script.sh'. In meinem Fall funktioniert er ohne sudo, aber nicht damit.
Aditya,
Sie müssen bash neu starten, nachdem Sie die .bashrc-Ausführung bearbeitet haben: exec bash, um bash neu zu starten.
Sampath Perera
2
Warum ist die ausführbare Datei ./filename.shund nicht nur filename.sh?
User1993
@ user1993 ja, ich suche auch nach einer Möglichkeit, es nur durch ausführbar zu machen filenameund nicht./filename
MycrofD
@ user1993 Im Allgemeinen gibt using ./filename.sheine Datei im aktuellen Verzeichnis und using filename.sheine Datei im aktuellen Verzeichnis oder in einem beliebigen Verzeichnis von PATH an. Die erste Verwendung beseitigt jegliche Unsicherheit darüber, auf welche Datei zugegriffen wird. In diesem Fall versuchen Sie, das Skript mit bash oder einem anderen Interpreter (aufgrund der Annahme #!/bin/bashals erste Zeile in Ihrem Skript) auszuführen, indem Sie einfach den Dateinamen eingeben. Für diese Verwendung muss das Verzeichnis angegeben werden. Alternativ können Sie versuchen, bash filename.shwelches mit einem nicht angegebenen Verzeichnis zu funktionieren scheint.
a505999
37

Es gibt zwei Möglichkeiten, eine Datei ausführbar zu machen:

GUI-Methode:

Gehen Sie zur Registerkarte "Berechtigungen" und aktivieren Sie das Kontrollkästchen "Ausführen": [] Ausführen der Datei als Programm zulassen.

Bildbeschreibung hier eingeben

Terminal- / Befehlsmethode:

Sie können entweder verwenden:

cd /to/my/required/directory

Dann renne

chmod +x filename.extension

Oder einfach laufen:

chmod +x /path/to/your/filename.extension

chmod hat auch einige erweiterte Optionen:

Die Leerzeichen sollen zeigen, dass es aufgeteilt ist: - rwx --- ---

Der erste Satz von ---ist Benutzer. Die zweite ist Group und die letzte ist Other (jeder andere)

r steht für Lesen, w für Schreiben und x für Ausführen.

Damit jeder es lesen kann, aber nur Group ausführen kann und User es lesen und schreiben kann (aber aus irgendeinem Grund nicht ausführen kann), wäre:

-rw- rx- r-- Dies würde dem Befehl jedoch hinzugefügt werden als:

chmod +rw-rx-r-- /path/to/file.extension

chmoddas kann man auch in zahlen machen. Es basiert auf binären (ich denke, wie es 1,2 und 4 ist)

Also gibt es diese Zahlen:

Vom Benutzer ausführen ist 100. Nach Gruppe ausführen ist 010. Execute by other ist 001

Schreiben von Benutzer ist 200. Schreiben nach Gruppe ist 020. Schreiben von anderen ist 002.

Vom Benutzer gelesen wird 400. Gelesen von Gruppe ist 040. Gelesen von anderen ist 004.

Dann addieren Sie diese, um die gewünschte Kombination zu erhalten.

Damit jeder es lesen kann, aber nur Group ausführen kann und User es schreiben kann (aber aus irgendeinem Grund nicht ausführen kann), wäre dies:

400 + 040 + 004und 010und200

Das ergibt 600 + 050 + 004 = 654.

Sie könnten dann den Befehl ausführen.

chmod +654 /path/to/file.extension um es zu setzen.

Und um alle Berechtigungen festzulegen, können Sie Folgendes eingeben:

chmod +rwxrwxrwx /path/to/file.extension

Oder:

chmod +777 /path/to/file.extension

Schließlich können Sie Folgendes tun:

chmod -777 /path/to/file.extension

Jedem die Erlaubnis zu nehmen.

Und:

chmod +300 /path/to/file.extension

Hinzufügen von Lese- und Schreibrechten für Benutzer, ohne andere Berechtigungen zu beeinträchtigen (z. B. Berechtigungen ausführen).

Diese Website hat ein sehr nützliches kleines Kontrollkästchen, mit dem Sie die gewünschten Optionen ankreuzen und den folgenden Befehl eingeben können:

Bildbeschreibung hier eingeben

Es ist jedoch nicht sinnvoll, alle möglichen Kombinationen zu verwenden. Die wichtigsten, die verwendet werden, sind die folgenden:

755 - Ownerhat alles und Groupund Otherkann lesen und ausführen

700 - Ownerhat alles

644 - Ownerkann lesen und schreiben und Groupund Otherkann lesen

600 - Ownerkann lesen und schreiben

Und wenn Sie nicht-triviale Benutzergruppen verwenden:

775 - Ownerkann lesen und schreiben und Groupund Otherkann lesen

770 - Ownerund Grouphaben alle und Otherkönnen lesen und ausführen

750 - Ownerhat alles und Groupkann lesen und ausführen

664 - Ownerund Groupkann lesen und schreiben und Otherkann nur lesen

660 - Ownerund Groupkann lesen und schreiben

640 - Ownerkann lesen und schreiben und Groupkann lesen

777 und 666 werden selten verwendet, außer in / tmp.

Vielen Dank, Ilmari Karonen, für den Hinweis auf die gebräuchlichen!

Tim
quelle
Basiert es nicht auf Oktal (8 Basen) statt auf Binär (2 Basen)? In der Binärdatei können Sie nur 0 und 1 haben, während Sie
Justinas
@ Justinas binär in diesem 7 = 4 + 2 + 1 - 111 steht für Lesen und Schreiben und Ausführen.
Tim
8

Lauf:

chmod +x /path/to/file.sh

Um es nicht ausführbar zu machen, führen Sie Folgendes aus:

chmod -x /path/to/file.sh

Ich habe zum Beispiel folgende .shDatei erstellt:

vi tester12.sh

Nachdem ich einen Code im vi-Editor geschrieben habe, beende ich den vi-Editor:

:wq!
chmod +x tester12.sh
./tester12.sh
Jim
quelle