Выполнить 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]:~$