1299 Stimmen

Wie man Shell-Befehle bei der Ausführung echot, wenn sie ausgeführt werden

Wie kann ich in einem Shell-Skript alle aufgerufenen Shell-Befehle als Echo ausgeben und alle Variablennamen erweitern?

Ein Beispiel ist die folgende Zeile:

ls $DIRNAME

Ich möchte, dass das Skript den Befehl ausführt und das Folgende anzeigt

ls /full/path/to/some/dir

Der Zweck ist, ein Protokoll aller aufgerufenen Shell-Befehle und ihrer Argumente zu speichern. Gibt es vielleicht eine bessere Möglichkeit, ein solches Protokoll zu erstellen?

8voto

zzapper Punkte 4385

Für zsh, echo

setopt VERBOSE

Und zur Fehlersuche,

setopt XTRACE

2voto

Paul Havens Punkte 21

Damit zusammengesetzte Befehle als Echo ausgegeben werden können, verwende ich eval sowie Soths exe Funktion, um den Befehl auszugeben und auszuführen. Dies ist nützlich für über Pipelines vermittelte Befehle, die andernfalls keine oder nur den ersten Teil des über Pipelines vermittelten Befehls anzeigen würden.

Ohne Bewertung:

exe() { echo "\$ $@" ; "$@" ; }
exe ls -F | grep *.txt

Ausgänge:

$
file.txt

Mit eval:

exe() { echo "\$ $@" ; "$@" ; }
exe eval 'ls -F | grep *.txt'

Welche Ausgaben

$ exe eval 'ls -F | grep *.txt'
file.txt

1voto

cnst Punkte 23716

Para csh y tcsh können Sie set verbose o set echo (oder Sie können sogar beides einstellen, aber das kann in den meisten Fällen zu Doppelarbeit führen).

Le site verbose gibt so ziemlich genau den Shell-Ausdruck aus, den Sie eingeben.

Le site echo ist eher ein Indikator dafür, was durch Spawning ausgeführt werden soll.


http://www.tcsh.org/tcsh.html/Special_shell_variables.html#verbose

http://www.tcsh.org/tcsh.html/Special_shell_variables.html#echo


Special shell variables

verbose If set, causes the words of each command to be printed, after history substitution (if any). Set by the -v command line option.

echo If set, each command with its arguments is echoed just before it is executed. For non-builtin commands all expansions occur before echoing. Builtin commands are echoed before command and filename substitution, because these substitutions are then done selectively. Set by the -x command line option.

0voto

Karthik Arun Punkte 69
$ cat exampleScript.sh
#!/bin/bash
name="karthik";
echo $name;

bash -x exampleScript.sh

Die Ausgabe sieht wie folgt aus:

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X