Я запускаю эту команду:

$ nohup command > foo.out 2> foo.err < /dev/null &

Моя проблема в том, что хотя nohup заставляет мою команду работать в фоновом режиме, она выводит что-то вроде этого на мой терминал:

[1] 27918

Как мне сделать так, чтобы он не выводил номер работы? Я просто хочу сделать это на заднем плане, ничего не сказав мне. В Mac OS X именно так и происходит, поэтому меня немного раздражает, что в Ubuntu это работает по-другому ...

Спасибо за помощь!

3 ответа3

4

Информация о работе отображается вашей оболочкой, а не nohup .

Вы можете попробовать эту альтернативу:

(yourcommand&)

( порождает подоболочку, которая обрабатывает управление заданиями по-разному.

(У меня есть nh() { ("$@" &); } в моем ~/.bashrc, поэтому я могу набрать nh command чтобы сделать то же самое.)

Другой, другой способ:

setsid yourcommand

Редактировать: Кажется, что (setsid yourcommand &) является лучшей комбинацией, так как она отсоединяется от tty и одинаково работает в интерактивном и скриптовом режимах.

1

[1] 27918 исходит от & nohup.

Поместите команду, которую вы хотите запустить в фоновом режиме, внутри файла скрипта:

#!/bin/sh
/path/to/command & >/dev/null 2>/dev/null

а затем позвоните с nohup

nohup sh /path/to/my/script > foo.out 2> foo.err < /dev/null

Вывод & затем перенаправляется в /dev /null внутри скрипта.

1

Так же, как вышеупомянутый (спасибо, кстати).

Внутри скрипта с именем test.ksh:

#!/bin/ksh
./test2.ksh >/dev/null
nohup ksh test2.ksh < /dev/null
echo  "whatever"

Где test2.ksh - это другой скрипт (или может быть команда):

#!/bin/ksh
max=10
for ((i=2; i<=$max; ++i )) ; do
    echo -e "\n Hello world "
done

Затем запустите:

~> ksh test.ksh

и вывод:

nohup: appending output to `nohup.out'
whatever
~>

У меня сработало

Если вы сохраните & в перенаправлении

./test2.ksh & >/dev/null

Он будет печатать как в tty, так и в файле .out

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .