2017-01-18 5 views
0

У меня есть Баш скрипт, содержащий следующую строку:Bad подмена

dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

Это работает отлично на OSX.

Однако, когда я переместить его переместить скрипт на контейнер Докер под управлением Debian, он не будет работать на указанной выше линии с этим сообщением:

Bad substitution 

Любая идея, почему это происходит?

+2

Что притон по сценарию? '#!/bin/sh' не bash. (Даже когда '/ bin/sh' реализуется как символическая ссылка на bash, он работает в режиме POSIX, отключая многие расширения до стандарта). Если вам нужен полный синтаксис bash, ваш shebang * должен * быть '#!/Bin/bash'. –

+1

(Аналогично, запуск сценария с помощью 'sh yourscript' будет интерпретировать его с помощью оболочки, гарантированной только для обеспечения функциональности POSIX-базовой линии, даже если этот скрипт начинается с' #!/Bin/bash'). –

ответ

1

Вы используете dash shell, а не bash.

Проверить с: ls -la /proc/$$/exe

+0

'ls -la/proc/$$/exe' имеет результат ' lrwxrwxrwx 1 корень root 0 Янв. 16 17:20/proc/6/exe ->/bin/bash', поэтому я не использую 'dash ' – octavian

+0

Если вы используете bash, то самое безопасное для этого было бы проверить, называется ли сценарий автономным или источником: – Shoham

+0

, если [-z" $ {BASH_SOURCE} "]; затем SCRIPTPATH ​​= $ 0 else SCRIPTPATH ​​= $ {BASH_SOURCE [0]} fi – Shoham

 Смежные вопросы

  • Нет связанных вопросов^_^