Wie auf der echo-Zeile mit mehreren Anführungszeichen/Sonderzeichen in Datei?
Ich versuche zu echo die folgende Zeile in eine .Profil, aber es hält immer verwirrt, entweder durch die vielen Anführungszeichen oder Sonderzeichen.
bind '"e[A": history-search-backward'
Ich habe versucht, alle möglichen Dinge, aber kann Sie nicht genagelt.
Dies ist, was ich derzeit habe:
sudo su -c 'echo "bind \'\"\\e[A\": history-search-backward\'" >> /etc/profile' -
Dies ist, was es gibt:
su: user '"\e[A": does not exist
Doch, wenn ich einfach nutzen:
echo bind \'\"\\e[A\": history-search-backward\'" >> /home/user/testfile
Funktioniert es Prima.
Habe ich alle Art von "sudo su -c "echo blah..." in den rest des Skripts, die einfach gut funktionieren.
Irgendwelche Ideen?
\'\"\\e[A\"
Gibt es ein extra \ vor dem e.- Er muss mit zwei umgekehrten Schrägstrichen, so dass eine wörtliche \ Hinzugefügt wird /etc/profile.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese
Aus der bash-Manpage:
Text zitiert von
$'...'
enthalten können backslash-escaped quotes, sowohl Einzel-und Doppelzimmer.Andere option ist, um einen einfacheren Ausdruck zu
~/.inputrc
:Scheint es nicht zu sein, ein system-weite entspricht
.inputrc
, die von allen Benutzern gelesen. Auch dies macht die Tastenkombination von jedem Programm, das mit readline. Wenn Sie wirklich wollen, Sie zu beschränken bash, fügen Sie einen bedingten Ausdruck ein:Jedes Zeichen wörtlich interpretiert wird zwischen einfache Anführungszeichen, außer
'
selbst. So können Sie setzen Sie ein einfaches Anführungszeichen innerhalb einer Zeichenkette so:'single'\''quoted'
ist der stringsingle'quoted
.Dein Befehl ist kompliziert, denn es sind zwei Schalen, die beteiligt sind: die shell Sie ausführen, dieser Befehl aus, und die shell, die
su
läuft. Beachten Sie, dass es ist komisch zu laufensudo su
seitsudo
bereits führt den angegebenen Befehl als root;sudo sh -c …
mehr Sinn macht. So müssen Sie zitieren, für beide. Es ist in der Regel am klarsten verwenden Sie einfache Anführungszeichen für die äußere Hülle und doppelte Anführungszeichen oder einfache Anführungszeichen oder backslashes zu der inneren Schale.Es gibt ein anderes problem mit dem Befehl: du bist visiert die falsche Datei.
/etc/profile
nur Lesen von login-shells, in der Erwägung, dass diebind
Befehl ist spezifisch für bash, aber sollte gelesen werden von allen Instanzen der bash, nicht nur für login-shells. Anstelle des Schreibens dieser Zeile/etc/profile
sollten Sie schreiben es, um die system-weitebashrc
, wenn es einer ist (so ist es normalerweise/etc/bash.bashrc
).Können Sie diese Einstellung direkt in die readline-Konfigurationsdatei
/etc/inputrc
. Sparen Sie auf ein Niveau zu zitieren.Einen einfacheren Weg, um eine beliebige Zeichenfolge sein, um einen Befehl zu übergeben, die es als Eingabe statt als argument und verwenden Sie eine hier dokumentieren.