Я предполагаю, что Вы выполняете последнюю версию человечности или распределения на основе выскочки. Можно проверить /var/log/daemon.log
для ошибок.
Стандарт su
берет синтаксис su [options] [username]
. Контроль man 1 su
. Вы могли бы хотеть попробовать:
su -c "myCommand" anotheruser >> "myLogfile.log"
Кроме того, несколько вещей произошли бы (главным образом не желательный)
myLogfile.log
принадлежал бы root
.myLogfile.log
был бы создан на /
(корневой каталог), если Вы не используете полный путь как /tmp/myLogfile.log
(потому что выскочка работает с набором pwd к /
).Если Вы хотите, чтобы файл принадлежал anotheruser
Вы могли бы переключить команду на.
su -c "myCommand >> /tmp/myLogfile.log" anotheruser
Это могло бы вызвать проблемы, если у Вас есть остаток myLogfile.log
принадлежавший root
от более ранних выполнений или если не изменились myLogfile.log
к чему-то как /tmp/myLogfile.log
(обычно, обычные пользователи не могут создать файлы на корневом каталоге /
).
Куда ошибка была бы отправлена при выполнении file_2
?
Когда Вы вводите ./file_2
(с упомянутым исполняемым файлом файла), система на самом деле работает /bin/sh ./file_2
- т.е. это выполняет новую копию /bin/sh
, который ответственен за выполнение команд в ./file2
, и для создания отчетов об ошибках это находит там, производя их к stderr.
Но Вы только что выполнили это /bin/sh
с закрытым stderr. Таким образом, это хочет испустить ошибку, но нигде не должно делать так.
С которым можно проверить:
$ strace -e write,dup2 -fo /dev/stdout sh -c 'echo foo >&2' 2>&-
8785 dup2(2, 1) = -1 EBADF (Bad file descriptor)
8785 write(2, "sh: 1: ", 7) = -1 EBADF (Bad file descriptor)
8785 write(2, "2: Bad file descriptor", 22) = -1 EBADF (Bad file descriptor)
dup2
сбои, потому что fd 2 закрывается, sh
попытки сообщить об ошибке относительно stderr, но это перестало работать, а также stderr (fd 2) закрывается.