【发布时间】:2008-10-08 03:35:04
【问题描述】:
每次我使用“at”命令时,都会收到以下消息:
warning: commands will be executed using /bin/sh
它试图警告我什么?更重要的是,如何关闭警告?
【问题讨论】:
每次我使用“at”命令时,都会收到以下消息:
warning: commands will be executed using /bin/sh
它试图警告我什么?更重要的是,如何关闭警告?
【问题讨论】:
对于我们这些不使用 bash 作为 shell 的人来说,这是一个很好的警告,因为我们会忘记,我们日常 shell 中的一个功能在这个时候将不可用代码在指定的时间运行。
即
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.c 的源代码(来自 Debian 3.1.20-3 版本)包含答案:
/* POSIX.2允许用户的SHELL环境指定的shell 变量,来自用户密码数据库条目的登录 shell,
或 /bin/sh 作为处理 at-job 的命令解释器。
它还允许打印警告诊断。因为
可能的差异,我们总是输出诊断。 */fprintf(stderr, "warning: commands will be executed using /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 或~/.profile 中的交互式shell):
at() {
/usr/bin/at "$@" 2>&1 | fgrep -v 'warning: commands will be executed using /bin/sh'
}
之后,它不会向您发出特定警告(而其他警告/错误消息仍会发送给您)
【讨论】:
除了烦人之外,警告是否有任何有害影响?手册页没有提到任何关闭它的方法,所以我认为你不能在不从源代码重建 at 的情况下阻止它发出。
现在,如果您不想看到它,可以使用 at [time] 2>/dev/null 将其发送到遗忘,但不幸的是,at> 提示由于某种原因被打印到 STDERR(一个错误,IMO - 他们真的应该去STDOUT),所以他们也被这个隐藏了。
也许可以设计一些外壳管道,这样可以消除警告,而不会同时吃掉提示,但是
at [time] 2>&1 | grep -v warning) 不起作用,并且at 周围编写一个包装脚本来处理它。因此,除非它引起实际问题,否则我会说您最好像我们其他人一样忽略警告。
【讨论】:
stderr 实际上是正确的。 POSIX 指定将其用于所有“诊断”用途。状态,例如关于何时需要什么输入的信息,是诊断性的——这就是 shell 向它写入提示的原因,例如,这就是你 希望在 shell 管道中发生的情况,所以内容意味着人类阅读以了解执行期间发生的事情并不会被吸入管道中的下一个程序。
如果您希望绕过该消息,请让“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.
【讨论】: