尽管我有一个 #!/bin/bash,但工作似乎正在使用 /bin/sh 运行

vyo*_*yom 7 bash at

我正在尝试使用 运行作业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)

cuo*_*glm 5

POSIX 定义at可以使用SHELL环境变量作为 的替代/bin/sh,但没有限制它:

贝壳

确定用于调用 at-job 的命令解释器的名称。如果变量未设置或为空,则应使用 sh。如果将其设置为 sh 名称以外的值,则实现应执行以下操作之一:使用该外壳;使用 sh; 使用用户数据库中的登录 shell;或任何前述伴随着选择的警告诊断。

at 的某些实现可以使您能够选择要运行的-kshell,例如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运行。