bash 脚本在启动时有效,在终端中无效
Posted
技术标签:
【中文标题】bash 脚本在启动时有效,在终端中无效【英文标题】:bash script works on bootup, doesn't in terminal 【发布时间】:2013-01-08 04:34:46 【问题描述】:我正在 Amazon ec2 中创建一个服务器,并将一个 bash 脚本作为用户数据传递给它,该脚本在服务器首次启动时运行。它包括一个命令,可以使用答案given here 为用户添加一行到 crontab。
directory="/home/intahwebz/current/tools/amazon/"
command="cd $directory && sh backupSQLToS3.sh"
job="15 1 */2 * * $command"
cat <(fgrep -i -v "$command" <(crontab -u intahwebz -l)) <(echo "$job") | crontab -u intahwebz -
此脚本在启动期间似乎可以正常工作,因为它不显示错误消息并且 cronjob 已安装在 crotab 中。
不过,我还希望脚本在服务器升级期间运行。尝试从命令行运行脚本会报错:
installCrontab.sh: line 14: syntax error near unexpected token `('
installCrontab.sh: line 14: `cat <(fgrep -i -v "$command" <(crontab -u intahwebz -l)) <(echo "$job") | crontab -u intahwebz -'
我需要什么来修复这个错误?
【问题讨论】:
听起来你的 shell 不支持<(...)
语法(因为这些是该行中唯一的 (
)。也许您的交互式 shell 与在启动时运行脚本的 shell 不同?
【参考方案1】:
您似乎正在使用 bourne shell (/bin/sh
) 来执行 bash 脚本。尝试使用bash
而不是sh
。
【讨论】:
我将脚本称为“bash installCrontab.sh”,它的顶部有 #!/bin/bash,所以我很确定它使用的是 Bash。【参考方案2】:你的方法非常适合我:
$ whoami
test
$ echo $SHELL
/bin/bash
$ command="cd $directory && sh backupSQLToS3.sh"
$ job="15 1 */2 * * $command"
$ crontab -l
$ cat <(fgrep -i -v "$command" <(crontab -u test -l)) <(echo "$job") | crontab -u test -
$ crontab -l
15 1 */2 * * cd && sh backupSQLToS3.sh
我错过了设置“目录”变量,但您的代码对我来说很好。
【讨论】:
谢谢 - 当我从命令行执行此操作时,它对我有用,因此我将所有内容复制并粘贴到一个新的脚本文件中,它也可以在那里工作。比较这两个脚本表明我在第一个 中间有一个额外的空间以上是关于bash 脚本在启动时有效,在终端中无效的主要内容,如果未能解决你的问题,请参考以下文章
Json String Parsing 在从 MSDOS 运行时有效,但在 Windows 上的 Ubuntu 上的 Bash 中无效 [重复]
R autoplot 在逐行运行时有效,但在 source-ing R 脚本时无效
我在 index.html 中指向 manifest.json 的链接在我运行反应脚本“yarn start”时有效,但在我运行“python3 manage.py runserver”时无效