Ошибка «неопределенная переменная» в сценарии оболочки в Sun Grid Engine

1271
Eamorr

У меня есть следующий скрипт отправки Sun Grid Engine:

#!/bin/sh # sun grid engine cluster  # use current working directory #$ -cwd  # merge error output into standard output stream #$ -j yes #$ -o generate_databases.log  # request to cpu number #$ -pe make 4  currentdir=`/bin/pwd` echo "current working directory: $currentdir" 

И вот мой вывод

/home/eamorr/sge currentdir: Undefined variable. 

Как видите, переменная currentdir возвращает неопределенное значение.

Как это исправить?

1
Вы уверены, что `/ bin / pwd` правильно? Работает ли это при вызове вручную? Bobby 12 лет назад 0
Тот факт, что скрипт выводит текущий каталог (`/ home / eamorr / sge`), предполагает, что он находит` pwd`. И, даже если нет, это не должно вызывать эту ошибку; `foo = \` / no / such / command \ `` все равно должен либо присвоить пустую строку `foo`, либо прервать выполнение сценария. Scott 12 лет назад 0

1 ответ на вопрос

1
Stefan Seidel

Вы уверены, что это Bash? Оператор с обратной связью не является переносимым. Есть несколько способов (возможно) исправить это:

  1. используйте #!/bin/bashв первой строке, чтобы убедиться, что это bash, а не что-нибудь еще
  2. избегать кавычек: currentdir=$(pwd)илиcurrentdir=$(/bin/pwd)
  3. или даже проще currentdir=$PWD
Привет, спасибо за комментарий. Я не уверен, что это bash ... Я попытался `currentdir = $ (/ bin / pwd)`, но он вернул `Недопустимое имя переменной` Eamorr 12 лет назад 0
Так что это скорее всего не bash. Тогда попробуйте вариант (1), но на самом деле он, вероятно, использует собственную оболочку SUN, которая ведет себя совершенно иначе, чем другие известные оболочки. Stefan Seidel 12 лет назад 0

Похожие вопросы