2017-01-03 2 views
0

Я использую оболочку sh из-за ограничения недоступности оболочки bash. Ниже фрагмент кода работает нормально на оболочке bash, но при запуске на sh возникает ошибка.Ошибка при использовании сценария sh

if [[ -n $(grep -i "${RSA_BACKUP[iter]}: OK" $BACKUP_HASH_TRACK) ]] 

error: /etc/backup_infra.sh: line 79: syntax error: bad substitution

+0

Каковы значения переменных, которые вы используете? Без этих правильных значений ваш вход не поддается проверке и поэтому не может быть обеспечен надлежащим решением. – Inian

+3

Есть два элемента вашего кода, которые являются базовыми и не будут работать в оболочке POSIX (предполагается, что ваш 'sh' - это POSIX, который вы не подтвердили). Первый - '[['. Вместо этого перепишите сценарий для использования традиционных тестов. 'man test' для получения подробной информации о том, что доступно на вашей платформе. Второй - использование массива. Bash поддерживает массивы. В оболочке POSIX нет. Вам нужно будет предоставить больший контекст в вашем вопросе, если вы хотите, чтобы вы помогали в кодировании своего пути. – ghoti

+0

@ghoti: Полностью в согласии с вами. Поскольку вы видели, что сообщение OP не было поддающимся проверке, мы понятия не имели, каково его требование и каковы его значения для переменных (я даже разместил комментарий, запрашивающий информацию), но наименьшее предложение/помощь с этой информацией I может дать рекомендацию использовать [, который я сделал так – Inian

ответ

0

Сценарий, который вы пытаетесь запустить требует Bash (по крайней мере версии 4.0). Это связано с тем, что он использует

  1. Ассоциативные массивы (${RSA_BACKUP[iter]}).
  2. [[ ... ]] вместо [ ... ].

Многие оболочки используют синтаксис [[ ... ]] в настоящее время, а некоторые, как bash, способны понять его, даже если они вызываются в качестве sh. Однако dash и ash снарядов, однако, нет.

Но основная проблема - ассоциативный массив. Проблема вы столкнулись в настоящее время является либо

  1. полностью переписать сценарий, чтобы избежать как массивы и ассоциативные массивы или
  2. организовать с установкой bash, для которого этот сценарий был написан.
Смежные вопросы