Programing

URL에서 bash 스크립트 실행

crosscheck 2020. 6. 2. 22:13
반응형

URL에서 bash 스크립트 실행


"http://mywebsite.com/myscript.txt"URL에 스크립트가 포함 된 파일이 있다고 가정 해 보겠습니다.

#!/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에서 셸 스크립트를 실행하는 것과 관련된 보안 문제를 알고 있지만 지금은이 모든 것을 무시하겠습니다.


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, Bourne shell 및 fish의 경우 :

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

플래그 "-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'
$

The problem may cause by network slow, or bash version too old that can't handle network slow gracefully

However, the following solves the problem

$ 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
$

Also:

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

Just combining amra and user77115's answers:

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

It executes the bbstart.sh distant script passing it the -v -v options.


Is some unattended scripts I use the following command:

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

I recommend to avoid executing scripts directly from URLs. You should be sure the URL is safe and check the content of the script before executing, you can use a SHA256 checksum to validate the file before executing.


This way is good and conventional:

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: $#

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

actual example:

juan@juan-MS-7808:~$ bash | curl https://raw.githubusercontent.com/JPHACKER2k18/markwe/master/testapp.sh


Oh, wow im alive


juan@juan-MS-7808:~$ 

참고URL : https://stackoverflow.com/questions/5735666/execute-bash-script-from-url

반응형