Почему команда "at" всегда предупреждает меня, что команды будут выполняться через sh?

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

warning: commands will be executed using /bin/sh

Чего он пытается предупредить? Что еще более важно, как отключить предупреждение?

Ответ 1

Это служит хорошим предупреждением для тех из нас, которые не используют bash как нашу оболочку, потому что мы забудем, что функция, которая в нашей повседневной оболочке не будет доступна когда этот код запускается в назначенное время.

то есть.

[email protected]$ at 23:00     
warning: commands will be executed using /bin/sh
at> rm **/*.pyc
at> <EOT>
job 1 at 2008-10-08 23:00

Использование "**" имеет совершенно правильное значение zsh, но не /sbin/sh! Легко сделать эти ошибки, если вы привыкли использовать другую оболочку, и это ваша ответственность не забывать делать правильные вещи.

Ответ 2

Предупреждает ли какой-либо вредный эффект, кроме раздражения? На странице руководства не упоминается какой-либо способ отключить его, поэтому я не думаю, что вы можете остановить его из-за испускания без восстановления вашего в из источника.

Теперь, если вы хотите просто не видеть его, вы можете использовать его в [time] 2 > /dev/null, чтобы отправить его в забвение, но, к сожалению, подсказки at > по какой-либо причине печатаются в STDERR ( ошибка, IMO - они действительно должны пойти в STDOUT), поэтому они также скрыты от этого. Возможно, будет возможно обработать какую-нибудь оболочку, которая устранит предупреждение, не вызывая подсказки, но а) моя попытка этого (в [время] 2 > и 1 | grep -v предупреждение) не работает, и b), даже если вы можете найти комбинацию, которая работает, она не будет подходящей для сглаживания (поскольку время идет в середине, а не в конце), поэтому вам нужно либо ввести его в полном объеме каждый раз, когда вы его используете или напишите обертку script вокруг в, чтобы обработать ее.

Итак, если это не вызывает реальных проблем, я бы сказал, что вам, вероятно, лучше всего игнорировать предупреждение, как и все остальные.

Ответ 3

Он напоминает вам, что команды будут выполняться стандартной оболочкой Bourne, что означает, что ваш командный синтаксис должен быть совместим с этой оболочкой. ( "Fun" факт: я только заметил, что он предупреждает вас, хотя ваша текущая оболочка /bin/sh. Должна быть ошибкой.)

"Легкий взлом" для удаления сообщения - это просто удалить первую строку вывода. Это можно сделать удобным способом, переопределив команду at:

at() { /usr/bin/at [email protected] 2>&1 | tail -n +2; }

Вы можете добавить его в файл, который содержит ваши другие псевдонимы оболочки (~/.bashrc, ~/.zshrc или эквивалент для вашей оболочки).

ПРИМЕЧАНИЕ. Команда tail в вышеупомянутом "хаке" также вычеркивает at> -prefix при написании встроенных команд. Вероятно, это не разбойник, а что-то, о чем нужно знать.

Ответ 4

Если вы хотите обойти это сообщение, запустите "at" запустите script, который вызывает указанную среду, будь то ksh, bash, csh, zsh, perl и т.д.

дополнение - см. справочную страницу 'at' http://www.rt.com/man/at.1.html для получения дополнительной информации.

at and batch read commands from standard input or a specified  file which are to be executed at a later time, using /bin/sh.