исходная команда не найдена в оболочке sh


у меня есть скрипт, который использует sh оболочки. Я получаю ошибку в строке, которая использует . Кажется source не входит в мои sh оболочки.

если я явно пытаюсь запустить source из консоли я получаю:

sh: 1: source: not found

должен ли я как-то установить "источник"? У меня есть неправильная версия sh?

10 85

10 ответов:

/bin/sh обычно какая-то другая оболочка пытается имитировать оболочку. Многие дистрибутивы используют /bin/bash на sh, Он поддерживает source. На Ubuntu, хотя, /bin/dash используется, который не поддерживает source. Большинство оболочек используют . вместо source. Если вы не можете изменить сценарий, попробуйте изменить оболочку, которая его запускает.

в Bourne shell (sh), используйте . команда для исходного файла

. filename
$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

https://wiki.ubuntu.com/DashAsBinSh#source

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

Bourne shell (sh) использует путь, чтобы найти в source <file>. Если файл, который вы пытаетесь создать, не находится в вашем пути, вы получаете сообщение об ошибке "файл не найден".

попробуй:

source ./<filename>

Это может помочь вам, я получаю эту ошибку, потому что я пытался перезарядить мой .profile с помощью команды . .profile и у него была синтаксическая ошибка