1
#!/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

Кроме того, хотя команда запускается в cron в OSX (10.8.5), я получаю следующее сообщение на мою локальную почту:

line 2: export: `=/Users/myname/Node/Development/tennistracker/config': not a valid identifier

Я читал, что это может быть вызвано пробелом вокруг = но определенно нет места

2 ответа2

4

Это связано с тем, что при установке переменной вы не должны ставить перед ней префикс $. Здесь $ 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
0

Хотя использование избегания «$» в качестве префикса переменной является правильным, есть и другое отличие. В системах OSX sh - это bash. То есть это оболочка типа Борна. Это можно проверить на Mac, просто выполнив

man sh

В Ubuntu sh - это тире. Dash - это оболочка типа Korn. Вы также можете увидеть это через страницу man или выполнив:

ls -al /bin/sh

Поэтому, если вы хотите, чтобы ваши скрипты работали одинаково в обеих системах, выполните:

#!/usr/bin/env bash

вместо обычного «ш».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .