Befehl in der Eingabeaufforderung umbrechen

Befehl in der Eingabeaufforderung umbrechen

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 definierenpreexecum eine angegebene Zeichenfolge auszugeben, bevor jeder Befehl ausgeführt wird.

In Bash könnten Sie die DEBUGFalle 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 trapheiß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 trapsteht: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. hr2zwischen Hauptaufgaben und hrzwischen Elementen in einer Schleifenanweisung. Dadurch wird das Lesen der Skriptausgabe wesentlich einfacher.

verwandte Informationen