Ich habe Cygwin x64 auf Windows 7 installiert, ohne Änderungen an Standardeinstellungen. Ich kopierte die häusliche Umgebung von einem anderen PC, auf dem Cygwin jahrelang glücklich gearbeitet hatte. Diesmal tritt beim Einloggen (bash) ein nahezu endloser Fehlerstrom auf, den ich auf das folgende Problem eingegrenzt habe. Dieses sehr kleine Skript verhält sich anders, wenn es im Gegensatz zu Sourcing normal aufgerufen wird.Cygwin Bash-Skript geht auf Pipes falsch, wenn Quelle
echo test
echo test | cat
echo t`echo es`t
echo t`echo es | cat`t
echo t$(echo es)t
echo t$(echo es | cat)t
Ausgabe von Skript normalerweise aufgerufen:
test
test
test
test
test
test
Ausgabe des Skripts, wenn Quellen:
test
test
test
tt
test
tt
Pipes innerhalb Code ausgeführt werden als Unterschalen sind auf meiner Installation scheinbar gebrochen.
Fehle ich etwas offensichtlich? Gibt es eine magische Einstellung, die mir nicht bewusst ist, die plötzlich alles wieder in Ordnung bringen wird?
Welche Versionen von 'bash' verwenden Sie? Ich kann die Ergebnisse nicht wiederherstellen. Auch beim Sourcing bekomme ich für jede Zeile die volle Testausgabe. Das Speichern in 't.sh' und das Ausführen von'./T.sh' oder 'source t.sh' funktionieren beide für mich. –
Gefunden etwas mit Pufferung in Rohren zu tun. https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe Möglicherweise verwandt? –
Sind Sie sicher, dass Ihre Login-Shell 'bash' ist? Das Sourcing eines Skripts führt es in derselben Shell aus, in der es ausgeführt wird. Wenn das also eine andere Shell ist, könnte es das seltsame Verhalten erklären. –