2017-06-17 7 views
4

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?

+3

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. –

+0

Gefunden etwas mit Pufferung in Rohren zu tun. https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe Möglicherweise verwandt? –

+1

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. –

Antwort

0

Also, am Ende war es definitiv etwas in der Installation, und etwas, auf das ich nicht näher eingehen werde. Ich habe die 32-Bit-Version von Cygwin statt der 64-Bit-Version installiert, und das Skript macht jetzt genau das, was erwartet wurde. Problem nicht gelöst, aber umgangen.

Danke an alle, die reingeschaut haben!

Verwandte Themen