Это потому, что, как заявили комментаторы, переменная PATH
внутри оболочки, выполняющей скрипт, не включает каталог, содержащий исполняемый файл matlab
.
При использовании имени команды, такого как «matlab», ваша оболочка просматривает каждый каталог в PATH
по порядку, ища файл, содержащий исполняемый файл с именем «matlab».
Не вдаваясь в излишние подробности, то PATH
определяется скорлупа быть вызван. Когда вы выполняете bash
, он объединяет глобальные настройки для базовых каталогов, которые должны быть в PATH
с любыми настройками в вашем ~/.bashrc
, которые изменяют PATH
.
Скорее всего, вы не используете свой скрипт в оболочке, где PATH
содержит каталог matlab
. Чтобы проверить это, вы можете предпринять следующие шаги:
- Run
which matlab
. Это покажет вам путь к исполняемому файлу matlab.
- Пробег
echo "$PATH"
. Это покажет вам текущие настройки PATH
. Обратите внимание, что каталог из which matlab
включен в список разделенных двоеточиями.
- Добавьте строку в начало вашего скрипта, который делает
echo "$PATH"
. Обратите внимание, что каталог от which matlab
не включен.
Для решения этой проблемы убедитесь, что ваш скрипт выполнен в оболочке, которая имеет нужный каталог в PATH
. Вы можете сделать это несколько способов, но два наиболее рекомендуемыми бы
Добавить хижину строку в начале вашего скрипта. Предполагая, что вы хотите запустить его с помощью bash
, сделайте #!/bin/bash
или каким бы ни был путь к вашему интерпретатору bash. Линия shebang на самом деле не полностью стандартизирована POSIX, поэтому BSD-производные системы, такие как OSX, с удовольствием обрабатывают несколько аргументов исполняемого файла shebanged, в то время как системы Linux передают не более одного аргумента. Несмотря на это, shebang - это простой и простой способ документировать, что должно использоваться для выполнения сценария, поэтому это хорошее решение.
Явного вызвать скрипт с оболочкой в качестве интерпретатора, как в bash myscript.sh
или tcsh myscript.sh
или даже sh myscript.sh
Это не является несовместимым с использованием притоном линии, и использования как является обычной практикой. Я считаю, что оболочкой по умолчанию на OSX всегда является bash, поэтому вы должны начать с этого.
Если эти инструкции не помогают, то вам придется копать глубже, чтобы выяснить, почему или как PATH
в настоящее время изменяются между контекстом вызова и внутренним контекстом сценария. В конечном счете, это почти наверняка является источником вашей проблемы.
Сценарий оболочки является исполняемым (я выполнил его с эхо MATLAB). Что такое линия shebang? Единственное содержимое моего файла - «matlab» – megavore
Если по строке shebang вы подразумеваете добавление #!/Bin/sh в начало скрипта, я просто сделал это, но это не имело никакого значения. – megavore
попробуйте заменить matlab на/full/path/to/matlab –