masはMacでApp Storeのアプリを コマンドラインからインストールすることが出来るコマンドです。
このコマンドをターミナルマルチプレクサのtmux
の中から
実行するとそのままでは正しく動かないので注意が必要です。
mas
masについて詳しくはこちら。
Homebrewで
$ brew install mas
で入れられます。
$ mas list
495705418 Volume Reset
497799835 Xcode
430173763 Degrees
409183694 Keynote
408981434 iMovie
458998390 Farensius
992115977 Image2Icon
487505968 Photobricks
451732904 App Language Chooser
568494494 Pocket
560851219 Should I Sleep
409201541 Pages
539883307 LINE
682658836 GarageBand
495945638 Wake Up Time
409203825 Numbers
とかするとApp Storeからインストールしたアプリケーション一覧を示してくれます。 (左の番号はApp StoreでのアプリのID。)
mas in tmux
これをtmuxを立ち上げてその中で実行すると、
$ mas list
No installed apps found
と何も見つけられません。
これはMacではサービスがそれぞれ名前空間の中に存在する様になっていますが、 そのサービスが居る名前空間とその下のものにしかアクセス出来ないようになっています。 masはApp Storeのサービスを使いますが、 tmuxが立ち上げるサービスが別の低いレベルで作られるため、 tmux内からだとmasでApp Storeの情報にたどり着けない、というが問題な様です。
同様にtmuxでOSのクリップボードにアクセスしようとpbpaste
やpbcopy
を
使おうとすると機能しないこともあるとのこと。
reattach-to-user-namespace
この問題を解決してくれるのが
reattach-to-user-namespace
と言うコマンドです。
Homebrewでインストールできて、
$ brew install reattach-to-user-namespace
で入ります。
使い方はreattach-to-user-namespace
に使いたいコマンドを引数としてそのまま
渡せばOK。
$ reattach-to-user-namespace mas list
とすればtmux内からでもきちんとApp Storeのアプリの情報が取れます。
必要であれば.bashrc等に
if [ "$TMUX" != "" ];then
alias mas="reattach-to-user-namespace mas"
fi
とかしておけばそのままmas
で使えます。
(pbcopy
等も同様。)
GNU screenでも同様の問題が起こることもあるみたいですが、 今使ってるものでは起こっていません。 Homebrewでソースからコンパイルして入れてるわけですが、 あててるパッチはUTF関連の物と一部コンパイル時に出るwarningを抑える様なものだけなので これに関するパッチは入ってないとは思うのですが。
元々入ってる物にはこれも含めて色々なパッチがあたっているみたいです。
Homebrew-fileのアップデート
元々これはHomebrew-fileのIssueで教えてもらったことだったんですが、 これに関するアップデートを入れました。
brew-file
を使ってinit
等でリストを作る際
App Storeのアプリリストを作るのにmas
を使いますが、
tmux内で実行された場合にはreattach-to-user-namespace
を使ってコマンドをラップする様にしました。
reattach-to-user-namespace
がインストールされてない場合には
自動でインストールするようにもなっています。
なので特に気にせずそのまま使えます。
これまでtmux内で実行してた人はApp Storeのリストに
No installed apps found
という文字が出て、
それがエラーの原因になってたりしたかもしれません。
何も無い時にこれがリストに載ってしまうのは単なるバグなのでこれも治しました。
Keynote等、元から入ってる物も含まれるので
基本何も無い、と言う状態は余りないとは思いますが。