1. ホーム
  2. linux

[解決済み】URLからbashスクリプトを実行する。

2022-04-16 13:43:01

質問

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からシェルスクリプトを実行することに関するセキュリティの問題は承知していますが、今はすべて無視しましょう。

解決方法は?

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

を実行する必要があります。 あるいは、標準入力をリダイレクトする最初のリダイレクトを省いてください。 bash はファイル名を受け取ってリダイレクトなしでうまく実行されますし <(command) の構文は、パスを提供します。

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

の出力を見ていただくとわかりやすいかもしれません。 echo <(cat /dev/null)