Я хочу запустить команду: pbcopy < file.csv
в моей программе Go. Однако похоже, что пакет Go os/exec
не может перенаправлять одну команду на другую, используя синтаксис <
. Поэтому я решил использовать канал в своей программе. Однако этот скрипт:
package main
import (
"os/exec"
)
func main() {
cmd1 := exec.Command("cat", "test.csv")
cmd2 := exec.Command("pbcopy")
out, _ := cmd1.StdoutPipe()
cmd2.Stdin = out
cmd2.Run()
}
Когда я запускаю указанную выше программу, она не завершается и выглядит так, будто ждет ввода от пользователя в Терминале. И когда я завершаю его и пытаюсь вставить результат куда угодно, он не принимает ввод и сохраняет его в буфер обмена.
Затем я меняю последнюю строку программы с cmd2.Run()
на cmd2.Start()
, после чего программа корректно завершается. Однако буфер обмена заполнен пустой строкой и не сохраняет вывод cat file.csv
в буфер обмена.
Я попытался найти несколько примеров использования канала в os.exec
в Go, но все, что я видел, предполагает, что результат выводится в терминал в конце, например ls -l | wc -l
или ls -l | grep "py"
или что-то в этом роде. Но команда pbcopy
не отображает ввод, а просто сохраняет ввод в буфер обмена.
Итак, как я могу использовать перенаправление (или канал) в пакете os.exec
в Go с командой pbcopy
?