0
誰かが私がここで間違っていることを理解するのを助けることができますか?なぜこのexec.Commandが別の開かれたttyに正しく動作しないのですか
別のtty(この場合は/ dev/ttys001)で実行されるコマンド(この場合はvimを開く)を実行しようとしています。これは端末の別のタブで開きます。
以下のコードを実行すると、vimが/ dev/ttys001のウィンドウに表示されますが、実際にそのウィンドウからstdinに入力すると正しく登録されません。
アドバイスはありがとうございます!
package main
import (
"log"
"os"
"os/exec"
)
func main() {
tty, err := os.OpenFile("/dev/ttys001", os.O_RDWR, os.ModePerm)
if err != nil {
log.Fatalln(err)
}
defer tty.Close()
c := exec.Command("vim")
c.Stdin = tty
c.Stdout = tty
c.Stderr = tty
if err := c.Run(); err != nil {
log.Fatalln(err)
}
}
は、私はまた、次のコードでコマンドのSysProcAttrフィールドを設定しようとしたが、エラーが表示されている:フォーク/ execのは/ usr/local/bin/vimの:デバイスには不適切IOCTL。興味を持って誰のために
procAttr := &syscall.SysProcAttr{
Setpgid: true,
Ctty: int(tty.Fd()),
Foreground: true,
}
c.SysProcAttr = procAttr
c.Wait()の後に呼び出します。 – AJPennster
Hey @AJPennster、私は現在c.Runを使用していますが、c.Startとc.Runは自動的にWaitを呼び出します。 –
ああ、私はそれを逃した。 – AJPennster