Я использую ssh-модуль go и пытаюсь передать данные из моей программы в удаленную оболочку через stdin.Это работает, как и ожидалось, печатая Hello World
:
mySession := PrepareSession() // helper method to prepare a Connection and Session object
output, _ := mySession.Output("echo Hello World")
fmt.Println(output)
Однако, когда я пытаюсь ввести ввод stdin, он зависает на строке myStdin.Write("Hello World")
(я подтвердил это с помощью отладчика):
mySession := PrepareSession()
myStdin, _ := mySession.StdinPipe()
myStdin.Write("Hello World")
output, _ := mySession.Output("cat /dev/stdin | echo")
fmt.Println(output)
Замена myStdin.Write("Hello World")
на fmt.Fprint(myStdin, "Hello World")
приводит к той же проблеме.
В целом, я просто не понимаю, как работают каналы в Go - как мне заставить трубу перестать зависать, когда яподача входных данных к нему?