Wie führe ich .sh-Skripte aus?


344

Wenn ich eine .sh-Datei öffne, wird sie in gedit anstelle des Terminals geöffnet. Ich kann keine ähnliche Option finden wie RechtsklickÖffnen mitAndere Anwendung ...Terminal .

Wie öffne ich diese Datei im Terminal?


Soll dieses Skript env-Variablen für die weitere Verwendung einrichten?
Rob

1
Sie sollten keine Erweiterungen für Skripte verwenden. Zu einem späteren Zeitpunkt werden Sie möglicherweise feststellen, dass eine andere Sprache besser für die Aufgabe geeignet ist, die Ihr aktuelles Skript ausführt. Und dann hast du ein Problem. Behalten Sie den alten Namen mit einer völlig irreführenden Erweiterung bei oder benennen Sie ihn um und müssen möglicherweise viele Stellen bearbeiten, an denen Ihr Skript verwendet wird?
Geirha

Sie benötigen die Dateierweiterung nicht. Es ist schön zu haben, wird aber nicht benötigt. Das Betriebssystem betrachtet die Dateierweiterung nicht. Es sieht auf die Daten
ActionParsnip

5
Meh, wenn Sie foo.sh in ruby ​​umschreiben, können Sie immer die .sh-Datei verwenden, umruby foo.rb
glenn jackman

In Dolphin können Sie F4 drücken und eine Konsole wird geöffnet
Motte001

Antworten:


523

Erteilen Sie die Ausführungserlaubnis für Ihr Skript:

chmod +x /path/to/yourscript.sh

Und um dein Skript auszuführen:

/path/to/yourscript.sh

Da .sich auf das aktuelle Verzeichnis bezieht: Wenn yourscript.shes sich im aktuellen Verzeichnis befindet, können Sie dies vereinfachen, um:

./yourscript.sh

13
+1 nur antworten, um das Hinzufügen von Ausführungsberechtigungen nur für ein Terminal anzuzeigen.
Hailwood

83
Wenn Sie bash /path/to/yourscript.shdann brauchen Sie nichtchmod +x
Aleksandr Levchuk

4
Tatsächlich können Sie verwenden, . /path/to/yourscript.shwenn das Skript einige Umgebungsvariablen einrichten muss.
Rob

1
Niemand erwähnt das Traditionelle: ./path/to/yourscript.sh(ohne das Leerzeichen danach .)? Ich finde, eines ist am einfachsten und am einfachsten zu bedienen ... Aber auf jeden Fall ist hier meine Alternative, die fast das Gleiche tun sollte ./, obwohl ich nicht verstehe, warum Sie Folgendes nicht verwenden würden ./: (FILENAME=~/rem4space.sh;SLL=$(cat $FILENAME|head -1|sed 's:^#!\(.*\):\1:g');[ ! -z $SLL ] && exec $SLL $FILENAME;sh $FILENAME)... FILENAMEnach Ihren Wünschen bearbeiten . Beachten Sie auch, dass verwendet shwird, wenn es keine Alternative gibt.
MiJyn

88

Sie müssen Shell-Skripte als ausführbar markieren, um sie über den Dateimanager ausführen zu können:

  1. Klicken Sie mit der rechten Maustaste auf Ihre .shDatei und wählen Sie Eigenschaften :

    Bildbeschreibung hier eingeben

  2. In der Berechtigungen Registerkarte überprüfen zulassen Datei als Programm ausgeführt wird :

    Bildbeschreibung hier eingeben

  3. Schließen Sie das Eigenschaftenfenster und doppelklicken Sie auf die Datei. Ein Dialogfeld wird eingeblendet, in dem Sie das Skript in einem Terminal ausführen können:

    Bildbeschreibung hier eingeben


10
Dies funktioniert nicht in Ubuntu 13.04. Öffnet sich trotzdem in gedit und fordert mich nie zur Ausführung auf. Edit: Nvm, imjustmatthew antwortet darauf.
Mpen

Bevor wir dies benutzen können, müssen wir die Dateiberechtigung für die Ausführung mit chmod festlegen. chmod + x filename.sh oder chmod 755 filename.sh
Arvind Rawat

Ich habe kein Popup! IDE wird sofort geöffnet, kein Popup
Grün

Wieso kann ich auf meiner Benutzeroberfläche nirgends "run in terminal" finden? (Ubuntu 18.04)
Daniel Möller

1
@ DanielMöller, hier ist die Antwort auf deine Frage. askubuntu.com/questions/38661/how-do-i-run-sh-files/…
Akhilesh Dhar Dubey

33

