J'utilise bash 4.3.11 (1) et le plugin d'historique suivant est installé (via .bash_it ):
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
bind '"^[[B":history-search-forward'
Lorsque je me connecte à une session interactive, tout va bien, mais lorsque j'exécute des commandes à distance via, ssh host 'ls -als'
par exemple, je vois la sortie suivante:
: ssh host 'ls -als'
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 3: bind: warning: line editing not enabled
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 4: bind: warning: line editing not enabled
Lorsque je modifie le plugin d'historique avec echo -e '\0033\0143'
après chaque appel de liaison, je ne reçois plus les avertissements mais ma console est effacée. Ce n'est pas un gros inconvénient, mais ce serait bien de connaître un moyen plus propre de supprimer cela pour les commandes à distance.
# Works, but annoyingly clears console
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
echo -e '\0033\0143'
bind '"^[[B":history-search-forward'
echo -e '\0033\0143'
Avoir une session interactive ne suffit pas pour
bind
travailler. Par exemple, le shell emacs fournit une session interactive qui réussit leif [ -t 1 ]
test mais il n'a pas d'édition de ligne, donc toutbind
s dans votre~/.bashrc
générera les avertissements. Au lieu de cela, vous pouvez vérifier si la modification de ligne est activée en faisant quelque chose comme ceci (y a-t-il un moyen plus simple / meilleur?):la source
[[ ${SHELLOPTS} =~ (vi|emacs) ]] && echo 'line-editing on' || echo 'line-editing off'
Mettez les commandes de liaison dans une instruction 'if' qui vérifie si la session bash autorise l'édition de ligne:
la source
S'il n'y a pas d'édition de ligne, ces
bind
commandes elles-mêmes sont inoffensives. Supprimez les avertissements:C'est un peu inélégant, mais cela devrait encore fonctionner. D'autres réponses ne concordent pas sur le meilleur test / suffisant. Mon approche contourne cela. Cela ne se modifie cependant pas bien. Les deux commandes seules ne devraient pas faire une grande différence; mais si vous en aviez plus, comme des dizaines, alors un bon conditionnel serait probablement mieux.
la source