
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
windowsは使っていると...
-
通知領域のアイコンや文字サイ...
-
Windows11でタスクバー・スタ...
-
写真をコピーしたら作成日時が...
-
新品のパソコンをお店で買った...
-
WindowsってOSなんですか?
-
ホーム及びロック画面の消費が1...
-
windows11でクイックスキャン等...
-
エクスプローラのアクティブウ...
-
w11 24H2 ISOファイルの大きさ...
-
Windowsの"legacy"ってなんです...
-
windows11 きれいなロック画面...
-
Windows Media Playerを開くと...
-
windows11、23H2用の更新プログ...
-
「Wi-Fiアダプターへのアクセス...
-
要件を充たしていないwindows11...
-
Windowsの購入タイミングについて
-
Windows xpでは ChromeOS Flex...
-
Geminiをパソコン(WindowsPc)...
-
消えてしまった復元ポイントを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
写真をコピーしたら作成日時が...
-
windows11、23H2用の更新プログ...
-
勝手に無変換になる
-
Windows11でタスクバー・スタ...
-
エクスプローラのアクティブウ...
-
Windows11のデスクトップのアプ...
-
要件を充たしていないwindows11...
-
Windowsの"legacy"ってなんです...
-
ホーム及びロック画面の消費が1...
-
windows11 きれいなロック画面...
-
Windows Media Playerを開くと...
-
MS-DOS 6.22のダウンロード
-
「Wi-Fiアダプターへのアクセス...
-
windows11でクイックスキャン等...
-
Windowsの購入タイミングについて
-
Microsoftのページだけ全て「申...
-
Geminiをパソコン(WindowsPc)...
-
windows11プロダクトキー購入に...
-
Windowsの古いゲーム(32bit OS...
-
Win11にできますか?
おすすめ情報