Öffnen Sie ein Terminal und navigieren Sie zu dem Ordner, in dem sich die .shDatei befindet. Dann tippe:

sh <name of file>.sh

der beste Weg, um eine Anwendung zu öffnen. Navigieren Sie zum Verzeichnis .sh und öffnen Sie es in der Eingabeaufforderung. Verwenden Sie sh <Dateiname wie oben gezeigt> .sh, wenn es eine Erlaubnis erfordert. Verwenden Sie chmod + x /path/to/yourscript.sh oder klicken Sie mit der rechten Maustaste und ändern Sie die Erlaubnis auf all
Durgesh Kumar

24

Voraussetzung

Bevor Sie die .sh-Datei ausführen können, müssen Sie sie ausführbar machen:

  1. Klicken Sie mit der rechten Maustaste auf die Datei
  2. Wählen Sie Eigenschaften
  3. Wählen Sie Berechtigungen
  4. Wählen Sie Ausführende Datei als Programm zulassen

Warnung

Stellen Sie sicher, dass Sie der Quelle vertrauen, von der Sie die Datei bezogen haben. Es könnte ein Virus sein .

Der sehr einfache Weg

  1. Doppelklicken Sie auf die Datei
  2. Klicken Sie auf In Terminal ausführen

Das hat ein Problem. Das Terminal wird sofort geschlossen und Sie können die Ausgabe nicht sehen.

Der einfache Weg

  1. Öffnen Sie Anwendungen -> Zubehör -> Terminal
  2. Ziehen Sie die .sh-Datei in das Terminal und drücken Sie die Eingabetaste

So wie Profis es machen

  1. Öffnen Sie Anwendungen -> Zubehör -> Terminal
  2. Finden Sie, wo die .sh-Datei

    • Verwenden Sie die Befehle lsundcd
    • lslistet die Dateien und Ordner im aktuellen Ordner auf . Probieren Sie es aus: Geben Sie "ls" ein und drücken Sie die Eingabetaste.
    • Sobald Sie den Ordner sehen, in den Sie wechseln möchten, führen Sie ihn aus cd, gefolgt von einem Leerzeichen und einem Ordnernamen
    • Wenn Sie sich in einem Ordner befinden, den Sie nicht möchten, führen Sie den Befehl aus, cd ..um eine Ebene nach oben zu wechseln
  3. Führen Sie die SH-Datei aus

    • Sobald Sie zum Beispiel script1.shmit lsausführen können, sehen Sie Folgendes:

      ./script.sh

Warum kompliziert?

Das Terminal verfügt über zahlreiche leistungsstarke Tools, auf die Sie durch Eingabe der Befehle zugreifen können. Profis suchen die .sh-Datei, indem sie lsund eingeben cd. Sobald Sie sich im richtigen aktuellen Ordner befinden , können Sie das Skript folgendermaßen ausführen:

./script1.sh

oder Sie können die Ausgabe ausführen und in eine Datei umleiten:

./script1.sh > out.txt

oder Sie können die Ausgabe nach Stichwörtern filtern (zB "Äpfel") und dann in eine Datei umleiten:

./script1.sh | grep apples > ./only-apples

Es gibt Tausende von Dingen, die Sie an dieser Datei vornehmen können, indem Sie nur ein paar Befehle eingeben.

Mit einem weiteren einfachen Befehl können Sie eine Datei aus dem Internet herunterladen:

wget www.google.com/images/logos/ps_logo2.png

Und dann öffne die Datei wie folgt:

shotwell ps_logo2.png

6
Ich bin nicht sicher , dass die Art und Weise Profis tun es richtig ist, dann ist es mehr ein Fall , der auf einfache Weise die erweitert (für für die Steuerung des Ausgangs) Art und Weise
Hailwood

Es ist gut zu wissen, dass ich es so gemacht habe, wie es Profis bei meinem ersten Versuch getan haben. Ich dachte, es sei der Weg des Basisbenutzers.
NelsonGon

19

Unter Ubuntu 13.04 werden in Nautilus geöffnete ausführbare Dateien jetzt standardmäßig in gedit geöffnet, anstatt den Benutzer zur Ausführung aufzufordern. Um das klassische Verhalten zu aktivieren, müssen Sie die Einstellungen anpassen:

Nautilus → Menü Bearbeiten → Einstellungen → Registerkarte Verhalten → Aktivieren Sie das Optionsfeld bei Jedes Mal fragen.


Die Person, die die Frage gestellt hat, spricht über Ubuntu 10.10
edwin

1
Danke!!! Ich weiß nicht, warum sie das ändern würden, konnte nicht herausfinden, wie man etwas ausführt.
Mpen

