Executable shell script - wie erstellen?

J

Jo*

Aktives Mitglied
Thread Starter
Dabei seit
10.01.2007
Beiträge
467
Reaktionspunkte
59
Hallo,

ich möchte gerne - als vollendeter Script-Dummy - ein shell script erstellen.

Dass ich dafür einen Textfile erstellen muss, soweit bin ich. Auch die Kommandozeilen des shell-scriptes hab ich soweit.

Es geht um ein automatisiertes Erstellen eines DiskImages mittels DropDMG, welches aus einem zuvor mit SuperDuper! erstellten sparseimage ein komprimiertes, verschlüsseltes dmg erstellt, welches anschließend auf einen Online BackUp Server übertragen werden soll.

Code:
#!/bin/sh
dropdmg --config-name "BackUp" "/Volumes/Archiv/BackUp_DiskImage.sparseimage"

Also, soweit ich das begriffen habe speichere ich die Kommandozeilen in einem Texteditor (z.B. TextEdit) ab.

Wie verleih ich dem Textfile executive permission? Sicher mit dem Terminal... Aber wie funktionierts genau?

Wie gesagt... bin in dieser Hinsicht ein gnadenloser Dummy... :D

Danke!

Gruß
Jo*
 
chmod +x <dateiname>, dann mit
./<dateiname> starten.
 
Hi falkgottschalk,

erstmal danke für Deine Antwort!

Sorry, aber das ist mir bereits zu hoch :confused:

Ich hab noch nie mit dem Terminal gearbeitet... :eek:

Könntest Du mir das nochmal so erklären, als würde man einem Eskimo erklären, wie man eine Kokusnuss öffnet... oder einem Affen erklärt, wie man ein Iglu baut :D

Wo speicher ich denn die txt-Datei ab, bzw, wie erklär ich dem Terminal, wo sich die Datei befindet...

Ich denke am einfachsten wäre es für mich, wenn Du die Code-Funktion des Forums verwendest. Ich kopier das dann einfach ins Terminal ;)

Danke nochmal!

Gruß
Jo
 
Speicher ab wo du magst. Dann im Finder auf Programme -> Dienstprogramme -> Terminal öffnen

Dort gibts du ein für den Fall dass du in deinem Benutzerverzeichnis gespeichert hast:
Code:
chmod +x dein-shellscript
Hast du es unter Dokumente gespeichert:
Code:
chmod +x Documents/dein-shellscript
usw usf.

so long
 
Hi DrunkenFreak,

vielen Dank!

Der erste Befehl scheint zu funktionieren.

Beim zweiten hingegen (./) gibts ne Fehlermeldung... Siehe beiliegendes png.

Was mache ich falsch?
_____________________________

Das ist der Inhalt des textfiles:

Code:
#!/bin/sh
dropdmg --config-name "BackUp" "/Volumes/Archiv 2/BackUp_DiskImage.sparseimage"

BackUp ist der Name der Configuration in DropDMG; die Pfadangabe verweist auf eine Partition namens "Archiv 2" auf einer ext. Festplatte. "BackUp_DiskImage.sparseimage" ist das von SuperDuper! generierte DiskImage.

Jo*
 

Anhänge

  • Bild 4.png
    Bild 4.png
    17,1 KB · Aufrufe: 1.127
Zuletzt bearbeitet:
Der Start mit "./" setzt(e) voraus, dass sich die Datei im selben Verzeichnis befindet wie DU gerade.
Variante a:)
cd Documents
./<name>

Variante b:
documents/<name>

Ansonsten würde ich persönlich die Datei umbenennen von ".txt" nach ".cmd" oder so.
.txt ist zwar dank chmod ausführbar, ich halte das aber für verwirrend.
 
Du kannst auch Automator öffnen. Dann eine Shell-Skrip-Aktion hinzufügen. Da das Shell-Skript eintragen. Schließlich als fertige App speichern.
 
Hallo nochmal an alle,

vielen Dank, hab's dank Eurer Hilfe hingekriegt. :D

Ich glaub, ich muss mich dochmal in UNIX einarbeiten. :confused:

Viele Grüße
Jo*
 
