每次我使用“at”命令时,都会收到以下消息:
warning: commands will be executed using /bin/sh
它想警告我什么?更重要的是,如何关闭警告?
它对我们这些不使用 bash 作为 shell 的人来说是一个很好的警告,因为我们会忘记,当运行此代码时,我们日常 shell 中的一个功能将不可用在约定的时间。
IE
username@hostname$ 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!如果您习惯使用不同的 shell,很容易犯这些错误,记住做正确的事情是您的责任。
除了烦人之外,警告是否有任何有害影响?手册页没有提到任何关闭它的方法,所以我认为你不能在不从源代码重建你的情况下阻止它发出。
现在,如果您不想看到它,您可以使用at [time] 2>/dev/null
它来将其发送到遗忘,但不幸的at>
是,由于某种原因,提示会打印到 STDERR(一个错误,IMO - 他们真的应该去 STDOUT),所以他们'也被这个隐藏了。
可能会处理一些外壳管道,这将消除警告而不吃提示,但是
at [time] 2>&1 | grep -v warning
不起作用并且at
来处理它。因此,除非它引起实际问题,否则我会说您最好像我们其他人一样忽略警告。
at.c
(来自 Debian 的 3.1.20-3 版本)的源代码包含一个答案:
/* POSIX.2 允许由用户的 SHELL 环境变量指定的 shell、来自用户密码数据库条目的登录 shell
或 /bin/sh 作为处理 at-job 的命令解释器。
它还允许打印警告诊断。由于
可能存在差异,我们总是输出诊断。*/fprintf(stderr, "警告:命令将使用 /bin/sh\n");
您可以使用 shell 重定向来解决它:
% echo "echo blah" | at now+30min 2>&1 | fgrep -v 'warning: commands will be executed using /bin/sh'
job 628 at Fri Mar 8 23:25:00 2019
或者,您甚至可以创建一个函数供您休闲使用(例如用于~/.zshrc
或中的交互式 shell ~/.profile
):
at() {
/usr/bin/at "$@" 2>&1 | fgrep -v 'warning: commands will be executed using /bin/sh'
}
之后,它不会向您发出特定警告(而其他警告/错误消息仍会发送给您)
如果您希望绕过该消息,请让“at”运行一个调用指定环境的脚本,无论是 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.