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 不支持 &lt;(...) 语法(因为这些是该行中唯一的 ()。也许您的交互式 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 脚本时无效

GMail API:脚本在手动运行时有效,但在触发时无效

我在 index.html 中指向 manifest.json 的链接在我运行反应脚本“yarn start”时有效,但在我运行“python3 manage.py runserver”时无效

程序在 C++ Tutor 中执行时有效,但在其他任何地方都无效

在启动的 telnet 会话中使用期望脚本