2017-03-03 3 views
2

Es sieht aus wie set -v funktioniert nicht in einer Subshell? Warum?Warum funktioniert "-v" nicht in Bash in einer Subshell?

(funktioniert in einer Subshell, aber der Ausgang ist ein bisschen belebter).

$ cat foo.sh 
set -v 
date 
set +v > /dev/null 2>&1 

$ bash foo.sh 
date 
Fri Mar 3 14:52:34 PST 2017 
set +v > /dev/null 2>&1 

$ cat foo_subshell.sh 
(
    set -v 
    date 
) 

$ bash foo_subshell.sh 
Fri Mar 3 14:52:42 PST 2017 

Antwort

3

Die Dokumentation sagt:

-v Drucken Shell Eingangsleitungen wie sie gelesen werden.

Wenn Sie eine Subshell in Klammern schreiben, wird die gesamte Subshell gelesen und dann ausgeführt. So wird der set -v Befehl nicht ausgeführt, bis nach alle Befehle gelesen werden, so ist es zu spät, um sie zu drucken.

Verwandte Themen