Edited at

対話的コマンドの自動実行


はじめに

linuxでbluetoothを使う時に用いるbluetoothctlというコマンドがあります。このコマンドは対話的コマンドです。使うにはコントローラの電源を入れてデバイスと接続し閉じるということを一々入力しなければなりません。辛いです。なので、自動化しようと試みネットで調べexpectというコマンドを見つけました。しかし、このためだけに新たなパッケージをインストールするのは、嫌だったので色々試しました。


スクリプト

関数の中でechoコマンドとsleepコマンドを交互に実行し、パイプで流せば出来ました。


bash

function connect() {

echo 'power on' \
&& sleep 1 \
&& echo 'connect AA:BB:CC:DD:EE:FF' \
&& sleep 3 \
&& echo 'quit'
}

connect | bluetoothctl



zsh

() {

echo 'power on' \
&& sleep 1 \
&& echo 'connect AA:BB:CC:DD:EE:FF' \
&& sleep 3 \
&& echo 'quit'
} | bluetoothctl

sleepを調整すれば他のコマンドでも使えると思います。