1
Dies ist die richtige Antwort für den neuesten Ubuntus.
gaRex

Wie kommt man in 15.10 zu Nautilus?
Yaakov Ainspan

Ab Ubuntu 18.04 können Sie auf die Einstellungen zugreifen, indem Sie ein Verzeichnis öffnen und in der oberen Leiste auf "Dateien -> Einstellungen" klicken.
tparker

7

Wechseln Sie in das Verzeichnis, in dem sich die .shDatei befindet cd. In diesem Beispiel habe ich meine shDatei als gespeichert~/Desktop/shell_practice/test.sh

Zuerst müssen Sie pwdherausfinden, wo Sie sich gerade befinden. Wenn dies der Fall ist /home/username(wo usernameist Ihr echter Benutzername?), können Sie ausführen

cd Desktop/shell/practice

Wenn Sie woanders zu sein scheinen, können Sie den absoluten Pfad verwenden

cd ~/Desktop/shell/practice

oder

cd $HOME/Desktop/shell/practice

oder auch

cd /home/$USER/Desktop/shell/practice

Dies sind alles Möglichkeiten, um den gleichen Ort zu beschreiben. Sobald Sie den Speicherort Ihres Skripts erreicht haben, geben Sie Folgendes ein

ls

Wenn Sie die shDatei in der Ausgabe sehen können, können Sie chmodsie ausführbar machen. Denken Sie in meinem Fall daran, dass der Dateiname so lautet test.sh, dass ich ausführen würde

chmod u+x test.sh

Da wir uns jetzt im selben Verzeichnis wie das Skript befinden, müssen wir der Shell angeben, dass die Datei ausgeführt werden soll, indem wir ihren Speicherort angeben ./(das aktuelle Verzeichnis, gefolgt von einem Pfadtrennzeichen, um sie vom Dateinamen zu unterscheiden). Um meine Datei auszuführen, würde ich Folgendes eingeben:

./test.sh

Wenn Ihr Skript korrekt geschrieben wurde, wird es ohne Fehler ausgeführt ...

Hier ist ein Live-Beispiel: Hier ist ein Live-Beispiel


Dies funktionierte für mich, um Netbeans auf Ubuntu zu installieren
RuD3B0y

1
Wb, @ RuD3B0y, ich habe versucht, die Antworten für Noobs, keine High-Tech-Inhalte, am besten zu halten, wenn Sie einige Änderungen haben, sind Sie willkommen.
TheExorcist

4

2 Hauptschritte.

  1. Verwenden Sie im Terminal gedit, um ein Skript mit der Erweiterung ".sh" auf dem Desktop zu schreiben und zu speichern. (aber jeder Texteditor kann benutzt werden)

  2. öffne Nautilus und klicke mit der rechten Maustaste auf die Datei script.sh.

    • Aktivieren Sie unter "Eigenschaften" das Kontrollkästchen "Ausführen der Datei zulassen".

    • Klicken Sie im Nautilus-Menü auf Datei, dann auf Einstellungen und dann auf Verhalten

    • Überprüfen Sie die Option "Ausführbare Textdateien beim Öffnen ausführen".

Wenn Sie nun auf die Datei auf dem Desktop doppelklicken, sollte sie ausgeführt werden. keine Notwendigkeit für .oder./


3
  1. Klicken Sie mit der rechten Maustaste auf die .shDatei und machen Sie sie ausführbar.

  2. Öffne ein Terminal ( Ctrl+ Alt+ T).

  3. Ziehen Sie die .shDatei in das Terminalfenster und beobachten Sie sie mit Ehrfurcht.


1
Willkommen bei Ask Ubuntu! Ich empfehle , diese Antwort zu bearbeiten , um sie mit spezifischen Details zur Durchführung des ersten Schritts zu erweitern. (Siehe auch Wie schreibe ich eine gute Antwort ?, um allgemeine Ratschläge zu erhalten, welche Arten von Antworten auf AskUbuntu als am wertvollsten gelten.)
David Foerster,

3

Hierfür gibt es verschiedene Möglichkeiten.

Option 1

  1. Greifen Sie im Terminal auf das Verzeichnis zu, in dem sich die Bash-Datei befindet cd(Verzeichnis wechseln).

    Ex. cd Downloads

  2. Lauf bash <filename>.sh

    Dies funktioniert auch mit .run-Dateien. Ein Beispiel für diese Verwendung finden Sie auf dieser Webseite zum Aktualisieren der Rhythmbox.

