Verwenden Sie eine separate Historie für 'read -e' (readline)

641
BenjiWiebe

Ich möchte eine interaktive Befehlsshell in Shellskript schreiben, um die iptables-Firewall einfacher anzupassen. Das Problem ist, dass read -edie Shell- Historie verwendet wird. Gibt es eine Möglichkeit, eine separate Historie für read -eein Skript zu verwenden?

3

1 Antwort auf die Frage

2
rici

Wenn Sie rlwrap(Debian-Paket rlwrap) haben, könnten Sie Folgendes verwenden:

LINE=$(rlwrap head -n1) 

Die Datei ~/.head_historywird standardmäßig verwendet. ( man rlwrapfür weitere Details, einschließlich Optionen zum Angeben eines Protokolldateinamens.)

Eine andere Möglichkeit besteht darin, readin einer Subshell mit HISTFILEeiner eigenen Verlaufsdatei zu arbeiten. Sie müssen jedoch noch viel mehr Arbeit erledigen, da der Verlauf zwar read -e verwendet, jedoch nicht aktualisiert wird. Du brauchst wahrscheinlich so etwas wie:

LINE=$(bash -c 'HISTFILE=/path/to/history_file; history -r; read -e LINE; history -s "$LINE"; history -w; echo "$LINE"') 
Ja!! Ich habe "rlwrap". Es ist bereits auf meiner Fedora 20-Installation installiert. Es klappt! BenjiWiebe vor 10 Jahren 0