
Ich muss mich regelmäßig über SSH bei Remote-Hosts anmelden und verwende gerne die Bash-Option . set -o vi
Normalerweise muss ich cd
mich in ein bestimmtes Verzeichnis einloggen. Da diese Hosts flüchtig sind (sie werden regelmäßig erstellt und gelöscht), kann ich mich nicht bei ihnen anmelden und sie in einem .bash_profile
/ speichern .bashrc
. Ich habe also nach einer Möglichkeit gesucht, dies zu tun, wenn ich mich über SSH verbinde, damit ich nicht bei jeder Verbindung mit einem Remote-Server dieselben Befehle eingeben muss. Ich habe verschiedene Möglichkeiten ausprobiert, um dies zu erreichen, aber keine davon scheint zu funktionieren. Kann mir jemand helfen, diesen Befehl richtig einzugeben? Kurz gesagt ist das, was ich tun möchte.
cd
in ein bestimmtes Verzeichnis- Legen Sie die Bash-Option fest
set -o vi
So habe ich es versucht:
ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""
Ich denke, dass dies tatsächlich funktioniert, die SSH-Sitzung jedoch beendet wird, da die set -o vi
Sitzung nach Ausführung des Befehls mit einer Meldung wie der folgenden getrennt wird:
Gemeinsam genutzte Verbindung zu remotehost.com geschlossen.
Gibt es eine Möglichkeit, die Sitzung nach der Ausführung dieser Befehle offen zu halten, oder gibt es eine andere Möglichkeit, das zu erreichen, was ich möchte?
Antwort1
Einige Optionen:
ssh -t [email protected] 'cd /data && exec bash --login -o vi'
(das funktioniert mit allen POSIX-ähnlichen Shells, einschließlich ksh
/ zsh
/ dash
..., da es -o
sich um eine Standardoption des POSIX- sh
Dienstprogramms handelt und vi
zufällig eine der Standardoptionen ist. Diese Befehlszeile ist auch mit Shells aller wichtigen Shell-Familien kompatibel, einschließlich Bourne, csh, rc, fish, sollte also unabhängig von der Login-Shell des Root-Benutzers dort funktionieren)
Oder:
ssh -t[email geschützt]„cd /data && exec env SHELLOPTS=vi bash --login“
Eigentlich möchten Sie die zweite nicht verwenden. Das bedeutet, dass die $SHELLOPTS
Variable in der Umgebung vorhanden ist und alle bash
Aufrufe beeinflusst (und die nicht interaktiven erben die Aufrufe von interaktiven Shells, was zu allen möglichen Problemen führt).
Beachten Sie auch, dass bash
es zwei Optionssätze gibt, einen, den Sie mit -o
/ festlegen $SHELLOPTS
, und einen, den Sie mit -O
/ festlegen $BASHOPTS
).
Antwort2
Machen Sie zwei Befehle daraus.
- Schreiben Sie die Befehle, die auf dem Remote-Host ausgeführt werden sollen, in eine Datei
.bashrc.tmp
. $ scp .bashrc.tmp [email protected]:
$ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"
Auf diese Weise müssen Sie nicht einmal Ihr Original sichern .bashrc
.
Antwort3
Um das Springen von einem Ordner zu einem anderen auf Ihrem Host zu vereinfachen, können Sie apparix installieren und Lesezeichen an den verschiedenen Stellen einrichten, zu denen Sie springen müssen, und dann to folderX
in apparix Folgendes verwenden:https://micans.org/apparix/man/apparix.html
Antwort4
Ich verwende ein Remote-System mit einer gemeinsam genutzten Benutzer-ID, daher möchte ich die Startdateien nicht bearbeiten, da dies auch alle anderen betreffen würde. Ihr Beitrag hier hat mir vi
jedoch gezeigt, wie ich die gewünschte Option einstellen kann. Hier ist, was ich in meine ~/.ssh/config
Datei eingefügt habe
Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi
was bemerkenswert einfach ist. Ich weiß nicht, welchen „CD“-Teil Sie wollen.