Как выполнить удаленный сценарий bash с параметрами? [Дубликат]

Это означает, что ваш код использовал ссылочную переменную объекта, которая была установлена ​​в нуль (т. е. она не ссылалась на экземпляр фактического объекта).

Чтобы предотвратить ошибку, объекты, которые могут быть пустыми, должны быть протестированы для null перед тем, как использовать.

if (myvar != null)
{
    // Go ahead and use myvar
    myvar.property = ...
}
else
{
    // Whoops! myvar is null and cannot be used without first
    // assigning it to an instance reference
    // Attempting to use myvar here will result in NullReferenceException
}
31
задан Daniel R 10 January 2011 в 02:06
поделиться

3 ответа

try

curl http://foo.com/script.sh | bash -s arg1 arg2
Руководство пользователя

bash говорит:

Если присутствует опция -s или нет аргументов после обработки опций, тогда команды считываются из стандартный ввод. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки.

57
ответ дан jinowolski 26 August 2018 в 19:28
поделиться

Другие альтернативы:

curl http://foo.com/script.sh | bash /dev/stdin arguments
bash <( curl http://foo.com/script.sh ) arguments
13
ответ дан ephemient 26 August 2018 в 19:28
поделиться

Чтобы немного улучшить ответ jinowolski , вы должны использовать:

curl http://example.com/script.sh | bash -s -- arg1 arg2

Обратите внимание на две дефисы (-), которые сообщают bash, чтобы не обрабатывать что-либо после него как аргументы bash.

Таким образом, он будет работать с любыми аргументами, например:

curl -L http://bootstrap.saltstack.org | bash -s -- -M -N stable

Это, конечно, будет работать с любыми входами через stdin, а не только curl, так что вы можете подтвердить, что он работает с простым вводом скрипта BASH через echo:

echo 'i=1; for a in $@; do echo "$i = $a"; i=$((i+1)); done' | \
bash -s -- -a1 -a2 -a3 --long some_text

Дает вам выход

1 = -a1
2 = -a2
3 = -a3
4 = --long
5 = some_text
42
ответ дан Janne Enberg 26 August 2018 в 19:28
поделиться