Neden `echo bash | bash` hemen bir çıkışın?

Oct 05 2020

Aşağıdaki işlemlerin tümü etkisiz işlemlerdir:

echo bash | bash
echo dash | dash
echo "bash -c bash" | bash
echo "dash -c dash" | dash

Neden? İlk satırda için, örneğin, ben bir bash örneği yaratacak varsayılabilir ve sonra o giriş için bekleyen başka bir bash örneği yaratacak. Ancak girdi için beklemez; çıkar. Üst bash da çıkar. Yani her iki bash örneği de çıkıyor ve bu komutları başlattığım kabuk örneğine döndüm. Nerede yanlış anlıyorum?

Yanıtlar

7 user414777 Oct 05 2020 at 12:45

İkinci bash örneği , kendi stdininde ( bashdizginin okunduğu borunun aynısıdır) girdi için bekler , ancak yalnızca echoişlemden çıkar çıkmaz ve borunun yazma ucu kapatılır kapatılmaz bir EOF alır .

İkinci bash için de bazı girdiler vermeyi deneyebilirsiniz:

(echo bash; echo echo hjello) | bash
hjello