Выполнить скрипт bash из URL



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



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


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



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



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


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



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

549   13  

13 ответов:

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

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

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

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

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

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

для bash:

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

Bourne shell также поддерживает "- s " для чтения из stdin.

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

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

попробуйте так:

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

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

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

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

curl -s -L URL_TO_SCRIPT_HERE | bash

например:

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

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

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

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

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

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
$

также:

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

просто комбинируя ответы amra и user77115:

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

он выполняет bbstart.sh удаленный скрипт передает ему параметры-v-V.

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

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

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

этот способ хорош и обычных:

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

---------
17:19:31@node7|/var/www/html/cent74
arch>cat just4Test
echo Remote script test...
echo Param size: $#

Comments

    Ничего не найдено.