Terminal Pfad-Vorlage abspeichern

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Ich nutze derzeit viel Markdown und muss dafür immer einen lokalen Github-Ordner aufrufen, um eine Ruby-Anwendung (Jekyll via Homebrew) starten zu können. Gibt es eine Möglichkeit, dass ich mir den ersten Aufruf zum Pfad
cd
für den Start von Jekyll
bundle exec jekyll serve
spare und elegant im Terminal abspeichere? Das manuell einzutippen ist auf die Dauer einfach lästig.
 
Zuletzt bearbeitet:

hotrs

Murer Reinette
Registriert
12.09.17
Beiträge
1.635
Die Shell, letztendlich das Programm, welches im Terminal deine Eingaben ausführt, kennt sogenannte Aliase. Vom Prinzip her handelt es sich dabei um einfache Textersetzungen:

Bash:
alias name="text"

Damit das ganze nicht jedesmal beim Aufruf des Terminals neu eingetippt werden muss, kann man es in einer Konfigurationsdatei festhalten. Für die Shell zsh, welche in aktuellen macOS Versionen verwendet wird, ist das die Datei .zshrc in deinem Benutzerordner. Die Datei, die du mit einem beliebigen Texteditor bearbeiten kannst, könnte dann z.B. folgende Zeile enthalten:

Bash:
alias cdmypath="cd mypath"

Wenn das ganze etwas komplexer wird, du z.B. auch den Start von Jekyll einschließen willst, dann bietet sich ein Shell Script an.

hth
 
Zuletzt bearbeitet:

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Danke Dir.

Wie sähe denn ein Script mit

alias cdmypath="cd myptath"

und

bundle exec jekyll serve,

aus, das ich einfach anklicke und darauf öffnet sich Terminal mit dem richtigen Befehl. Ich habe irgendwie den Verdacht, dass ein AppleScript naheliegend ist.
 

hotrs

Murer Reinette
Registriert
12.09.17
Beiträge
1.635
Einfach ausgedrückt ist ein Shell Script nichts anderes als eine Folge von Befehlen mit einer bestimmten Einleitung. Jeder Befehl steht dabei in einer einzelnen Zeile:

Bash:
#!/bin/ksh
cd mypath
bundle exec jekyll serve

Das Problem sehe ich in der Ausführung. Das Script müsste mittels des Befehls chmod ausführbar gemacht werden. Des weiteren ist mir nicht bekannt, wie man das letztendlich mit einem anklickbaren Icon verbindet. Vielleicht ist da ein Apple Script doch die einfachere Lösung.
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.540
AppleScript war für das klassische Mac OS als Mittel gedacht, um grafische Programme per Text fernsteuern zu können. Wenn man aber in einem UNIX-System wie macOS mit UNIX-Befehlen arbeiten will, ist das eigentlich viel zu umständlich.

Erstelle mit TextEdit ein UNIX-Skript und speichere es mit der Endung .command, nicht mit der Endung .txt ab:

Code:
#!/bin/sh
cd /Dies/ist/ein/Beispiel
/usr/bin/bundle exec jekyll serve

Markiere dann diese Textdatei als ausführbar:
Code:
chmod a+x "BeispielName.command"

Danach kannst Du das Skript mit einem Doppelklick auf die Datei aufrufen. Falls sich das Fenster am Ende des Skripts nicht automatisch schließen soll, füge als letzte Zeile in das Skript noch
Code:
read
ein.
 

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
AppleScript war für das klassische Mac OS als Mittel gedacht, um grafische Programme per Text fernsteuern zu können. Wenn man aber in einem UNIX-System wie macOS mit UNIX-Befehlen arbeiten will, ist das eigentlich viel zu umständlich.

Erstelle mit TextEdit ein UNIX-Skript und speichere es mit der Endung .command, nicht mit der Endung .txt ab:

Code:
#!/bin/sh
cd /Dies/ist/ein/Beispiel
/usr/bin/bundle exec jekyll serve

