J'ai du mal à obtenir des alias pour étendre mon compte d'hébergement lorsque j'exécute une commande comme:
ssh user@server "bash -c \"alias\""
Mon fichier .bashrc est:
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"
Lorsque j'exécute la commande ssh ci-dessus, je vois ".bashrc" en écho. Mais si j'essaie d'exécuter des alias, je ne reçois rien.
Je pourrais essayer "bash -ic", mais c'est en fait dans un script que je ne peux pas facilement changer, et je veux savoir pourquoi cela ne fonctionne pas.
Sortie de 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
Sortie de ssh user@server "bash -c \"echo $SHELL\""
.bashrc
/bin/bash
$PATH
car~/bin:$PATH
cela fonctionne bien.~/.local/bin
lorsque le/etc/profile
est traité, il l'ajoutera automatiquement à votre PATH. Vous pouvez également juste. /etc/profile
après avoir créé le dossier pour l'ajouter à votre PATH sans redémarrage ou déconnexion / connexion.Réponses:
Depuis la
bash(1)
page de manuel:la source
shopt -s expand_aliases
dans mon .bashrc, mais cela ne semble pas fonctionner. Je ne sais pas pourquoi, mais je suppose que ce serait la réponse normalementshopt -s expand_aliases
est dans vos.bashrc
avant les alias? Certes, votre sortie dans la question montreexpand_aliases
estoff
.shopt
montre comme éteinte. Peut-être qu'il y a juste un paramètre de serveur étrange qui empêche cela, je ne sais pas. J'ai une solution.bashrc
fichier n'était probablement pas fourni par défaut.Le shell que vous obtenez lorsque vous exécutez une commande à distance avec SSH n'est ni un shell interactif ni un shell de connexion:
(il n'y a pas
i
et pasl
dans la réponse)Dans le cas de Bash, cela signifie qu'aucun des fichiers d'initialisation habituels n'est lu.
Vous pouvez forcer le shell à distance pour être un shell de connexion en ajoutant
-l
à votre appel Bash, ce qui signifie qu'il parser le premier de~/.bash_profile
,~/.bash_login
et~/.profile
qu'il peut trouver, à la recherche dans cet ordre, mais non~/.bashrc
. Cela signifie que vous devrez plutôt placer vos alias dans l'un de ces fichiers.la source
J'ai eu le même problème et, au début
shopt -s expand_aliases
, ne semblait pas aider. Ce que j'ai découvert, c'est que ces options doivent être définies avant d'ajouter les alias réels. Donc, si des alias sont créés avant que votre jeu ne.bashrc
définisse lesexpand_aliases
options, ils ne seront pas disponibles. Par conséquent, vous devez charger (ou recharger) les alias après avoir défini l'option.la source
bash (1) dit
donc, évidemment, vous sourcez .bashrc manuellement ou vous l'exécutez avec -i
si les alias sont tout ce dont vous avez besoin, je recommanderais de les séparer par exemple en .aliases puis de les source à la fois.
la source
Vous pouvez résoudre tout problème en entrant:
à la première ligne.
la source