Help us understand the problem. What is going on with this article?

Karabiner-Elements の shell_command は /usr/local/bin に PATH が通っていない

Karabiner-Elements の Complex modifications では shell_command という項目があり、キー入力に対してコマンドを実行するような設定を記述することができる。

to event definition - karabiner.json Reference Manual

便利そうなのでさっそく試してみるも、なかなかうまく動かずに苦戦した。
設定ファイルを書き換えるたびに Karabiner-Elements を再起動しないといけなかったり、コマンド実行時のエラーを 2>$HOME/error.log みたくファイルに吐き出さないとデバッグできなかったりと、試行錯誤するのも楽ではない。

試行錯誤する中で少しハマったのが、 /usr/local/bin に PATH が通っていない件。

試しに、shell_command の実行時にどんな環境変数が設定されているのかを確認してみる。

{
    "type": "basic",
    "from": {
        "key_code": "open_bracket",
        "modifiers": {
            "mandatory": [
                "left_control",
                "left_shift"
            ]
        }
    },
    "to": {
        "shell_command": "env > $HOME/env.txt"
    }
}

このような割り当てを追加する設定を追記して、Karabiner-Elements を再起動する。

この例では control + shift + [ で環境変数がファイルに書き出される設定なので、そのキーを押してファイルを確認する。

~/env.txt
SHELL=/bin/zsh
USER=hoto
PATH=/usr/bin:/bin:/usr/sbin:/sbin
PWD=/
HOME=/Users/hoto

(他にもいくつかあったが代表的なもののみを表示)

これをみると /usr/local/bin に PATH が通っていないことがわかる。
このままだと Homebrew で入れたコマンドなどを使う場合はフルパスで指定しないと動かない。

"to": {
    "shell_command": "PATH=$PATH:/usr/local/bin oysttyer 'foooooooo!'"
}

最終的にはこんな感じで PATH を通すことにした。

あまりスマートな書き方ではない気がするので、もっといい方法があったら教えて欲しい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away