なぁんか、タイプが違うんだよ。
...初めて知りました。
type
コマンド、
zsh か bash かで、違いがあると言うこと。特にオプションの使い方。
簡単にオプションと キーワード "と思われる" ところを。
よしゃあーいいのかもしれませんが、自分の言葉で。
zsh については type [ -wfpams ] name ...
。
-w
(word ?)
"name: word" の形式で結果を出力。
word には型が出力。word の バリエーションは、;-f
(function ?)
シェル関数の内容を出力。-p
(path ?)
パスを出力する。-a
(all occurrences of name ?)
型に関わらず、全てのアイテムを出力。-m
(pattern matching ?)
引数は括弧で囲むことで探索キーワードのパターンとなり、それにマッチするアイテムを探索し出力。-s
(symlinks ?) シンボリックリンクだったら、その参照先も出力。
ちょっと心配... 認識違い、誤記ありましたらご指摘下さい。何卒。
ちなみに bash についてでしたら type [-aftpP] name [name ...]
。
-a
(all ?)
型などに関係なく、name の全てのアイテムを出力。-f
(suppresses shell function lookup ?)
シェル関数は処理の対象外とする。-t
(type ?)
型を出力。型のバリエーションは、;-p
(path ?)
パスのみを出力。何か "name is" ってのが付かない。だけど型がfile
じゃない、つまり 組み込みコマンドbuiltin とかだったら何も出力しないみたい。-P
(Path ?)-p
同様パスのみ出力。しかし、こちらは-p
のようなスカシはしない。
こんなところでしょうか。
当パラグラフでの参照先です。;
- zshbuiltins(1) Mac OS X Manual Page
zsh のtype
コマンドの参照先として。 - bash(1) Mac OS X Manual Page
bash のtype
コマンドの参照先として。 - Man page of BASH
bash のtype
コマンドの参照先として。日本語訳。
きっかけ
shellscript 内で、幾つかのコマンドのパスを取得したいと考えた。
これには type
コマンドをチョイス。*6
ところが、この type
、「惜っしいなぁ」思うところがひとつあって、
出力結果が、which
のようにパスだけでなく、"
勿論、awk とか使えば良いのは分かるのですが...
と思うたびに、そんなオプションとかなんかあったりしないもんだか、と冗談と期待半々で、ボンヤリと "ついでに" な検索で、こちらに出遭った。
» type【コマンド】|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
あるじゃん、思ってターミナル*7で ;
% type eyeD3 eyeD3 is /opt/boxen/homebrew/bin/eyeD3 % type -p eyeD3 eyeD3 is /opt/boxen/homebrew/bin/eyeD3 % type -t eyeD3 zsh: bad option: -t
ここで、この辺りの記述が気になる。
ちなみに「type」コマンドはsh系で使えるコマンドです。csh系では使えないのでご注意ください。
あれ? とは思ったのですがそこは飲み込んで、
自分がログインシェルとして何を使っているか、を気にしてみた。
シェルの問題? ...とか?
% echo $SHELL /opt/boxen/homebrew/bin/zsh
これのせい?
わたしのタイプじゃなかった、と言うこと
で。
% bash bash-3.2$ type eyeD3 eyeD3 is /opt/boxen/homebrew/bin/eyeD3 bash-3.2$ type -p eyeD3 /opt/boxen/homebrew/bin/eyeD3 bash-3.2$ type -t eyeD3 file bash-3.2$ exit exit %
とゆ事でした。
あの時の自分から、うっちゃっられてきたアレ
過去幾度かの不可解な経験に、ここでやっと合点がいく。
実は以前にも同じような事をしていて。
過去、
全く別の件でたまたま目にしてきたサイトで、p
オプションの存在を偶然知り、「正にコレ!」と type -p name
叩いてみたら、返ってくる結果は結局 name is ...
。
その時点では、特に深入りすることもなく軽い気持ちで流していたのです。
何か訳有って "そう言うもの" なのだろう、と。
そして今回、
type -t name
で「そんなオプションない」と言われた辺りで「あれ」と思って、一歩引いて見てみたら、"そゆこと" でしたと。
過去の自分が、うっちゃった未来の自分と言うのがコレ、ってことね(笑
オチは実に基本的なつまらないところでしたが orz
あん時の自分にこんにちわ、と言うことで、はい、おしまい。
*1:素直に hash されたもので良いみたい。
*2:none。おそらくブランク、何も表示されない。
*4:実行ファイルのこと。外部コマンドとか?
*5:none。おそらくブランク、何も表示されない。
*6:'which' でも良いじゃん、と言うのもあるのですが、それはこの辺り見ていて、この手のことは 'type' を使うよう心掛けているのと、好奇心から 'type' でやってみることに。;
» shell - How to check if a program exists from a bash script - Stack Overflow
» [How to check if command exists in a shell script - Stack Overflow][11]
» [Bash - コマンドの存在チェックはwhichよりhashの方が良いかも→いやtypeが最強 - Qiita][12]
*7:iterm2。