Brauchen Sie Erklärungen für Linux Bash in exec Befehlsverhalten

Vom Bash Reference Manual bekomme ich die folgende über exec bash-builtin-Kommando:

Falls Befehl angegeben wird, ersetzt es das Oberteil ohne erstellen eines neuen Prozesses.

Nun habe ich Folgendes bash Skript:

#!/bin/bash
exec ls;
echo 123;
exit 0

Diese ausgeführt habe, bekam ich diese:

cleanup.sh  ex1.bash  file.bash  file.bash~  output.log
(files from the current directory)

Nun, wenn ich dieses Skript:

#!/bin/bash
exec ls | cat
echo 123
exit 0

Bekomme ich die folgende Ausgabe:

cleanup.sh
ex1.bash
file.bash
file.bash~
output.log
123

Meine Frage ist:

Wenn exec aufgerufen es ersetzt die shell ohne Erstellung eines neuen Prozesses, warum, wenn Sie gesetzt | cat, die echo 123 gedruckt, aber ohne Sie ist es nicht. Also, ich würde mich freuen, wenn jemand erklären kann, was die Logik für dieses Verhalten ist.

Dank.

BEARBEITEN:
Nach @torek Antwort, bekomme ich ein noch schwerer zu erklären-Verhalten:

1.exec ls>out Befehl erstellt die out - Datei und legen Sie es in die ls's Befehl Folge;

2.exec ls>out1 ls>out2 erstellt nur die Dateien, aber nicht in jeder Folge. Wenn der Befehl funktioniert wie vorgeschlagen, ich denke, der Befehl Nummer 2 müsste das gleiche Ergebnis wie der Befehl Nummer 1 (sogar noch mehr, ich denke, es sollte nicht erstellt hatte out2 - Datei).

Kommentar zu dem Problem - Öffnen
Habe ich etwas gelernt! Kommentarautor: blueshift
Sie link auf exec C exec Funktion. Was Sie testen, ist der bash exec - Objekt. Sie sind nicht das gleiche. Sehen www.gnu.org/software/bash/manual/bashref.html Kommentarautor: J-16 SDiZ
@J-16SDiZ korrigiert, wie Sie vorgeschlagen, aber das Problem weiterhin besteht Kommentarautor: artaxerxe

InformationsquelleAutor der Frage artaxerxe | 2012-03-29

Schreibe einen Kommentar