У меня есть скрипт, который использует sh
shell. Я получаю сообщение об ошибке в строке, которая использует команду source
. Кажется, source
не входит в мою оболочку sh
.
Если я явно пытаюсь запустить source
из оболочки, я получаю:
sh: 1: source: not found
Должен ли я как-то установить "источник"? У меня неправильная версия sh
?
/bin/sh
- это обычно другая оболочка, пытающаяся имитировать оболочку. Многие дистрибутивы используют /bin/bash
для sh
, он поддерживает source
. В Ubuntu, однако, используется /bin/dash
который не поддерживает source
. Большинство снарядов используют .
вместо source
. Если вы не можете редактировать скрипт, попробуйте изменить оболочку, которая его запускает.
/bin/sh
вызывает /bin/dash
. Традиционно /bin/sh
называется /bin/bash
- это режим совместимости с sh.
В Bourne shell (sh) используйте. команда для источника файла
. filename
source
он не является строго sh
.
$ls -l `which sh`
/bin/sh -> dash
$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]
$ls -l `which sh`
/bin/sh -> bash
Тогда это будет ОК
Встроенный source
является башизмом. Напишите это просто как .
вместо.
например
. $FILE
# OR you may need to use a relative path (such as in an 'npm' script):
. ./$FILE
Команда source
встроена в некоторые оболочки. Если у вас есть script, он должен указать, какую оболочку использовать в первой строке, например:
#!/bin/bash
Эта проблема возникает из-за того, что jenkins Execute Shell запускает script через свой /bin/sh
Следовательно,/bin/sh не знает "источник"
Вам просто нужно добавить строку ниже в верхней части вашей командной строки в jenkins
#!/bin/bash
Я столкнулся с этой ошибкой, когда пытался вызвать исходную команду из командной оболочки #Jenkins.
source profile.txt
или source profile.properties
Замена для исходной команды заключается в использовании,
../profile.txt
../profile.txt
или ../profile.properties
../profile.properties
Примечание. Между двумя точками есть пробел (.)
source - встроенная команда bash, поэтому для выполнения команды источника вы можете войти в систему как Root.
sudo -s
source ./filename.sh
Я нашел в файле gnu Makefile на Ubuntu (где/bin/sh → bash)
Мне нужно было использовать., а также указать целевой script с префиксом./(см. пример ниже)
источник не работал в этом случае, не уверен, почему, поскольку он должен вызывать /bin/ bash..
Моя переменная окружения SHELL также установлена в/bin/bash
test:
$(shell . ./my_script)
Обратите внимание, что этот образец не содержит символ табуляции; пришлось отформатировать для обмена стеками.
Это может помочь вам, я получил эту ошибку, потому что я пытался перезагрузить my .profile
с помощью команды . .profile
и имел синтаксическую ошибку
Bourne shell (sh) использует PATH для поиска в source <file>
. Если файл, который вы пытаетесь использовать, не находится в вашем пути, вы получите файл ошибки, который не найден.
Попробуйте:
source ./<filename>
sh: 1: source: not found
не file not found
source
является «неправильной версией».source: not found
означает, что командаsource
была оценена правильно, но файл, который она должна была прочитать, не существует.