まずはfifoプラグインのおさらい。以下のようにして使う。echo -eを使うことで複数のコマンドを1行でfifoパイプできる。
$ echo -e "core.weechat */plugin reload logger" > ~/.weechat/weechat_fifo_17921
11:46:35 weechat | Plugin "logger" unloaded 11:46:35 weechat | Plugin "logger" loaded
$ echo -e "core.weechat */plugin unload logger\ncore.weechat */plugin load logger" > ~/.weechat/weechat_fifo_17921
11:47:58 weechat | Plugin "logger" unloaded 11:47:58 weechat | Plugin "logger" loaded
本家のページに以下のシェルスクリプトがfifoパイプを使う例として挙げられている。
$ cat auto_weechat_command #!/bin/sh if [ $# -eq 1 ]; then for fifo in ~/.weechat/weechat_fifo_* do echo -e "$1" >$fifo done fi
上の2つの例で用いた引数をこのシェルスクリプトに与えると以下のようになる。両方とも失敗する。
$ ./auto_weechat_command "core.weechat */plugin unload logger\ncore.weechat */plugin load logger"
12:00:44 weechat =!= | fifo: error, buffer not found for pipe data 12:00:44 weechat =!= | Error: unable to load plugin "/usr/local/lib/weechat/plugins/logger.so": a plugin with same name already exists
$ ./auto_weechat_command "core.weechat */plugin reload logger"
12:00:46 weechat =!= | fifo: error, buffer not found for pipe data
パイプされた内容をチェックするために、上のスクリプトの$fifoをtest.txtに書き換えて、test.txtの内容を表示すると以下のようになる。これは意図した出力ではない。
$ ./auto_weechat_command "core.weechat */plugin unload logger\ncore.weechat */plugin load logger" $ cat test.txt -e core.weechat */plugin unload logger core.weechat */plugin load logger $ ./auto_weechat_command "core.weechat */plugin reload logger" $ cat test.txt -e core.weechat */plugin reload logger
上のようになる理由はbin/shの中で起動されるechoはcsh組み込みコマンドのechoであり、上の例のbashで起動していた/bin/echoとは異なるからである。そこで以下のように書き換える。
$ cat auto_weechat_command #!/bin/sh if [ $# -eq 1 ]; then for fifo in ~/.weechat/weechat_fifo_* do echo "$1" >$fifo done fi
このように書き換えたことで期待通りに動くようになる。
$ ./auto_weechat_command "core.weechat */plugin unload logger\ncore.weechat */plugin load logger"
13:58:11 weechat | Plugin "logger" unloaded 13:58:11 weechat | Plugin "logger" loaded
$ ./auto_weechat_command "core.weechat */plugin reload logger"
13:58:19 weechat | Plugin "logger" unloaded 13:58:19 weechat | Plugin "logger" loaded