17

每次我使用“at”命令时,都会收到以下消息:

warning: commands will be executed using /bin/sh

它想警告我什么?更重要的是,如何关闭警告?

4

4 回答 4

13

它对我们这些不使用 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,很容易犯这些错误,记住做正确的事情是您的责任。

于 2008-10-08T03:38:30.427 回答
5

除了烦人之外,警告是否有任何有害影响?手册页没有提到任何关闭它的方法,所以我认为你不能在不从源代码重建你情况下阻止它发出。

现在,如果您不想看到它,您可以使用at [time] 2>/dev/null它来将其发送到遗忘,但不幸的at>是,由于某种原因,提示会打印到 STDERR(一个错误,IMO - 他们真的应该去 STDOUT),所以他们'也被这个隐藏了。

可能会处理一些外壳管道,这将消除警告而不吃提示,但是

  1. 我在这个 ( ) 上的尝试at [time] 2>&1 | grep -v warning不起作用并且
  2. 即使你能找到一个有效的组合,它也不适合混叠(因为时间在中间而不是在最后),所以你需要在每次使用它时完整输入它或否则编写一个包装脚本at来处理它。

因此,除非它引起实际问题,否则我会说您最好像我们其他人一样忽略警告。

于 2008-10-08T12:41:48.333 回答
3

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'
}

之后,它不会向您发出特定警告(而其他警告/错误消息仍会发送给您)

于 2019-03-08T22:03:55.907 回答
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.
于 2008-10-08T03:41:23.510 回答