#!/usr/bin/env sh
export $NODE_CONFIG_DIR=/Users/full/path/to/script/config
cd /Users/full/path/to/script
/usr/local/bin/node main
该脚本在 OSX 上本地运行(如果我调整本地环境的路径),但在 Ubuntu 上我得到:
./mtf_runner.sh: 2: export: : bad variable name
我想使用 cron 运行脚本并需要设置NODE_CONFIG_DIR
环境变量
此外,尽管该命令在 OSX (10.8.5) 上运行cron
,但我确实收到了发送到我本地邮件的以下内容:
line 2: export: `=/Users/myname/Node/Development/tennistracker/config': not a valid identifier
我读到过,这可能是由周围的空格引起的=
,但肯定没有空格
答案1
这是因为在设置变量时,不应在其前面加上 $。此处,在运行该行之前,$NODE_CONFIG_DIR 被扩展为空(因为未设置),这导致您运行export =/Users/full/path/to/script/config
。该脚本应为
#!/usr/bin/env sh
export NODE_CONFIG_DIR=/Users/full/path/to/script/config
cd /Users/full/path/to/script
/usr/local/bin/node main
答案2
虽然避免使用“$”作为变量前缀的做法是正确的,但还有另一个区别。在 OSX 系统上,“sh”是“bash”。也就是说,它是一个 Bourne 类型的 shell。在 Mac 上,只需执行以下命令即可验证这一点
man sh
在 Ubuntu 上,“sh” 是“dash”。Dash 是 Korn 类型的 shell。您也可以通过“man”页面或执行以下操作来查看它:
ls -al /bin/sh
因此,如果您想确保您的脚本在两个系统上运行相同,请执行以下操作:
#!/usr/bin/env bash
而不是正常的‘sh’。