Выполнить скрипт 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, но давайте проигнорируем все это прямо сейчас.
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 arg2Bourne shell также поддерживает "- s " для чтения из stdin.
используя
wget, который обычно является частью установки системы по умолчанию:bash <(wget -qO- 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 $
просто комбинируя ответы 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