Option 2

  1. Navigieren Sie im Terminal zu dem Verzeichnis, in dem sich die Bash-Datei befindet.

  2. Lauf chmod +x <filename>.sh

  3. Öffnen Sie die Datei in Nautilus.


3

Für Ubuntu 18.04 gibt es eine kleine Änderung, da kein Popup-Dialogfeld angezeigt wird.

Was Sie also tun müssen, ist:

Klicken Sie mit der rechten Maustaste auf "Dateien", wählen Sie "Einstellungen"> "Registerkarte" Verhalten ">" Nachfragen "unter" Ausführbare Textdatei ".

Wenn Sie nun auf eine .sh-Datei doppelklicken, wird ein Popup-Fenster angezeigt. Dort können Sie die Option "Im Terminal ausführen" auswählen, um Ihre .sh-Datei auszuführen.

Bildbeschreibung hier eingeben


2

In Ubuntu 16.04 ist dies, wie man es in Terminal öffnet:

Zur die File Manager > Edit > Preferences > Behaviorfür ein Executable Text Filesund wählen Sie Ask each time.

Das Problem ist, dass es standardmäßig auf eingestellt ist View Executable Files when they are opened.


1

Wenn Sie Ihr Shell-Skript oder eine andere ausführbare Datei, die Sie erstellt haben, in / usr / local / bin ablegen, wird es gefunden und ausgeführt, ohne dass ein Ordnerpfad in der Befehlszeile angegeben oder dem Namen ./ hinzugefügt werden muss. Zum Beispiel habe ich das folgende einfache dreizeilige Bash-Skript erstellt, um Festplatten-UUIDs anzuzeigen:

#!/bin/bash
echo "* UUIDs must match in /etc/fstab and /boot/grub/menu.lst"
sudo blkid

Ich habe die Datei uuid aufgerufen und in / usr / local / bin abgelegt. Alles was ich in der Kommandozeile eingeben muss ist:

uuid

0

Nun, auch ich hatte das gleiche Problem. Ich wollte die .sh-Datei ausführen und sie wurde unter CentOS 7 mit Gedit geöffnet.

  1. Ich navigierte zum Pfad der .shDatei, die ich ausführen wollte.
  2. Ich habe das Terminal geöffnet.
  3. Und ich habe einfach das auf das Terminalfenster gezogen und es hat automatisch diese Datei zusammen mit dem Pfad als Eingabe genommen.
  4. Drücken Sie die Eingabetaste und Sie können loslegen!

0

Das Problem, das ich bei einigen Distributionen festgestellt habe, ist, dass sie die Voreinstellungsoption in Nautilus ausgeblendet haben, aber es ist dasselbe, sie in Ubuntu und anderen Distributionen mit Gnome3 zu beheben (ich habe buchstäblich nur die Fedora-Version davon gemacht und das eigentliche Update veröffentlicht, um mich daran zu erinnern wie in der Zukunft).

  1. Installieren dconf-editor

    sudo apt-get install dconf-editor
  2. Führen Sie dconf-editordas Programm mit dem Benutzerkonto aus, für das Sie dies möchten, dh NICHT root

    dconf-editor
  3. Navigieren Sie zu folgendem Schema:

    org.gnome.nautilus.preferences

  4. Ändern Sie die Standardoption so, dass sie nicht standardmäßig geöffnet wird:

    Suchen executable-text-activationSie auf das Wort displayund wechseln Sie zuask

Dadurch haben Sie die Möglichkeit, die Datei in Zukunft zu bearbeiten, anzuzeigen oder auszuführen


0

Ich bin ein Neuling in Linux und hatte nur das gleiche Problem. Wenn alle Stricke reißen:

  1. Terminal öffnen
  2. Öffnen Sie den Ordner mit der SH-Datei
  3. Ziehen Sie die Datei in das Terminalfenster und legen Sie sie dort ab
  4. Der Dateipfad wird im Terminal angezeigt. Drücken Sie Enter.
  5. Voila, deine .sh-Datei wird ausgeführt.

-2

Sie können auch .Tricks anwenden und andere Antworten vorschlagen.

Zum Beispiel:

chmod +x filename.shUnter der Annahme, dass Sie bereits den Pfad zur Datei angegeben haben, führen Sie die Datei mit einem der folgenden Befehle aus:

sh filename.sh

./filename.sh

. filename.sh

2
Warnung : Diese drei Befehle sind nicht gleichbedeutend. Wenn Ihr shebang auf eine andere Binärdatei verweist (wie Stack), versucht der dritte Befehl, Argumente mit Bash zu analysieren, was fehlschlägt.
Jezen Thomas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.