Markiere dann diese Textdatei als ausführbar:
Code:
chmod a+x "BeispielName.command"

Danach kannst Du das Skript mit einem Doppelklick auf die Datei aufrufen. Falls sich das Fenster am Ende des Skripts nicht automatisch schließen soll, füge als letzte Zeile in das Skript noch
Code:
read
ein.
Klappt leider nicht. Am Ende kommt eine Meldung, dass ich nicht die erforderlichen Zugriffsrechte habe. Muss man da an chmod noch etwas ändern?
 

Anhänge

  • Bildschirmfoto 2023-04-21 um 05.30.30.png
    Bildschirmfoto 2023-04-21 um 05.30.30.png
    83,1 KB · Aufrufe: 10
Zuletzt bearbeitet:

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.540
Hast Du TextEdit (oder einen anderen Editor) im Modus "reiner Text" verwendet?
Wurde der Pfad zur Datei korrekt bei chmod angegeben?
 

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Hast Du TextEdit (oder einen anderen Editor) im Modus "reiner Text" verwendet?
Wurde der Pfad zur Datei korrekt bei chmod angegeben?
Ja - reiner Text.
Pfad zu chmod hatte ich nicht angegeben. Ändert aber auch nichts.

Ich arbeite mit Admin-Rechten.
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.540
Nach dem Pfad zu chmod war nicht gefragt. Es geht um den Pfad zur Datei "Jekyll.command" beim Aufruf von chmod.

Dateinamen und -pfade muss man im Terminal übrigens nie von Hand eingeben. Es reicht, das Objekt vom Finder auf das Terminalfenster zu ziehen. Das Programm fügt dann den Text in der richtigen Schreibweise ein.
 

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Nach dem Pfad zu chmod war nicht gefragt. Es geht um den Pfad zur Datei "Jekyll.command" beim Aufruf von chmod.

Dateinamen und -pfade muss man im Terminal übrigens nie von Hand eingeben. Es reicht, das Objekt vom Finder auf das Terminalfenster zu ziehen. Das Programm fügt dann den Text in der richtigen Schreibweise ein.
Nein, nein, der Pfad war schon richtig eingefügt, wie von Dir gesagt per drag&drop.

Wenn ich es richtig sehe, benötige ich 2 Pfade
1. den Pfad zu jekyll selbst
2. den Pfad zu chmod, um die Rechte zu setzen also so:
#!/bin/sh cd [Pfad zur Github Instanz lokal] /usr/bin/bundle exec jekyll serve chmod a+x [Pfad zum Script] read
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.540
Der Befehl "chmod" darf auf gar keinen Fall in die Datei geschrieben werden.

Du musst die Datei (ohne die chmod-Zeile) abspeichern und danach ein einziges Mal den chmod-Befehl im Terminal aufrufen. Dadurch wird macOS mitgeteilt, dass der Text ein Skript darstellen soll.

Beim direkten Aufruf eines Befehls ist es normalerweise nicht nötig, den Pfad für jede Befehlsdatei (also /bin/chmod statt nur chmod) anzugeben. In Skripten macht man das jedoch aus Sicherheitsgründen, da das Skript später in einer unbekannten Umgebung aufgerufen werden könnte. Ein Angreifer könnte das Skript beispielsweise in einer Umgebung aufrufen lassen, in der er den automatischen Suchpfad für Programmaufrufe so abgeändert hat, dass seine eigene Schadversion von "chmod" verwendet wird, statt das richtige "chmod" aus dem Ordner /bin.

Konsequenterweise könntest Du read noch durch /usr/bin/read ersetzen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: doc_holleday

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Der Befehl "chmod" darf auf gar keinen Fall in die Datei geschrieben werden.

Du musst die Datei (ohne die chmod-Zeile) abspeichern und danach ein einziges Mal den chmod-Befehl im Terminal aufrufen. Dadurch wird macOS mitgeteilt, dass der Text ein Skript darstellen soll.

