Ich habe Probleme, Aliase für mein Hosting-Konto zu erweitern, wenn ich einen Befehl wie den folgenden ausführe:
ssh user@server "bash -c \"alias\""
Meine .bashrc-Datei lautet:
echo .bashrc
# .bashrc
shopt -s expand_aliases
# Source global definitions (commenting this out does nothing)
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias php="php55"
alias composer="php ~/bin/composer.phar"
Wenn ich den obigen Befehl ssh ausführe, wird ".bashrc" als Echo angezeigt. Aber wenn ich versuche, Aliase auszuführen, bekomme ich nichts.
Ich könnte "bash -ic" ausprobieren, aber dies ist tatsächlich in einem Skript, das ich nicht einfach ändern kann, und ich möchte wissen, warum dies nicht funktioniert.
Ausgabe von ssh user@server "bash -c \"shopt\""
.bashrc
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize off
cmdhist on
compat31 off
compat32 off
compat40 off
dirspell off
dotglob off
execfail off
expand_aliases off
extdebug off
extglob off
extquote on
failglob off
force_fignore on
globstar off
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
Ausgabe von ssh user@server "bash -c \"echo $SHELL\""
.bashrc
/bin/bash
$PATH
wie~/bin:$PATH
es gut funktioniert.~/.local/bin
wenn das/etc/profile
verarbeitet wird. Sie können. /etc/profile
den Ordner auch direkt nach dem Erstellen erstellen, um ihn ohne Neustart oder Abmelden / Anmelden zu Ihrem PATH hinzuzufügen.Antworten:
Von der
bash(1)
Manpage:quelle
shopt -s expand_aliases
in meinem .bashrc, aber das scheint nicht zu funktionieren. Ich bin mir nicht sicher, warum nicht, aber ich denke, das wäre normalerweise die Antwortshopt -s expand_aliases
in Ihrer ist.bashrc
? Sicherlich, die Ausgabe in der Frage zeigtexpand_aliases
istoff
.shopt
zeige sie aber als ausgeschaltet an. Vielleicht gibt es nur eine seltsame Servereinstellung, die dies verhindert, ich weiß es nicht. Ich habe eine Problemumgehung.bashrc
Datei nicht standardmäßig bezogen.Die Shell, die Sie erhalten, wenn Sie einen Befehl remote mit SSH ausführen, ist weder eine interaktive Shell noch eine Login-Shell:
(Es gibt kein
i
und keinl
in der Antwort)In Bashs Fall bedeutet dies, dass keine der üblichen Initialisierungsdateien gelesen wird.
Sie können den Remote - Shell zwingen , ein Login - Shell , indem zu sein ,
-l
um Ihren Bash Aufruf, was bedeutet , dass sie die ersten von analysieren würden~/.bash_profile
,~/.bash_login
und~/.profile
dass es nicht finden, in dieser Reihenfolge suchen, aber nicht~/.bashrc
. Dies bedeutet, dass Sie Ihre Aliase stattdessen in eine dieser Dateien einfügen müssen.quelle
Ich hatte das gleiche Problem und
shopt -s expand_aliases
schien zunächst nicht zu helfen. Was ich herausgefunden habe ist, dass diese Optionen festgelegt werden sollten, bevor die tatsächlichen Aliase hinzugefügt werden. Wenn also Aliase erstellt werden, bevor Sie.bashrc
dieexpand_aliases
Optionen festlegen, sind sie nicht verfügbar. Daher sollten Sie Aliase laden (oder neu laden), nachdem Sie die Option festgelegt haben.quelle
Bash (1) sagt
Offensichtlich geben Sie .bashrc entweder manuell ein oder führen es mit -i aus
Wenn Aliase alles sind, was Sie brauchen, würde ich empfehlen, sie in zB .aliases aufzuteilen und diese dann sowohl aus .bashrc als auch aus Ihrem Skript zu beziehen, nur für den Fall, dass in .bashrc Dinge auftauchen, die Ihr Skript beschädigen könnten, wie es häufig vorkommt
quelle
Sie können jedes Problem lösen, indem Sie Folgendes eingeben:
in der ersten Zeile.
quelle