我正在尝试使用 运行作业at
,并且我有一个bash
脚本(我确实有#!/bin/bash
作为第一行),但是由于使用[[
和]]
在脚本中该作业失败,我在mail
它生成的内容中看到以下内容:
=sh: 58: [[: not found
=sh: 58: [[: not found
=sh: 58: [[: not found
=sh: 58: [[: not found
=sh: 58: [[: not found
Run Code Online (Sandbox Code Playgroud)
这/bin/sh
是指向 的链接dash
,但是如果我#!/bin/bash
在脚本中使用了 she-bang 行- 不应该使用它bash
吗?
PS如果我只是在我的bash
提示下运行脚本- 它可以正常工作,没有错误(并且它具有可执行权限)。
- 编辑 -
我正在添加这样的工作:
$ at 1:30 am today -f /path/to/my/script.sh
$ which bash
/bin/bash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 30 2012 /bin/sh -> dash
$ uname -a
Linux server1 3.5.0-46-generic #70~precise1-Ubuntu SMP Thu Jan 9 23:55:12 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
POSIX 定义at可以使用SHELL环境变量作为 的替代/bin/sh
,但没有限制它:
贝壳
确定用于调用 at-job 的命令解释器的名称。如果变量未设置或为空,则应使用 sh。如果将其设置为 sh 名称以外的值,则实现应执行以下操作之一:使用该外壳;使用 sh; 使用用户数据库中的登录 shell;或任何前述伴随着选择的警告诊断。
at 的某些实现可以使您能够选择要运行的-k
shell,例如Korn shell-c
和 C-shell。并不是所有的实现都at
允许SHELL
替代sh
。所以 POSIX 还保证使用另一个 shell 的可靠方法是显式调用它:
某些实现不允许使用 SHELL 替换不同的 shell。例如,System V 系统使用 /etc/passwd 中用户的登录 shell 值。要可靠地选择另一个命令解释器,用户必须将其作为脚本的一部分包含在内,例如:
1800 美元
myshell 脚本
EOT
工作......在...... $
bash
用于运行脚本的一种简单方法是bash script
作为 stdin传递给at
:
echo "bash /path/to/yourscript" | at <time>
Run Code Online (Sandbox Code Playgroud)
例子:
echo "bash /path/to/yourscript" | at 16:30
Run Code Online (Sandbox Code Playgroud)
将于bash /path/to/yourscript
今天 16:30运行。