Beim direkten Aufruf eines Befehls ist es normalerweise nicht nötig, den Pfad für jede Befehlsdatei (also /bin/chmod statt nur chmod) anzugeben. In Skripten macht man das jedoch aus Sicherheitsgründen, da das Skript später in einer unbekannten Umgebung aufgerufen werden könnte. Ein Angreifer könnte das Skript beispielsweise in einer Umgebung aufrufen lassen, in der er den automatischen Suchpfad für Programmaufrufe so abgeändert hat, dass seine eigene Schadversion von "chmod" verwendet wird, statt das richtige "chmod" aus dem Ordner /bin.

Konsequenterweise könntest Du read noch durch /usr/bin/read ersetzen.
Ich habe die chmod-zeile entfernt und dann im Terminal chmaod a+x [Pfad] die Datei fixiert.

jetzt erscheint folgende Fehlermeldung: Bildschirmfoto 2023-04-21 um 16.35.55.png Das Problem scheint im Pfad zu bestehen nach /Mobile muss es eigentlich Mobile Documents heißen. Der Backslash fehlt bei drag&drop.

Wenn ich den Pfad dagegen mit cd im terminal eingebe dann den bundle Befehle für jekyll ausführe, funktioniert es - nur nicht mit dem Script. Was also ist da falsch?
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.540
Du hast offenbar Leerzeichen im Pfad. Das ist so nicht erlaubt. Alle Sonderzeichen, die eine Bedeutung in der Shell haben, müssen umgeschrieben werden.

Entweder schreibst Du den gesamten Pfad in normaler Schreibweise, aber zwischen Anführungszeichen:

cd "/Users/cella/Library/Mobile Documents/bla..."

oder Du ersetzt jedes Sonderzeichen durch die Sequenz "Backslash-Sonderzeichen", also

cd /Users/cella/Library/Mobile\ Documents/bla...
 

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Du hast offenbar Leerzeichen im Pfad. Das ist so nicht erlaubt. Alle Sonderzeichen, die eine Bedeutung in der Shell haben, müssen umgeschrieben werden.

Entweder schreibst Du den gesamten Pfad in normaler Schreibweise, aber zwischen Anführungszeichen:

cd "/Users/cella/Library/Mobile Documents/bla..."

oder Du ersetzt jedes Sonderzeichen durch die Sequenz "Backslash-Sonderzeichen", also

cd /Users/cella/Library/Mobile\ Documents/bla...
Das hatte ich bereits alles gemacht. Ich weiß, dass ein Leerzeichen im Pfad mit Backslash geschrieben wird. Die Version mit Anführungszeichen war mir neu.

Anyway - es hat nichts gebracht. Folgende Fehlermeldung erscheint - wohingegen sich manuell jekyll mit Pfad
Code:
bundle exec jekyll serve
nach wie vor problemlos starten lässt

Bildschirmfoto 2023-04-21 um 17.04.31.png
Kann es sein, dass es nach dem Aufruf cd eine Bestätigung braucht, bevor man den Bundle-Befehl eingibt?

Edit: sudo bringt auch nichts
 
Zuletzt bearbeitet:

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

hat sich da etwa was geändert? Ich kenne nur
com~apple~CloudDocs (ohne Leerzeichen)
und warum eigentlich der "lange" Pfad zum Dokumenten Ordner?
~/Documents müsste doch reichen (auch, wenn es ein iCloud Drive Ordner ist)

Gruß
 

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Hallo,

hat sich da etwa was geändert? Ich kenne nur
com~apple~CloudDocs (ohne Leerzeichen)
und warum eigentlich der "lange" Pfad zum Dokumenten Ordner?
~/Documents müsste doch reichen (auch, wenn es ein iCloud Drive Ordner ist)

