Подтвердить что ты не робот

Исходная команда не найдена в sh shell

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

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

sh: 1: source: not found

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

4b9b3361

Ответ 1

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

Ответ 2

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

. filename

Ответ 3

$ls -l `which sh`
/bin/sh -> dash

$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]

$ls -l `which sh`
/bin/sh -> bash

Тогда это будет ОК

Ответ 4

Встроенный source является башизмом. Напишите это просто как . вместо.

например

. $FILE

# OR you may need to use a relative path (such as in an 'npm' script):

. ./$FILE

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

Ответ 5

Команда source встроена в некоторые оболочки. Если у вас есть script, он должен указать, какую оболочку использовать в первой строке, например:

#!/bin/bash

Ответ 6

Эта проблема возникает из-за того, что jenkins Execute Shell запускает script через свой /bin/sh

Следовательно,/bin/sh не знает "источник"

Вам просто нужно добавить строку ниже в верхней части вашей командной строки в jenkins

#!/bin/bash

Ответ 7

Я нашел в файле gnu Makefile на Ubuntu (где/bin/sh → bash)

Мне нужно было использовать., а также указать целевой script с префиксом./(см. пример ниже)

источник не работал в этом случае, не уверен, почему, поскольку он должен вызывать /bin/ bash..

Моя переменная окружения SHELL также установлена ​​в/bin/bash

test:
    $(shell . ./my_script)

Обратите внимание, что этот образец не содержит символ табуляции; пришлось отформатировать для обмена стеками.

Ответ 8

source - встроенная команда bash, поэтому для выполнения команды источника вы можете войти в систему как Root.

sudo -s source ./filename.sh

Ответ 9

Я столкнулся с этой ошибкой, когда пытался вызвать исходную команду из командной оболочки #Jenkins.

source profile.txt или source profile.properties

Замена для исходной команды заключается в использовании,

../profile.txt ../profile.txt или ../profile.properties ../profile.properties

Примечание. Между двумя точками есть пробел (.)

Ответ 10

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

Попробуйте:

source ./<filename>

Ответ 11

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