Я написал программу, которая использует ForkExec в Go.
command := "/bin/su -c '/bin/ls -lh / >/tmp/sC0X3kASz7' joe"
pid, err := os.ForkExec(command, []string{}, os.Environ(), "", []*os.File{nil, cmd.Stdout, cmd.Stderr})
если вы выполните эту команду в своей оболочке и наберете cat /tmp/sC0X3kASz7
, вы увидите ваши файлы в списке.
однако, ForkExec выше только создает файл и ничего не записывает в него. Есть идеи, почему это случилось?
go - root.
edit: command := "/bin/ls -lh / >/tmp/sC0X3kASz7"
тоже не сработало, просто попробовал. он даже не создает файл / tmp.
edit2: command := "/bin/bash /tmp/command.txt"
и я поместил вышеупомянутую команду в этот текстовый файл, снова, выполнить из оболочки, файл создан, из ForkExec - нет: (
edit3: решение здесь http://code.google.com/p/go/issues/detail?id=428