Gruß
Vielleicht hat sich etwas geändert, ich weiß es nicht. /Documents referenziert jedenfalls auf Users/. iCloud ist in der ~/Library. Nur ~/Documents geht bei mir nicht.

Was funktioniert ist beim manueller Eingabe die Site zu öffnen:
bundle exec jekyll serve --livereload --open-url http://localhost:4000/

Aber anyway, das Script funktioniert nicht. Ich habe es jetzt aufgegeben.
 
Zuletzt bearbeitet:

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.540
Das Skript funktioniert hundertprozentig. Du hast das Skript und die komplette Jekyll-Ablaufumgebung aber offenbar in den Dokumente-Ordner gelegt, diesen zusätzlich dazu konfiguriert, auf iCloud Drive hochgeladen zu werden und führst das Programm in einem versteckten, teilweise temporären Ordner aus, der für die macOS-Synchronisationsdienste reserviert ist. Es ist gefährlich, Programme an Orte zu legen, die während ihrer Ausführung vom Betriebssystem an ganz andere Positionen und auf andere Rechner verschoben werden.

Lege einen dafür geeigneten Ordner, z.B. ~/bin an und speichere das Programm und die ganzen Ruby-Module dort ab.
 
  • Like
Reaktionen: MacAlzenau

rakader

Dülmener Rosenapfel
Registriert
29.10.06
Beiträge
1.671
Das Skript funktioniert hundertprozentig. Du hast das Skript und die komplette Jekyll-Ablaufumgebung aber offenbar in den Dokumente-Ordner gelegt, diesen zusätzlich dazu konfiguriert, auf iCloud Drive hochgeladen zu werden und führst das Programm in einem versteckten, teilweise temporären Ordner aus, der für die macOS-Synchronisationsdienste reserviert ist. Es ist gefährlich, Programme an Orte zu legen, die während ihrer Ausführung vom Betriebssystem an ganz andere Positionen und auf andere Rechner verschoben werden.

Lege einen dafür geeigneten Ordner, z.B. ~/bin an und speichere das Programm und die ganzen Ruby-Module dort ab.
Ich glaube, es liegt ein Missverständnis vor; das liegt an mir, weil ich mich technisch nicht zutreffend auszudrücken vermag. Für mich ist das Hantieren mit Jekyll und Markdown Neuland. Bitte um Nachsicht.

Jekyll habe ich ordnugnsgemäß installiert. Mein Vorgehen: Ruby habe ich mit Hombrew installiert, also in /usr/local Homebrew, dann nach Anleitung von Jekyll chruby dazu. Das Ruby in macOS ist zu alt. Irgendwelche Pfade habe ich nicht umgebogen, sondern alles nach Anleitung gemacht!

Dann habe ich meinen Code von Github geladen und eben in /Documents auf iCloud platziert, um die Kapitel lokal zu schreiben. Den Code habe ich als Github Repository definiert, das, wenn ich fertig bin, als Pull auf Github hochgeladen wird. Im Code ist eine Instanz von Just the Docs, einem populären MD-Theme von Jekyll, das mit localhost:4000 gestartet wird-

In dieses Theme arbeite ich ein. Ich mache das nebenher. Da es aber hunderte Kapitel/Seiten sind, habe ich keine Lust jedesmal den Pfad zu suchen und dann bundle exec jekyll serve auszuführen. Deswegen die Idee mit dem Script, das ich mir auf den Desktop lege und nach Bedard/Zeitfenster starte.

Es handelt sich bei dem Projekt um die Dokumentation des Kleinen Brauhelfers, der populärsten Software für den Hobby- und Kleinbrauer, Open Source. Die Dokumentation ist in Markdown, weswegen ich eben einen Server starten muss, um mein Geschreibsel zu testen.

Meine Kenntnisse gehen so weit, dass ich das Theme mit CSS und Markdown selbst anpassen kann, aber bei den Entwicklungsumgebungen und ihren Pfaden und Abhängigkeiten steige ich aus.
 
Zuletzt bearbeitet: