Выполнить bash script из URL

Скажем, у меня есть файл по URL-адресу "http://mywebsite.com/myscript.txt", который содержит script:

#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"

И я хотел бы запустить этот script, не сохраняя его прежде всего в файле. Как это сделать?

Теперь я видел синтаксис:

bash < <(curl -s http://mywebsite.com/myscript.txt)

Но это, похоже, не работает, как если бы я был сохранен в файле и затем выполнен. Например, readline не работает, а результат:

$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!

Аналогично, я пробовал:

curl -s http://mywebsite.com/myscript.txt | bash -s --

С теми же результатами.

Первоначально у меня было решение вроде:

timestamp=`date +%Y%m%d%H%M%S`
curl -s http://mywebsite.com/myscript.txt -o /tmp/.myscript.${timestamp}.tmp
bash /tmp/.myscript.${timestamp}.tmp
rm -f /tmp/.myscript.${timestamp}.tmp

Но это кажется неряшливым, и мне хотелось бы более элегантное решение.

Я знаю о проблемах безопасности, связанных с запуском оболочки script из URL-адреса, но теперь игнорируем все это.

Ответ 1

source <(curl -s http://mywebsite.com/myscript.txt)

должен это сделать. В качестве альтернативы, оставьте первоначальное перенаправление на вашем, которое перенаправляет стандартный ввод; bash принимает имя файла для выполнения только штрафа без перенаправления, а синтаксис <(command) предоставляет путь.

bash <(curl -s http://mywebsite.com/myscript.txt)

Может показаться более четким, если вы посмотрите на вывод echo <(cat /dev/null)

Ответ 2

Это способ выполнить удаленный script с передачей ему некоторых аргументов (arg1 arg2):

curl -s http://server/path/script.sh | bash /dev/stdin arg1 arg2

Ответ 3

Для bash, Bourne shell и рыбы:

curl -s http://server/path/script.sh | bash -s arg1 arg2

Флаг "-s" делает чтение оболочки из стандартного ввода.

Ответ 4

Использование wget, которое обычно входит в стандартную установку системы:

bash <(wget -qO- http://mywebsite.com/myscript.txt)

Ответ 5

Попробуйте просто:

bash <(curl -s http://mywebsite.com/myscript.txt)

Ответ 6

Вы также можете сделать это:

wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash

Ответ 7

Использование:

curl -s -L URL_TO_SCRIPT_HERE | bash

Например:

curl -s -L http://bitly/10hA8iC | bash

Ответ 8

Лучший способ сделать это -

curl http://domain/path/to/script.sh | bash -s arg1 arg2

что является небольшим изменением ответа на @user77115

Ответ 9

Я часто использую следующее достаточно

curl -s http://mywebsite.com/myscript.txt | sh

Но в старой системе (kernel2.4) он сталкивается с проблемами и может решить следующее: я пробовал много других, только следующие работы

curl -s http://mywebsite.com/myscript.txt -o a.sh && sh a.sh && rm -f a.sh

Примеры

$ curl -s someurl | sh
Starting to insert crontab
sh: _name}.sh: command not found
sh: line 208: syntax error near unexpected token `then'
sh: line 208: ` -eq 0 ]]; then'
$

Проблема может быть вызвана медленной сетью или слишком устаревшей версией bash, которая не может обрабатывать сеть медленно изящно

Однако следующее решение проблемы

$ curl -s someurl -o a.sh && sh a.sh && rm -f a.sh
Starting to insert crontab
Insert crontab entry is ok.
Insert crontab is done.
okay
$

Ответ 10

также:

curl -sL https://.... | sudo bash -

Ответ 11

Простое сочетание ответов amra и user77115:

wget -qO- https://raw.githubusercontent.com/lingtalfi/TheScientist/master/_bb_autoload/bbstart.sh | bash -s -- -v -v

Он выполняет bbstart.sh удаленно script, передавая ему параметры -v -v.

Ответ 12

В некоторых автоматических сценариях я использую следующую команду:

sh -c "$(curl -fsSL <URL>)"

Я рекомендую избегать выполнения скриптов непосредственно из URL. Вы должны быть уверены, что URL-адрес является безопасным и проверить содержимое скрипта перед выполнением, вы можете использовать контрольную сумму SHA256 для проверки файла перед выполнением.

Ответ 13

Этот способ хорош и условен:

17:04:[email protected]|~
qx>source <(curl -Ls http://192.168.80.154/cent74/just4Test) Lord Jesus Loves YOU
Remote script test...
Param size: 4

---------
17:19:[email protected]|/var/www/html/cent74
arch>cat just4Test
echo Remote script test...
echo Param size: $#

Ответ 14

bash | curl http://your.url.here/script.txt

фактический пример:

[email protected]:~$ bash | curl https://raw.githubusercontent.com/JPHACKER2k18/markwe/master/testapp.sh


Oh, wow im alive


[email protected]:~$