Ist es möglich, in einer Eingabeaufforderung nach dem Befehl ein Trennzeichen einzufügen? Hier ein Beispiel:
~/Desktop: ls -al
-------------------------------------
total 80
drwx------+ 6 eddie staff 204B Apr 29 16:57 .
drwxr-xr-x+ 54 eddie staff 1.8K Apr 30 10:54 ..
~/Desktop:
Insbesondere möchte ich den Teil --------- nach der Ausgabe eines Befehls hinzufügen, um den Befehl leichter vom Ergebnis unterscheiden zu können
Antwort1
In zsh können Sie die Hook-Funktion definierenpreexec
um eine angegebene Zeichenfolge auszugeben, bevor jeder Befehl ausgeführt wird.
In Bash könnten Sie die DEBUG
Falle verwenden, um einen Preexec-Hook einzurichten, der dasselbe tut.
Sie würden eine preexec()-Funktion etwa wie folgt definieren:
preexec () { echo "-------------------------------"; }
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
preexec
}
trap 'preexec_invoke_exec' DEBUG
Weitere Einzelheiten finden Sie unterVerfügt Bash über einen Hook, der vor der Ausführung eines Befehls ausgeführt wird?
Ich glaube allerdings nicht, dass dies in allen Versionen von Bash funktioniert. Auf meinem alten Ubuntu-Server, auf dem Bash 3.2.39(1) läuft, help trap
heißt es
Wenn ein SIGNAL_SPEC DEBUG ist, wird ARG ausgeführtnachjeder einfache Befehl.
Auf einem anderen Server mit Bash 4.1.2(1) heißt es
Wenn ein SIGNAL_SPEC DEBUG ist, wird ARG ausgeführtVorjeder einfache Befehl.
das ist, was wir brauchen. Stellen Sie also sicher, dass in Ihrer Version von Bash help trap
steht:Vorjeder einfache Befehl."
Antwort2
Wenn Sie Bash oder Ksh als Shell verwenden, können Sie in einer Ihrer Dotfiles (.profile, .bash_profile usw.) eine Funktion wie folgt erstellen:
function hr {
echo "--------------------------------------------------------------------------------"
}
Anschließend können Sie es Befehlen voranstellen, wann immer Sie dieses Trennzeichen verwenden möchten, &&
oder ;
als Befehlstrennzeichen. Wie in:
bash-[534]$ hr && ls
--------------------------------------------------------------------------------
ddtool_23.jnlp prtconf-pv
oder
bash-[536]$ hr ; ls -la
--------------------------------------------------------------------------------
total 36K
drwxr-xr-x 2 tim staff 4 2012-12-06 15:02 ./
drwxr-xr-x 46 tim staff 134 2013-04-30 14:59 ../
-rw------- 1 tim staff 2.7K 2012-12-06 15:00 ddtool_23.jnlp
-rw-r--r-- 1 tim staff 24K 2012-12-06 15:02 prtconf-pv
Ich mache das. Ich habe eine zweite Funktion, die auch einen dickeren Trenner druckt.
function hr2 {
echo "================================================================================"
}
Ich verwende diese Funktionen häufig in Shellskripten, um verschiedene Teile des Skripts voneinander zu trennen, z. B. hr2
zwischen Hauptaufgaben und hr
zwischen Elementen in einer Schleifenanweisung. Dadurch wird das Lesen der Skriptausgabe wesentlich einfacher.