Моделируйте пустой STDIN к отдельной команде

Хорошо, оказывается, что я пропускал реальное сообщение об ошибке, который dmesg, о котором сообщают как:

Ext2 fs: unsupported inode size

После того как я нашел, что, немного поиска с помощью Google показало мне, что только 128-разрядные inode размеры поддерживаются для ext2fs в OpenBSD 4.4. Я положил обратно флеш-накопитель к машине Linux, переформатированной с mke2fs -I 128, и вуаля! Диск может теперь быть успешно смонтирован на машине BSD с командой монтирования, данной в вопросе.

3
17.03.2013, 22:41
2 ответа

Чтобы Ваша команда обнаружила eof, это должно читать из stdin. Таким образом, по-видимому, это ожидает некоторый вход. Таким образом, это походит на то, в чем Вы нуждаетесь, не пустой вход (/dev/null точно предназначен для того), но введите, это никогда не прибывает.

Это может быть моделировано с каналом, куда никто никогда не собирается записать на другом конце как:

sleep 999999999 | the-command

Или избегать необходимости выполнять это дополнительное sleep команда, это могло быть сделано с именованным каналом:

fifo=$(mktemp -u) &&
  mkfifo "$fifo" &&
  (rm "$fifo" && the-command <&3 3<&- &) 3<> "$fifo"

Здесь с помощью посреднического дескриптора файла для работы вокруг того, что оболочка подключает stdin с /dev/null implicitely, когда Вы запускаете команду с & (если Вы не добавляете явное stdin перенаправление как наш <&3 здесь).

На Linux (и вероятно только на Linux), можно также сделать:

the-command < /dev/fd/1 3>&1 > /dev/null | :

/dev/fd/1 то, где fd 1 подключен к каналу на Linux, ведет себя как именованный канал. Таким образом, при открытии его в режиме чтения Вы получаете конец чтения канала.

Таким образом выше, fd 0 будет подключен к концу чтения канала, другой конец которого находится на fd 3 the-command. Поскольку the-command движение ничего не должно писать на своем fd 3, любом read попытка на fd 0 заблокируется (или чтение неблокирования возвратится с нет ничего для чтения все же, или выбор/опрос не возвратит ничего для чтения любого как the-command вероятно, делает, если это делает что-либо еще, чем ожидание входа, который никогда не прибывает).

8
27.01.2020, 21:10
  • 1
    хорошо, я понимаю сон, (протестированные работы) и я попытаются понять первым прибыл, первым обслужен часть..., если никто не обеспечит что-то новое через следующие несколько часов, то я отмечу это как ответ. –  Asain Kujovic 17.03.2013, 22:48
  • 2
    999999999 кажется безопасным (32 года)... я задаюсь вопросом, какой реальный предел имеет команду сна. –  Asain Kujovic 17.03.2013, 22:55
  • 3
    @OmerMerdan, В моей системе (Linux, coreutils 8.13), это преобразовывает аргумент a double и повторения sleep так же много раз по мере необходимости для достижения того числа. Таким образом, я могу сделать sleep infinity или sleep 1e200. Портативно я подозреваю лучшее, которое можно ожидать, 2^31-1: 2147483647. –  Stéphane Chazelas 17.03.2013, 23:12
  • 4
    ~2Gseconds... 68 лет на машинах на 32 бита, хороших. "сон 2147483647 |" является, вероятно, лучшим" </dev/null" subst. –  Asain Kujovic 17.03.2013, 23:23
  • 5
    Это просто заставит программу зависать, когда она попытается читать. Если требуется некоторый вход, дайте ему некоторый вход. –  vonbrand 18.03.2013, 01:44

Необходимо использовать команду disown. Это выпустит STDIN/STDOUT от текущей оболочки, куда Вы выполняете эти команды.

% disown -a

- или -

% sleep 100 &
[1] 7987
% disown %1

См. страницу справочника удара для получения дальнейшей информации.

отрицайте [-площадь] [-h] [jobspec...] опции Without, каждый jobspec удален из таблицы активных заданий. Если-h опция дана, каждый jobspec не удален из таблицы, но отмечен так, чтобы SIGHUP не был отправлен в задание, если оболочка получает SIGHUP. Если никакой jobspec не присутствует, и ни-a, ни-r опция не предоставляются, текущее задание используется. Если никакой jobspec не предоставляется,-a опция означает удалять или отмечать все задания;-r опция без jobspec аргумента ограничивает операцию рабочими заданиями. Возвращаемое значение 0, если jobspec не указывает допустимое задание.

1
27.01.2020, 21:10
  • 1
    благодарит, это 'отрицает' взгляды команды лучше и более логичный затем 'nohup', но все еще не разрешило мою проблему, я протестировал $ (сон 10; mycommand> myLog 2> &1), и... и отрицают его в 10 секундах..., но файл журнала не делает растет..., я проверю больше. –  Asain Kujovic 17.03.2013, 21:55
  • 2
    @OmerMerdan, Вы подразумеваете, что файл журнала не добавляется или что он не создается? Оператор перенаправления усечения (>) не позволит файлу "расти", даже если Вы не сделаете disown. –  depquid 17.03.2013, 22:24
  • 3
    это начинает заполнять его... немного килобайтов и затем останавливается. Я отредактировал свой вопрос сделать проблему более ясной. –  Asain Kujovic 17.03.2013, 22:32

Теги

Похожие вопросы