ShellScript
Bash
Zsh
Linux

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

はじめに

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を調整すれば他のコマンドでも使えると思います。