Comment faire écho à la ligne avec de multiples citations/caractères spéciaux dans le fichier?
Je suis en train de l'écho de la ligne suivante dans un .profil, mais il ne cesse de se confondre, soit par le nombre de citations ou de caractères spéciaux.
bind '"e[A": history-search-backward'
J'ai essayé toutes sortes de choses, mais ne peut pas obtenir cloué.
C'est ce que j'ai actuellement:
sudo su -c 'echo "bind \'\"\\e[A\": history-search-backward\'" >> /etc/profile' -
C'est de quoi il en retourne:
su: user '"\e[A": does not exist
Encore si je viens de l'utiliser:
echo bind \'\"\\e[A\": history-search-backward\'" >> /home/user/testfile
Il fonctionne très bien.
J'ai toutes sortes de "sudo su -c "echo bla..." dans le reste de mon script qui fonctionne très bien.
Des idées?
\'\"\\e[A\"
Il ya un supplément \ avant de l'e.Il a besoin de deux barres obliques inverses de sorte qu'un littéral \ est ajouté à /etc/profile.
OriginalL'auteur user1604139 | 2012-08-16
Vous devez vous connecter pour publier un commentaire.
Essayer cette
À partir de la page de manuel de bash:
Texte cité par
$'...'
peut contenir des anti-slash-échappé citations, à la fois simples et doubles.Une autre option est d'ajouter une plus simple expression pour
~/.inputrc
:Il ne semble pas être un système équivalent à l'échelle de
.inputrc
qui est lu par tous les utilisateurs. Aussi, cela permet de rendre la clé de liaison à la disposition de tout programme qui utilise readline. Si vraiment vous ne voulez restreindre à bash, ajouter une expression conditionnelle:OriginalL'auteur chepner
Chaque personnage est interprété littéralement entre guillemets simples, à l'exception de
'
lui-même. Ainsi, vous pouvez mettre un seul guillemet à l'intérieur d'une chaîne de caractères comme ceci:'single'\''quoted'
est la chaînesingle'quoted
.Votre commande est compliqué parce qu'il y a deux coquilles impliqués: l'interpréteur de commandes que vous exécutez cette commande à partir de, et la coquille qui
su
s'exécute. Notez que c'est bizarre pour exécutersudo su
depuissudo
déjà exécute la commande spécifiée en tant que root;sudo sh -c …
a plus de sens. Si vous avez besoin de devis pour les deux. Il est généralement plus clair d'utiliser les guillemets simples pour l'enveloppe extérieure, et des guillemets ou des apostrophes ou des barres obliques inverses pour la coque intérieure.Il y a un autre problème avec votre commande: vous ciblez le mauvais fichier.
/etc/profile
est lu uniquement par les shells de login, alors que labind
commande est spécifique à bash, mais devrait être lu par toutes les instances de bash, pas seulement les shells de login. Au lieu d'écrire cette ligne de/etc/profile
, vous devez écrire à l'échelle du systèmebashrc
, si il y en a un (il est généralement/etc/bash.bashrc
).Vous pouvez mettre ce paramètre directement dans la readline fichier de configuration,
/etc/inputrc
. Vous économiserez sur un niveau de citer.Un moyen plus facile de faire passer une chaîne de caractères arbitraire à une commande serait passer comme entrée plutôt que comme un argument et l'utilisation d'un ici le document.
OriginalL'auteur Gilles