每次我使用“at”命令时,都会收到以下消息:
warning: commands will be executed using /bin/sh
它试图警告我什么?更重要的是,如何关闭警告?
答案 0 :(得分:12)
对于我们这些不使用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!如果你习惯使用不同的外壳,很容易犯这些错误,你有责任记住做正确的事情。
答案 1 :(得分:5)
除了烦人之外,警告是否有任何有害影响?该手册页没有提及任何关闭它的方法,因此我认为如果不从源代码重建 ,就不能阻止它被发射。
现在,如果您不想看到它,可以在[时间] 2&gt; / dev / null 使用将其发送到遗忘状态,但不幸的是, at&gt; ; 提示由于某种原因打印到STDERR(一个错误,IMO - 他们真的应该去STDOUT),所以它们也被隐藏了。有可能处理一些shell管道,这将消除警告,而不会吃掉提示,但a)我的尝试( at [time] 2&gt;&amp; 1 | grep -v warning )不起作用b)即使你能找到一个有效的组合,它也不适合混叠(因为时间是在中间而不是在结尾),所以你需要输入它每次使用它时都要完整,或者在 周围写一个包装脚本来处理它。
所以,除非它引起实际问题,否则我说你最好不要像我们其他人那样忽略警告。
答案 2 :(得分:3)
它提醒您命令将由标准Bourne Shell运行,这意味着您的命令语法必须与该shell兼容。 (“有趣”的事实:我刚注意到它会警告你即使你当前的shell 是 /bin/sh
。必须是一个bug。)
删除消息的“简单黑客”只是删除输出的第一行。这可以通过重新定义at
命令以方便的方式完成:
at() { /usr/bin/at $@ 2>&1 | tail -n +2; }
您可以将其添加到包含其他shell别名(~/.bashrc
,~/.zshrc
或您的shell的等效项)的文件中。
注意:上面“hack”中的tail
命令也会在编写内联命令时删除at>
- 前缀。可能不是一个交易破坏者,但需要注意的事情。
答案 3 :(得分:2)
如果您希望绕过该消息,请'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.
答案 4 :(得分:0)
at.c
的源代码(来自Debian,版本为3.1.20-3)包含答案:
/ * POSIX.2允许由用户的SHELL环境指定的shell 变量,来自用户密码数据库条目的登录外壳,
或/ bin / sh作为处理作业的命令解释器。
它还允许打印警告诊断。因为
可能的差异,我们总是输出诊断信息。 * /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
或~/.profile
中的交互式shell):
at() {
/usr/bin/at "$@" 2>&1 | fgrep -v 'warning: commands will be executed using /bin/sh'
}
在那之后,它不会以特定警告警告您(而其他警告/错误消息仍会到达您)