- ベストアンサー
-のついたファイル名を操作するには…
Sun OS 5.8を使用しています。不要なファイルを掃除しようとディレクトリー内を調べていると“-a"というファイル名のついたものが見つかりました。 内容を確かめようとcatやviコマンドで、ファイル名を-aとすると、シェルが-aを コマンドオプションと解釈していまい、うまく扱えません。このファイルの内容を見るにはどうしたらよろしいでしょうか?初歩的な質問で申し訳ありませんが、宜しくお願いします。ちなみにこのファイルはディレクトリーではありません。 一般のファイルで、私には読み書き実行の権限はあります。シェルはUnix標準のKshです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
恐らくこういった形で出来ると思いますが…。 cat "-a" vi "-a" rm "-a" というようにダブルクォーテーションで括ってみて下さい。
その他の回答 (6)
- ita3
- ベストアンサー率67% (25/37)
すみません。削除する話ではなかったのですね。 申し訳ありませんでした。
- ita3
- ベストアンサー率67% (25/37)
以前のSolarisでは、rm に - というオプションが あって、そのものずばりの -がついたファイルを 削除するというものでした。 rm - -a という感じだったのですが、Solaris8 では使えなく なったのでしょうか?
お礼
ita3さん、アドバイスありがとうございます。Solarisでは - 単独のオプションというものがあるのですか。私はSolarisは未経験ですので、初めて知りました。 わたしは Sun OS なのですが、rm - -a(-と-aの間にスペースあり)rm --a(スペースなし)どちらも「オプションが正しくありません」という返事が返ってきてしまいます。なかなか難しいですね。貴重な情報ありがとうございました。
- ysk6406
- ベストアンサー率40% (237/589)
No.4 の回答と似たような話ですが、こんな方法もあります。 if (X$1 == Xstring) then つまり、頭に X を付けることによって例えば -d は X-d となり、普通の文字列として判定できるというわけです。 この手法は、昔から結構よく見かけますよ。
お礼
ysk6406さん、ご回答ありがとうございます。シェルはまだまだ勉強不足で皆様の貴重な知識はすべて糧になります。なるほどですね。参考にさせて頂きます。もっともっと勉強しなくては!!がんばります。
- cherry_moon
- ベストアンサー率36% (37/102)
シェルスクリプトを作ってらっしゃるということで、 もしかしたら、私のつまずいたところ同じじゃないかなと思って、 アドバイスに来ました。 #以下のサンプルは、cshスクリプトの書き方をしていますが #ほかのシェルでも基本的に同じ動作だと思います。 if ( $1 == string ) という書き方をしていると、 たとえば、引数に "-d" が来たときに、 if ( -d == string ) と展開されて、== がディレクトリかどうかを返す式になってしまいます。 $1 と string を文字列として比較したいときには、 if ( "$1" == string ) とすると、"$1" は文字列として解釈されます。 私の経験上、引数の処理で苦労したので、書かせてもらいました。 関係なかったら読み飛ばしてください。
お礼
cherry moonさん、貴重なアドバイスありがとうございます。おっしゃるとおり、まさに引数として-aを渡すと、シェルが思いもかけない解釈をしてしてしまい、とても困りました。-を文字列の一部として解釈させる方法は意外といろいろあるのですね。とても勉強になりました。何か問題にぶつかるとそれを解決しようとする時に思わぬ副収入が得られて、とてもやりがいがありますね。また、初歩的な質問をしてしまうかもしれませんがその際にはどうか宜しくお願い致します。
- 2nd
- ベストアンサー率30% (19/63)
既に解決されているようなので蛇足になりますが、 そういった場合の正攻法(?) を紹介しておきます。 % cat ./-a こうすれば間違いなくアクセスできます。 「./」を用いて、相対パスでファイルを指定してやることで 「-」つきであろうとなかろうと、きちんとファイル名として 認識させてやることができます。 同様に、絶対パスでファイルを指定してやっても問題なくアクセスできます。
お礼
2ndさん、ご回答ありがとうございます。早速試してみました。なるほどです。 パスでファイル名を指定すれば「-」そのままファイル名の一部となるわけですね。バスにオプションなんて無いですものね。大変勉強になりました。いま、会社ではじめてのシェルスクリプトに挑戦しています。難しいです。最初から行き詰まっています。いろいろがんばってみているのですが、どうもうまく動きません。 どうしても解決できなかったら、またこちらで質問したいと思います。その際にはどうぞ宜しくお願い致します。
- CueCue
- ベストアンサー率40% (86/214)
どうしてもその名前で扱いたいとなると不明ですが。 一度mvコマンドで名前を変えてから参照してはいかがでしょう。 例:ファイル'-a' を 'ab' に変える。 % mv -- -a ab mvやrmコマンドは、オプション '--' をつけると'-'で始まる名前をファイル名としてくれます。
お礼
CueCueさん、早速のご回答ありがとうございます。できました!! mv,rm,vi,catコマンドにおいて試してみましたが、きちんと'-’をファイル名の一部として解釈してくれました。大変助かりました。ありがとうございます。
お礼
naturalさん、早速のご回答ありがとうございます。実はこの方法を試してみたのですが、「オプションが正しくありません。使用法:cat[-usvtebn] [-|file]...」というエラーがあがってしまいます。ダブルクォーテーションで括ってみても、オプションコマンドが打ち消されていないようです。他に何かいい方法がありましたら、ご教授の程宜しくお願い致します。