cshプログラムの :t(:gt, :h ...)などパス名指定子の仕様に関して教えて頂きたく思い投稿いたしました。
これらの演算子はフルパス表示からフアイル名部の文字列を
取り出す際に(/bin/ls-->ls)単に最後のスラッシュより前の部分を省略するという処理ではないのでしょうか?
例1のような場合はOKなのですが例2のような場合は利かないのです!!
変な引数を与えられた場合にバッチスクリプトの使い方をechoするところで$0を使いたいのですが、このコマンドはどのような場所から実行されるか分からないので、:t を用いてバッチファイル名だけを表示させたいと思っています。
[1: OK例]
set qqq = (/opt/sfw/etc/* )
echo "$a:gt"
-<結果>---
enscript.cfg
esd.conf
fnrc
ftpaccess
ftpconversions
...
[2: NG例]
test.csh
#! /bin/csh -f
echo "usage of $0:t"
--<結果> ---
usage of /export/home/matumoto/study/csh/dirFlag.csh:t
以上、宜しくお願いいたします。
※ 作業はsolaris 8で行っています。
No.3ベストアンサー
- 回答日時:
#2さんの回答(後者のほう)でOKです。
>set a = $0
>echo "usage of $a:t"
他にも、/usr/bin/basenameを使うという手もあります。
echo "usage of `basename $0`"
Bシェル等ではこの方法ですね。
$0には、:tなどの修飾子が効かないようです。
ちなみに引数の$1($argv[1])は修飾子は効きます。
#$0はシェル変数ではないから?
$0には:tは利かないのにいったん別の変数にすると利くというのは余り直感的でなく、C-SHELLは作りこみが甘いといわざるを得ないと思わず思ってしまいました。
今回の一件で以下を学ぶことが出来ました。
"basename $0"が使える
$0からいったん他の変数に乗せかえると:tが使える
$1以降なら使える
以上有難うございました。
No.2
- 回答日時:
私も最近cshはご無沙汰なので自信なしですが、
No.1さんの
> その機能はインタラクティブシェルとして使用した時のコマンドラインヒストリに対する機能です。
というのは間違いだと思います。
ご質問の機能はヒストリー機能とは別のものです。
また、$0はスクリプトの引数(コマンドを含む)を示すものですので、
sourceを使ったのではむしろダメだと思います。
echo "usage of ${0:t}"
とか
set a = $0
echo "usage of $a:t"
とか試されてみては。
アドバイス有難うございました。
一番目の方法は既にご指摘ありましたとおり、"文法があいまい"との事でNGでしたが、2番目の方法ではOKでした。
No.1
- 回答日時:
cshは普段使っていないので参考になるかわかりませんが、、、
その機能はインタラクティブシェルとして使用した時のコマンドラインヒストリに対する機能です。
したがって、スクリプトインタプリタとしてcshを使用した場合は使えないと思います。
さて、ここから先はcshというよりunixの話ですが、
cshのコマンドラインからcshスクリプトを呼び出した場合どうなるかというと、OSがスクリプトの先頭行を見て新しい/bin/cshプロセスを起動してスクリプトを実行します。
つまり、コマンドラインを出していたcshとスクリプトを実行しているcshは別プロセスであり、前者のコマンドラインのヒストリは後者のcshと無関係です。
ちなみに、2のスクリプトもsourceを使って呼び出せばうまくいくかもしれません(未確認)
なお、ご質問のような処理をしたい場合は通常cshのビルトイン機能ではなく、basenameコマンドを使います。
例) echo "usage of `basename $0`"
ちなみに個人的には、スクリプトはcshよりshで書いた方がいいと思います。
どうも有難うございました。basenameという便利なコマンドがあるのを知りませんでした。
参考になりました。
> スクリプトインタプリタとしてcshを使用した場合は使えない
とありましたが、他の方のご指摘がありましたようにこれはシェルスクリプトでもしよう出来るものとして解説がされています(Bil Joy著: C shell フィールドガイド にて)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- Excel(エクセル) 【Excel関数、count系】どなたか教示下さると助かります。 Excelでシフトを管理しており、 2 2022/07/09 06:34
- C言語・C++・C# C言語 3 2022/10/04 15:07
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
【お題】 ・ありそうだけど、絶対に無いことわざを教えてください。
-
自分の通っていた小学校のあるある
進学したり大人になってから、「あれって自分の小学校だけだったのかな」と思うことありますよね。 逆に「他の小学校ってそんなことするの!?」と思ったり。 そんな「自分の通っていた小学校」のあるあるを教えてください!
-
冬の健康法を教えて!
温度変化が大きくなり、風邪をひきやすいこれからの季節。 どんなことに気をつけていますか?
-
cshで拡張子を除いたファイル名を取得したい
その他(プログラミング・Web制作)
-
cshの文字列操作(0埋め)
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
写真をコピーしたら作成日時が...
-
windows11におけるファイルの並...
-
勝手に無変換になる
-
Windows11になって便利になった...
-
エクスプローラのアクティブウ...
-
Windows11でタスクバー・スタ...
-
Windows11のデスクトップのアプ...
-
MS-DOS 6.22のダウンロード
-
Windows11 システム通知音がも...
-
windows11 きれいなロック画面...
-
Windowsの"legacy"ってなんです...
-
Windowsアップデートしたらタス...
-
Windowsで大量の画像サイズを半...
-
Windowsの古いゲーム(32bit OS...
-
windows11でクイックスキャン等...
-
Win11にできますか?
-
Windows Media Playerを開くと...
-
PC用のウインドウズ更新プログ...
-
Windows11のシステム通知音が小...
-
Raspberry Pi 3 A+ ブラウザ遅い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
windows11におけるファイルの並...
-
エクスプローラのアクティブウ...
-
写真をコピーしたら作成日時が...
-
Windows11 英語の警告文のよう...
-
MS-DOS 6.22のダウンロード
-
勝手に無変換になる
-
windowsxpより軽いLinux探して...
-
Windows11 システム通知音がも...
-
Windows11のデスクトップのアプ...
-
なぜ、教えて!gooには、Windows...
-
windows11でクイックスキャン等...
-
windows11 きれいなロック画面...
-
なぜ、Windows OSは重たいので...
-
Windowsの"legacy"ってなんです...
-
Windows Media Playerを開くと...
-
Windows11で共有プリンタの印刷...
-
すべてのアプリを起動直後に「A...
-
Windowsアップデートのダウンロ...
-
Raspberry Pi 3 A+ ブラウザ遅い
-
Windows11でタスクバー・スタ...
おすすめ情報