Frage Wie man eine Datei (z. B. ein .sh-Skript) ausführbar macht, so dass sie vom Terminal aus ausgeführt werden kann


Ich habe eine script.sh-Datei und der Typ dieser Datei ist Shellscript-Datei. Ich möchte diese Datei als Anwendung / x-ausführbare Datei machen. Wie kann ich es schaffen?


182
2017-12-16 12:27


Ursprung


bezüglich Wie führe ich .sh-Dateien im Terminal aus? - TuKsn
Mögliches Duplikat von Wie führe ich .sh-Dateien aus? - karel
Es handelt sich nicht um ein Duplikat, da ich speziell darum gebeten habe, es zu application / x-executable zu machen. Die andere Frage fragt nur nach dem Öffnen der SH-Datei im Terminal. - Ziyaddin Sadigov


Antworten:


Nun, du kannst es schaffen, indem du es tust

chmod +x filename.sh

So wird es ausgeführt, wenn Sie es aufrufen

./filename.sh

und Sie können auf dieses Skript auch als Anwendung zugreifen.

Öffne dein Terminal und tippe unten aus deinem Home-Verzeichnis ein.

gedit .bashrc

Geben Sie dann in der geöffneten Datei diese in der letzten Zeile ein.

alias <Name_with which you wanna call it >='./filename.sh'

speichern und schließen .

Dann tippe dies in dein Terminal ein source ~/.bashrc um die Änderungen anzuwenden, die Sie vorgenommen haben. Geben Sie dann einfach den Namen ein, den Sie nach dem Alias ​​angegeben haben, um auf Ihr Skript zuzugreifen.

vergewissere dich, dass du dich im Home-Verzeichnis befindest.

sonst

alias <Name_with which you wanna call it >='./<path to your script >.sh'

Ich hoffe, das hilft.


244
2017-12-16 12:33



Weißt du, wie man den Befehl sudo nach der Eingabe des Befehls wie folgt verwendet: "alias command1 = '/home/user_name/dir/script.sh". In meinem Fall funktioniert es ohne sudo, aber nicht mit ihm. - Aditya
Sie müssen bash neu starten, nachdem Sie den .bashrc run: exec bash zum Neustart von bash bearbeitet haben. - Sampath Perera
Warum ist die ausführbare Datei? ./filename.sh und nicht nur filename.sh? - user1993
@ user1993 ja, ich suche auch nach einer Möglichkeit, es einfach ausführbar zu machen filename und nicht ./filename - MycrofD
@ user1993 Im Allgemeinen verwenden ./filename.sh spezifiziert eine Datei im aktuellen Verzeichnis und verwendet filename.sh Gibt eine Datei im aktuellen Verzeichnis oder in einem beliebigen Verzeichnis von PATH an. Die erste Verwendung beseitigt jede Unsicherheit darüber, auf welche Datei zugegriffen wird. In diesem Fall versuchen Sie, das Skript mit bash oder einem anderen Interpreter auszuführen (aufgrund von #!/bin/bash als erste Zeile in Ihrem Skript), indem Sie einfach den Dateinamen eingeben. Für diese Verwendung muss das Verzeichnis angegeben werden. Alternativ können Sie es versuchen bash filename.sh das scheint mit einem unspezifizierten Verzeichnis zu funktionieren. - a505999


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

GUI-Methode:

Wechseln Sie zur Registerkarte Berechtigungen, und aktivieren Sie das Kontrollkästchen Ausführen: [] Datei als Programm ausführen zulassen.

enter image description here

Terminal / Befehlsmethode:

Sie können entweder verwenden:

cd /to/my/required/directory

Dann renne

chmod +x filename.extension

Oder lauf einfach:

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

chmod hat auch einige erweiterte Optionen:

Die Räume sollen zeigen, dass es aufgeteilt ist: - rwx --- ---

Der erste Satz von --- ist Benutzer. Der zweite ist Gruppe und der letzte ist Andere (jemand anderes)

r steht für Read, w für Write und x für eXecute.

Um es jedem zu erlauben, es zu lesen, aber nur die Gruppe, die ausgeführt werden soll, und der Benutzer, um es zu lesen und zu schreiben (aber aus irgendeinem Grund nicht auszuführen), wäre:

-rw- rx- r-- Aber das würde zu dem Befehl hinzugefügt werden als:

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

chmod kann dies auch in Zahlen tun. Es basiert auf Binär (ich denke, wie es 1,2 und 4 ist)

Also da sind diese Zahlen:

Ausführen nach Benutzer ist 100. Ausführen nach Gruppe ist 010. Execute by other ist 001

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

Lesen von Benutzer ist 400. Nach Gruppe lesen ist 040. Von anderen gelesen 004.

Dann fügen Sie diese zusammen, um die gewünschte Kombination zu erhalten.

Um es jedem zu erlauben, es zu lesen, aber nur die Gruppe auszuführen und der Benutzer es zu schreiben (aber aus irgendeinem Grund nicht auszuführen) wäre:

400 + 040 + 004 und 010 und 200

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, die Sie eingeben können:

chmod +rwxrwxrwx /path/to/file.extension

Oder (das ist ein bisschen einfacher zu schreiben, aber schwieriger, sich daran zu erinnern):

chmod +777 /path/to/file.extension

Schließlich können Sie Folgendes tun:

chmod -777 /path/to/file.extension

Alle Berechtigungen von allen entfernen.

Und:

chmod +300 /path/to/file.extension

Hinzufügen von Lesen und Schreiben für Benutzer, ohne andere Berechtigungen zu beeinträchtigen (z. B. Ausführungsberechtigungen).

Diese Internetseite hat eine sehr nützliche kleine Grid-Checkbox-Sache, wobei Sie die gewünschten Optionen ankreuzen können und es Ihnen den Befehl gibt:

enter image description here

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

755 - Owner hat alles, und Group und Other kann lesen und ausführen

700 - Owner hat alles

644 - Owner kann lesen und schreiben, und Group und Otherkann lesen

600 - Owner kann lesen und schreiben

Und wenn Sie nicht-triviale Benutzergruppen verwenden:

775 - Owner kann lesen und schreiben, und Group und Otherkann lesen

770 - Owner und Group habe alle, und Other kann lesen und ausführen

750 - Owner hat alles, und Group kann lesen und ausführen

664 - Owner und Group kann lesen und schreiben, und Other kann gerade lesen

660 - Owner und Group kann lesen und schreiben

640 - Owner kann lesen und schreiben, und Groupkann lesen

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

Vielen Dank Ilmari Karonen zum hervorheben die im allgemeinen Gebrauch!


31
2018-06-18 12:22



Basiert es nicht auf oktal (8-base) anstatt auf binär (2-based)? In binär können Sie nur 0 und 1 haben, während Sie in oktal 0, 1, ... 6, 7 haben können - Justinas
@ Justinas binär in diesem 7 = 4 + 2 + 1 - 111 steht für Lesen und Schreiben und Ausführen. - Tim


Lauf:

chmod +x /path/to/file.sh

Führen Sie Folgendes aus, um es nicht ausführbar zu machen:

chmod -x /path/to/file.sh

Zum Beispiel habe ich erstellt .sh Datei:

vi tester12.sh

Nachdem ich etwas Code im vi Editor geschrieben habe, werde ich den vi Editor verlassen:

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

7
2018-06-18 12:39