Почему команда "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.