Viel Spaß.
Und es ist nie verkehrt wenn man das System, das man verwendet, wenigstens so ungefähr versteht.
Unix komplett ist vielleicht etwas viel für normale Anwender, aber so die Basics..
(Schock fürs Leben gefällig? Dann gibt im Terminal mal
man tar
oder
man rsync
ein und schau mal, was für viele Parameter die haben... :D

Hinweis: mit man <befehl> bekommt für fast alle Unix-Befehle eine mehr oder weniger gute Anleitung wozu die gut sind und wie man sie bedient.
 
Ich muss nochmal nerven :eek:

Irgendwie läuft das shell script nicht, wenn ich es in SuperDuper! anhänge.

SD! wirft mir immer ne Fehlermeldung aus, nachdem es erfolgreich das sparseimage erstellt hat:

| Error | 2008-07-27 23:39:23.775 osascript[4964] *** _NSAutoreleaseNoPool(): Object 0x3347a0 of class NSPathStore2 autoreleased with no pool in place - just leaking

Probehalber hab ich das shell script mal direkt aus dem Terminal gestartet (mit "exec").

Da bekomme ich ne ganze Latte an ähnlichen Fehlermeldungen (siehe beiliegendes png) - allerdings wird das shell script ausgeführt, d.h. DropDMG wird geöffnet und erstellt ein neues dmg basierend auf dem vorliegenden sparseimage.

Jemand ne Idee was falsch läuft?

Jo*

________

P.S.: Das shell script habe ich erstellt, indem ich

  1. Code:
    #!/bin/sh
    dropdmg --config-name "BackUp" "/Volumes/Archiv 2/BackUp_DiskImage.sparseimage"
    in einen mit Texteditor erstellten textfile geschrieben habe
  2. den textfile ohne Dateiendung (.txt o.ä.) abgespeichert habe ("dropdmgmozy")
  3. dem file mittels
    Code:
    chmod +x /Library/Scripts/Eigene\ Scripts/dropdmgmozy
    executive permission verliehen habe.
 

Anhänge

  • Bild 2.jpg
    Bild 2.jpg
    62,5 KB · Aufrufe: 469
Bei mir geht es auch nicht weiter, wenn ich den Skript so machen wie oben bekomm ich nur fehlermeldungen. Woran liegt das?

Bei mir ist es ein ssh Skript!

#!/bin/sh
ssh root@192.168.2.1
 
Um Shell-Skripte zu testen kann man z.B.

sh -vx SKRIPTNAME

eingeben. Der Schalter -v zeigt jeden Befehl sowie das daraus enstehende Resultat.
 
SD! wirft mir immer ne Fehlermeldung aus, nachdem es erfolgreich das sparseimage erstellt hat:

| Error | 2008-07-27 23:39:23.775 osascript[4964] *** _NSAutoreleaseNoPool(): Object 0x3347a0 of class NSPathStore2 autoreleased with no pool in place - just leaking

Das ist möglicherweise ein Problem in osascript (1) aber "nicht schlimm", falls es nicht all zu lange läuft. Es leak halt Speicher.

Alex
 
Safari hat zig Jahre lang geleakt. Von daher ...
 
Schlagt mich jetzt nicht tot, ich weiss, dass der Thread ein wenig älter ist aber dennoch habe ich hier ein sehr ähnliches Problem: Gerne würde ich mir das nachfolgende Skript als ausführbare Datei speichern, bekomme das aber mit dem Terminal, TextEdit und 'chmod +x' nicht auf die Reihe.
Kann mir eine(r) von euch bei helfen? Das wäre toll, vielen Dank. :)
Code:
#!/bin/bash
#
# delsnapshots 1.0.1
#
# Deletes all APFS Snapshots.
#
# (c)2019 Harald Schneider
#
#

echo
echo "Local Snapshots:"
echo
tmutil listlocalsnapshots /
echo
echo "Deleting all Snapshots. This can take a while ..."
echo
for d in $(tmutil listlocalsnapshotdates|sed -n '1!p'); do tmutil deletelocalsnapshots $d; done
echo "DONE!"
(-Quelle)
PS: Copy & Paste direkt ins Terminal klappt zwar wunderbar, aber eine exec-Datei, die sich durch einen simplen Doppelklick ausführen lässt, wäre noch viel schöner ...
 
Du kannst mit dem AppleScript Editor dein Shell Script per doppelklick ausführen lassen. Aber eleganter wäre es über einen cronjob automatisch täglich, wöchentlich etc, aber mit cron kenne ich mich nicht aus.
Mehr dazu kannst du z. B. hier nachlesen: http://www.apfelwiki.de/Main/CRON

Ich nehme mal an, das Skript kommt in deinen Benutzerordner, ansonsten die Pfade entsprechend anpassen.

Ich bin mit dem Thema selbst nicht so vertraut, aber habe es mal nachgebaut, wie ich es machen würde:

Erstellen der Datei im Terminal (ich nehme immer nano als Editor):

1. terminal öffnen (du befindest dich automatisch in deinem Benutzerordner)
2. nano snapshotcleaner.sh
3. copy & paste den Code von oben mit der Maus da rein
4. ctrl + x
5. den Dateinamen mit y bestätigen
6. Enter drücken

Das Script ausführbar machen:

Im Terminal

Code:
chmod +x snapshotcleaner.sh

und mit Enter wieder bestätigen.

Jetzt den AppleScript Editor öffnen und folgendes einfügen (ggf. deinen Pfad anpassen)

Code:
do shell script "/Users/iPhill/snapshotcleaner.sh"

und beim Speichern mit Ablage -> sichern -> (Name + Speicherort angeben) und sichern als App auswählen. Fertig.

Mit einem Doppelklick auf die App sollten nun die Snapshots gelöscht werden.
Da ich TM nicht nutze, kann ich dir nicht sagen, ob es wirklich funktioniert. Probiere es bitte mal aus.
 
  • Gefällt mir
  • Love
Reaktionen: below und iPhill
@redfootthefence: DANKE! Bin jetzt endlich dazu gekommen, es auszuprobieren - es funktioniert! :D

Allerdings muss ich diese Datei immer manuell per drag&drop ins Terminal ziehen und per Enter die Ausfführung anstupsen. Kann ich das Skript irgendwie noch "double-clickable" machen?
Edit: Herausgefunden, ".sh" durch ".command" ersetzt, jetzt kann's per Doppelklick geöffnet und ausgeführt werden. :)
 
Freut mich, dass es klappt.
 
Ja, fabelhaft. Danke nochmals für die Kurzanleitung. :)
 
Zurück
Oben Unten