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