Präambel: Ich habe noch nie ein Shell-Bash-Skript erstellt. Daher bin ich mir zunächst einmal nicht sicher, ob dies das richtige Tool für diese Aufgabe ist. Wenn nicht, lassen Sie mich bitte vor allem wissen, was Ihrer Meinung nach die beste Alternative ist.
Kontext: Beim Einrichten einer Website erledige ich häufig wiederkehrende Aufgaben. Ich möchte diese Aufgaben automatisieren, indem ich ein oder zwei Befehle ausführe. UPDATE: Der gemeinsam genutzte Host ist Unix-basiert. Die lokalen Rechner sind Mac OS X und daher ebenfalls Unix-basiert.
Hier sind als Beispiel einige der Aufgaben (Befehle), die ich häufig ausführe:
SCP:
scp ~/local/path/general_web_app/.bash_profile [email protected]:/home/HOSTNAME/.bash_profile
scp ~/local/path/general_web_app/.gitconfig [email protected]:/home/HOSTNAME/.gitconfig
SSH direkt:
ssh [email protected]
cd /www/www/
git init
git add .
git commit -a -m "first commit"
cd ~/private/ && mkdir repos
BEARBEITEN, SUCHEN, ERSETZEN, SPEICHERN UND BEENDEN:
pico ~/remote/private/repos/general_hub.git/hooks/post-update
replace "user" WITH "hostname";
hit "cmd x"
hit "y"
Soweit ich weiß: Das sind die verschiedenen Aufgaben, die das Skript meiner Meinung nach ausführen soll.
Frage 1: Können Bash-Skripte SCP, SSH und BEARBEITEN, SUCHEN, ERSETZEN, SPEICHERN UND BEENDEN direkt verarbeiten?
Frage 2: Der Benutzer, der das Skript ausführt, sollte nach einigen Parametern gefragt werden. Diese Parameter sollten in einigen Dateien abgelegt werden (wobei bestimmte vorhandene Schlüsselwörter ersetzt werden). Ist dies möglich?
Frage 3: Sollen wir die Dateien auf die Remote-Remote kopieren und direkt auf der Remote-Remote bearbeiten oder sollen wir die Dateien lokal abrufen, „sie lokal an einem temporären Ort bearbeiten“ und sie dann auf dem Server ablegen? Ich nehme an, die zweite Möglichkeit ist viel komplizierter.
Gibt es Beispiele, die ich mir ansehen kann?
vielen Dank im Voraus
Antwort1
Die kurze Antwort lautet: Ja zu allen.
Ich werde Ihnen einige Beispiele geben. Das Folgende ist ein Beispiel für einen Befehl, der ein lokales Bash-Skript auf einem Remotecomputer ausführt. Bitte beachten Sie, dass es nicht notwendig ist, es remote zu kopieren:
ssh user@remote_pc 'bash -s' < local_file.sh
Dies ist so einfach, dass es sich möglicherweise nicht lohnt, ein ganzes Skript dafür zu schreiben, aber falls Sie dies wünschen, können Sie es auch über ein Skript einrichten. Damit dies funktioniert, müssen Sie jedoch passwordless login
SSH-Verbindungen einrichten. Wenn Sie dies nicht tun, werden die SSH/SCP-Befehle im Skript angehalten, während sie darauf warten, dass Sie das Kennwort des Remote-Benutzers eingeben.
Was das Bearbeiten usw. betrifft, so verfügt Unix über den ultimativen Stream-Editor sed
, der genau dies tut: Beispielsweise der Befehl
sed 's/a/A/g' old_file.txt > new_file.txt
ersetzt Kleinbuchstaben a
durch Großbuchstaben A
und platziert die Ausgabe in einer neuen Datei. Auch dies lässt sich leicht per Skript steuern.
Was die Parameter betrifft, können Shell-Skripte Parameter aus einer Datei lesen oder die Umgebung nach einigen Parametern abfragen. Es ist nicht nötig, einen Benutzer nach seinem Anmeldenamen zu fragen,
echo $USER
whoami
erledigt dies, sogar innerhalb des Skripts. Dasselbe gilt für eine Privatadresse echo $HOME
usw.
Was Ihre dritte Frage betrifft, hoffe ich, dass meine erste Antwort auch darauf eine Antwort gegeben hat: Der erste Befehl ermöglicht es Ihnen, eine Skriptdatei, die Sie lokal bearbeitet haben, auf einem Remote-Server auszuführen, ohne sie dorthin kopieren zu müssen.
Willkommen in der Welt von *Nix, wodein Wunsch ist mir Befehl.
Entschuldigung, ich habe vergessen: diesen Befehl
export -p | more
werden alle lokalen Variablen angezeigt, die überall verfügbar sind (technisch gesehen, die exportiert).