Почему я не могу использовать удар свободно после использования утилиты “At”? (Не может вставить stdin до ctrl+c),

Я выполнил следующий блок кода ( at тайм-аут для удаления PHPmyadmin). Нужно запланировать выполнить 2 часа вперед, но я выполнил его в тайм-ауте 2 минут, только для тестирования его:

bash /dev/fd/50 50<< PMA_UNINSTALL | at 'now + 2 minutes'

apt-get purge phpmyadmin -y
PMA_UNINSTALL

at утилита, кажется, препятствует тому, чтобы я использовал Bash свободно, если я не делаю CTRL+C. At также запрашивают соблюдающее предупреждение, которое нормально, и hardcoded в исходном коде Утилиты. Когда я делаю CTRL+C, предупреждение исчезает, и я могу использовать Bash регулярно снова.

команды будут выполняться с помощью/bin/sh

Я не говорю, что это - предупреждение, которое препятствует тому, чтобы я использовал Bash регулярно как долго, это появляется. Я знаю, что предупреждение просто stdout, и что-то еще могло бы препятствовать тому, чтобы я создал stdin.

Что препятствует тому, чтобы я создал stdin передача по каналу вышеупомянутого блока кода с at и как я мог достигнуть состояния, когда я мог выполнить команды, переданные по каналу с в, но использовать Bash, свободно правильный впоследствии без прерывания at работать?

3
задан 14 February 2017 в 14:24

2 ответа

Мне потребовалось некоторое время для наблюдения настоящей проблемы - Вы хотите непосредственно отправить команду в at вместо того, чтобы обеспечить команду (команды) впоследствии, как я предположил.

нет никакой потребности в сложной схеме, просто тип

echo 'apt-get purge phpmyadmin -y' | at 'now + 2 minutes'

, Когда Вы делаете это, этот путь at не ожидает входа впоследствии, и Вы сразу возвращаетесь к командной строке.

<час>

(хранение моего исходного ответа здесь)

Издание at дает Вам возможность перечислить команды для выполнения. Необходимо сказать at, что Вы сделаны:

Нажатие CTRL + D (Это также известно как Конец Transmisssion)

5
ответ дан 1 December 2019 в 13:11

TL; DR: Те команды, кажется, не делают то, что Вы, вероятно, предназначаете.

При попытке сделать at выполниться apt-get purge phpmyadmin -y от bash через 2 минуты затем Ваш код не сделает то, что Вы хотите, чтобы он сделал.

Команда слева от канала (|) имеет Ваш здесь документ как его стандартный вход. Та команда даже не работает, пока оболочка не считала Ваше полное здесь документ.

От 3.6.6 здесь документы в справочнике Bash:

Этот тип перенаправления дает оболочке команду читать вход из текущего источника, пока строка, содержащая только слово (без конечных пробелов), не замечена. Все чтение строк до той точки затем используется в качестве стандартного входа (или дескриптор файла n, если n указан) для команды.

Команда со здесь документ является, в действительности, просто единственной командой, которая должна быть полностью считана оболочкой, прежде чем это будет выполнено. В Вашем коде, входе чтений оболочки до PMA_UNINSTALL появляется на строке отдельно. После того как это произошло, оболочка затем использует содержание здесь документ как дескриптор файла 50 для команды bash /dev/fd/50.

Та команда даже не запускает новый экземпляр bash до здесь был полностью прочитан документ. Когда bash действительно работает, это выполняет эту команду:

apt-get purge phpmyadmin -y

Начиная с целой левой стороны канала включая здесь документу передали его стандартный вывод по каналу к at, вход at добирается вывод bash, который является выводом apt-get purge phpmyadmin -y. at затем попытки интерпретировать тот вывод - не Ваш apt-get команда, но ее вывод - как список команд для выполнения в /bin/sh.

Таким образом, это почти наверняка не, что Вы означаете делать.

Я не уверен, почему Вы не разбираетесь в приглашении оболочки назад после ввода того кода. Когда я выполняю его на тестовой машине, я возвращаю приглашение оболочки через несколько секунд. Если Вы хотите отладить это, можно попытаться работать apt-get purge phpmyadmin -y в интерактивном режиме в ударе. Путем Ваш код написан, та команда работает полностью прежде at возвраты к оболочке (и прежде at может запланировать что-либо). Вероятно, не было бы полезно отладить этот конкретный код далее, все же.

4
ответ дан 1 December 2019 в 13:11

Другие вопросы по тегам:

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