bashのtestコマンドで少しハマった
test([]) で -a オプションの両側でコマンドの実行結果を利用しようバッククォート呼び出しをしたら失敗した。 結局 test コマンドを && で繋いだ。
背景
dotfile類をgitで管理していて複数環境で読み込んでいる。 同一の設定を利用したい。問題が2つ。
- 実際に存在しない PATH を読み込んでしまっている
- .bashrc の再読み込みで PATH に重複するディレクトリが登録される
これらのために下を行うことにした。
- ディレクトリの存在確認を行う
- $PATH に既にないか確認する
対応
最初に書いたように[]
のオプションに`を含める方法は上手く動かなかった。
そこで&&
で繋ぐことにした可読性が下がるので略記もやめてtest
を繋げることにした。
|
|
これで2つの問題の多くは解決する。 ただ eval “$(rbenv init -)" の実行が ${PATH} を変更し単純に追記し $PATH が伸びる問題は完全には解決していない。
一旦は別の問題として対応する事にした。
もしかしたら -a が上手く動かなかったのはバッククォートでの実行が test コマンドよりも先に実行されるためかもしれない。 2つ使っていたか記憶が怪しいが、2つのバッククォート実行が並んでいたら終了ステータスは1つしか確認できない。