2017-02-13 5 views
0

Wir haben ein Skript, mit einem Return-Code. Zum BeispielBash Rückgabewert in Rohr zu Bash

#!/bin/bash 
exit 42 

welches funktioniert:

$ ./script ; echo $? 
42 

aber wenn ich gehen:

$ bash << EOF 
./script ; echo $? 
EOF 
0 

so es 0 druckt, während man es noch erwarten würde drucken 42

+1

Sie haben hier keine Pipes, Sie verwenden Bash, um ein Heredoc zu verarbeiten –

Antwort

6

Ihre $? wird vor dem Ausführen des Skripts erweitert. Wenn Sie nicht möchten, dass Ihre Variablen in der heredoc (keine Pfeife) setzen einfache Anführungszeichen um den Namen zu erweitern:

bash <<'EOF' 
./script; echo $? 
EOF 

Das $? aus erweitert, während das Bestehen der Zeichenfolge an den neuen bash Befehl verhindern wil. Es wird stattdessen in der Zeichenfolge ausgewertet, für die Sie zu sein scheinen.