[
このコマンド凄くね? 英数字でもないのにたった一文字。 しかもシェルスクリプトとかそーいうしょぼいのではなくて、 ちゃんとしたバイナリ。 すごいじゃん。 あまりに凄すぎてうっかり消してしまう人、続出。 そんな凄い [ をみんなで賛えるスレ。
Solaris には /bin/[ は存在せず、 >しかもシェルスクリプトとかそーいうしょぼいのではなくて、 /bin/test も ksh スクリプトだったりなんかする(w >>6 [ がないようなくさったシステムには用はない。 つーか、おまえら書きこみが足らんぞ! もっと尊敬汁 (゚Д゚) これってbash2からbuiltin commandになったんだっけ? 斎藤:似たような話はありますよ、「誰か が/binにカギカッコとかいう変なのをのを作 ってたんで消しときました」って。 >>9 ちがうよ。 bash1どころか、ふつーのBourneシェルでもbuiltinだよ。 [ が builtinじゃなかったのはecho pwd とかすら 外部コマンドだったふるーい時代だ。 あの頃は if [ ... ] と書くより case ... in の方が(内部コマンドなので)速い、というテクニックがあった。 >>4-5 Debianなんですが、 $ type [ [ is a shell builtin $ which [ /usr/bin/[ となりました。この/usr/bin/[はcoreutilsに含まれているもののようです。 Enter押そうとしたらミスって[を押してしまう. 皆さんはEnterと[押し間違えませんか? UNIX使いなら普通EnterよりもCtrl-J or Ctrl-Mの方を使うだろ。 それに、普通英語キーを使うから、Enterも近い。 日本語キーはダメね。 $ uname -a SunOS **(host名)** 5.8 Generic_108528-22 sun4u sparc $ type [ [ is a shell builtin $ which [ /usr/local/bin/[ $ file /usr/local/bin/[ /usr/local/bin/[: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), dynamically linked (uses shared libs), not stripped 一方 $ uname -a SunOS **(ホスト名)** 5.6 Generic_105181-35 sun4u sparc SUNW,Ultra-1 $ type [ [ is a shell builtin $ which [ [: Command not found. $ cat /usr/bin/test #!/bin/ksh # #ident "@(#)alias.sh 1.1 95/02/06 SMI" # # Copyright (c) 1995 by Sun Microsystems, Inc. # cmd=`basename $0` $cmd "$@" [ がインストールされてないシステムを使ってるやつは管理者を罵倒しる! おお、スレタイトル見て荒しかと思ったけど UNIX板ならではですね〜 file /bin/[ /bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 5.0.2, dynamically linked (uses shared libs), stripped %file /bin/[ /bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 4.8, statically linked, stripped よくこんなスレタイでこんだけ話題が続くな。 恐るべしウニ板。 まぁtest とtsetをtypoする俺様は[必須だ。 テストカキコ用スレかと思って「いいセンスしてやがる」と来てみたが… >>1 マジネタだったんか… 対応がとれてないと気持ち悪いから]が欲しくてたまらない。 ]をどんなコマンドにするか、考えてみないか? このコマンド何? man無いし。--help付けても分からんし。記号だからぐぐれないし。 常識みたいだけどおせーて。 どうも。 うちのlinuxはまともなUNIXじゃないということが良く分かりました。 ログインできる SunOS 5.8 には入ってませんでした。 FreeBSDでやっと man 読めました。 ちなみに、linuxではよく見たらシンボリックリンクでした。 なるほど、隔離板があるわけですね。ためになりました。ありがとうございます。 >>27 $ /usr/bin/[ --help すれ。 ちゃんとヘルプ表示されるぞ。 単に [ だと shell builtin が優先されるので [: missing `]' になる。 >>30 zshでは実行すらできませんでした。 /usr/bin/[ --help zsh: bad pattern: /usr/bin/[ TEST(1) BSD General Commands Manual TEST(1) NAME test, [test - condition evaluation utility SYNOPSIS test expression [test expression ] DESCRIPTION The test utility evaluates the expression and, if it evaluates to true, returns a zero (true) exit status; otherwise it returns 1 (false). If there is no expression, test also returns 1 (false). %where [ /bin/[ %file /bin/[ /bin/[: Mach-O executable ppc %/bin/[ --help % if [ X$hoge = X ]; then ... ってのもバッドノウハウだよな >>34 if [ -z "$hoge" ]; thenじゃだめな理由ってなに? そういえば、/bin/shの[は-eが無いから困る。 >>29 coreutilsに普通に入っていたが... Linuxザウルスかなんかでbusyboxが代わりに入ってるのか? >>38 最近、bashismてんこもりなshell scriptばかり書いてしまう ようになって、あちこちで迷惑かけてまつ。 >>39 $ ls -l /usr/bin/[ lrwxrwxrwx 1 root root 4 Dec 6 23:20 /usr/bin/[ -> test* $ rpm -qf /usr/bin/test sh-utils-2.0.11-9vl5 $ cat /etc/vine-release Vine Linux 2.90 (Valandraud) >>42 Vineは先っちょでもまだcoreutilsが入ってないのか(驚 知らない人のために補足するけどcoreutilsはそれまでの fileutils, sh-utils, textutilsを統合したものね。 >>41 script に bash 指定すれば? #!/bin/bash $ file /usr/bin/[ /usr/bin/[: symbolic link to test % file /bin/[ /bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 4.9, statically linked, stripped % file /bin/[ /bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 5.0.2, dynamically linked (uses shared libs), stripped % file /bin/[ zsh: bad pattern: /bin/[ % file /bin/\[ /bin/[: cannot open (/bin/[) % file /usr/bin/\[ /usr/bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped [ "X$1" = "Xぬるぽ" ] && reboot >>37 しいて言えば、[で一度評価してるものをifで再度評価してるのが無駄というところか。 % file /bin/\[ /bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 6.0.0, dynamically linked (uses shared libs), stripped % file /rescue/\[ /rescue/[: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 6.0.0, statically linked, stripped >>68 知らん。 つか、それは内部コマンドじゃないと意味無いだろ。 >>70 チ?ハ、ホ ] 、ホ、ウ、ネ、ノ、ヲサラ、、、゙、ケ、ォ。ゥ >>81 違う。[[ は { とか if とかと同列のシェルの文法。 もはやコマンドではない。 $ type [[ [[ is a shell keyword $ type [ [ is a shell builtin $ たまに /bin/[ がないOSがあるよね。 実質困らんけど、教育上置いておいてほしいな。 5 ヶ月も前のネタだが将来発掘されるために書いておく 「日本[の会」 http://x5b.jp/ あと : もあるぞ。 : は何故外部コマンド版 /bin/: を置かなかったんだろう? & はコマンドじゃないんだっけ? あと ; は? 逆にコマンドとして実装できるかな? それらは構文要素であって、 [ は構文要素ではない。 コマンドライン的には、エスケープしてやればそういうコマンドを 入力することは可能。俺の手元のbashでは、 $ \& bash: &: command not found $ \; bash: ;: command not found こうなるw [以外で一文字コマンドに出来る/出来そうな文字は何があるか? ( \ " ' とかなら無理矢理コマンドにできるかな?(はできそうだな (( とかならできるか? ありそうでないよな、[以外の一文字コマンド、特に記号とか。 と思ったら、bash限定?であったな。 . >>99 マジで言ってる? 大間違いなことを(下2行) >>100 あれ?コマンド扱いじゃないんだっけ? ビルトインで cygwinいじってたら、英字で一文字コマンドがあるな x Xが立ち上がったw 昔 if/while [ 条件 ];then って構文だと思ってた時期があったな. 確か初めてcygwin使ったときに,binディレクトリの一番上に [.exe ってのがあるのを見て, それがコマンドなのを知ったんだっけ.なつかしい. [[ は bash の構文 [ は test のエイリアス(ハードリンク) test と [ はシェル内蔵版もあるけど、基本的には独立したコマンドで、 [ という名前で呼び出された場合、最後のオプションが ] であることを確認したりとか 振る舞いが異なる。 >>110 ありがとう! $ ls -li /usr/bin/{[,test} 685996 -rwxr-xr-x 1 root root 30156 12月 17 05:10 /usr/bin/[ 686039 -rwxr-xr-x 1 root root 26056 12月 17 05:10 /usr/bin/test でもハードリンク? inodeもファイルサイズも違うみたいなんだけど何でだろ? ちなみにLinuxで、coreutils-8.7 まぁ深くは考えない事にします [[ はbashの構文というのと test より [ のほうがメジャーという事にしときます。 うちの環境ではtestのmanは入ってるのに[のmanが入ってなかったのに少しショックを受けましたが。 >>111 coreutils だと [ と test は別。 [ のソースは lbracket.c で、中身はこんなん。 #define LBRACKET 1 #include "test.c" >>113 > [のmanが入ってなかった /usr/share/man/man1/[.1.gz ない? > #include "test.c" 内容的には同じかな? #define LBRACKET 1 でちょっとだけ変わる。 --help の解釈とか。 >>10 って出典はよしだともこさんのroot訪問記かなぁ? coreutils は、自分の名前によって挙動が変わるプログラムは邪悪だ、 という哲学なのかな。 >>119 GNUのcoding standardに書いてある。 >>121 https://www.gnu.org/prep/standards/standards.html#User-Interfaces > Please don’t make the behavior of a utility depend on the name used to invoke it. ∧_∧ ( ・∀・) | | ガッ と ) | | Y /ノ 人 / ) < >__Λ∩ _/し' //. V`Д´)/ ←>>63 (_フ彡 / 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 8O4N7FPFDN 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方 時間がある方はみてもいいかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 08LG5 if test 1 ] then echo OK! fi 親シェルの環境変数(PWD, CDPATH)イジるのはハック要るから、内部コマンドとしてcdを提供するのは理に適ってるのは承知してるが、 [やechoと違ってgnu/linuxシステムにcdコマンドが無いのは結構困る 複数シェル、特に伝統シェルじゃないの使うときにも同じcd使ってシームレスにやりたい 汚いハックでいいからスタンドアロンのcd実装してくれ CDPATHやOLDPWD見れば同等の事は、できないか 親の環境書き換える必要がある 独自のcdっぽい内部コマンドは必要 pwsh使ってるけどslもカスタマイズすれば悪くない read.cgi ver 08.0u [upliftProject] - 2023/07/09 Walang Kapalit ★ | uplift ★ 5ちゃんねる