code-1839406_640


シェルスクリプト内でsudoコマンドを使用したいことがあり、使う方法を調べたところexpectコマンドを使用すればよいと分かりました。

使い方を防備録として記録します。





シェルスクリプトの中でsudoコマンドを使う方法


最初に結論からになりますが、以下のスクリプトでできます。
#!/bin/sh

PW="password"

expect -c "
set timeout 1
spawn sudo su
expect \"password:\"
send \"${PW}\n\"
expect \"$\"
exit 0
"

passwordには自分のパスワードを入力してください。






expectコマンドについて


簡単にexpectコマンドについて紹介します。

expectは対話を自動化するコマンドです。

expectコマンドを使おうとして、『expect コマンドが見つかりません』というエラーが出た場合は、以下のコマンドでインストールしましょう。
apt-get install expect

上記のスクリプトでは以下の5つのexpectコマンドを使用しています。


コマンド説明
set timeoutタイムアウトの秒数を指定する。
今回の場合、「password:」という文字列が出現しない場合、1秒後にタイムアウトする。
expectマシンからの応答を読み取り、パターンマッチした場合にexpectより下のコマンドを実行する。
今回の場合、sudoコマンドを実行すると「password:」という文字列が現れるので、出現後にパスワードを送信するために使用している。
spawnexpect内でプロセスを生成するコマンド。
今回の場合、sudoコマンドを実行している。
sendマシンに文字列を送信するコマンド。
今回の場合、sudoコマンドで必要なパスワードを送信している。
exitexpectの処理を終了させる。
数値を指定することで返り値として返すことができる。


この5つのコマンドを使いこなせば、シェルスクリプト内でsudoを使う他に、様々なスクリプトを自動化することができます。




最後に


シェルスクリプトの中でsudoコマンドを使用するという特殊なケースはなかなかないかもしれませんが、誰かの参考になれば幸いです。

この記事を見ている人の中でもっといい方法を知っている方がいましたらコメントで教えてください。