
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オプション設定の表示
-
勝手に無変換になる
-
ホーム及びロック画面の消費が1...
-
Windows11でタスクバー・スタ...
-
「Wi-Fiアダプターへのアクセス...
-
Windows11で、背景が勝手に変わ...
-
MS-DOS 6.22のダウンロード
-
エクスプローラのアクティブウ...
-
Windowsブートマネージャーの起動
-
電源を入れるとWindowsブートマ...
-
写真をコピーしたら作成日時が...
-
Win11にできますか?
-
windows11 きれいなロック画面...
-
OSのWindows11のインストールに...
-
ウインドウズ12のことで知りた...
-
Windows11ですが、ロック画面の...
-
Windows Media Playerを開くと...
-
windows11でクイックスキャン等...
-
Windows11のデスクトップのアプ...
-
Windows「KB5058411」の更新が失敗
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows「KB5058411」の更新が失敗
-
Windows11でタスクバー・スタ...
-
勝手に無変換になる
-
ホーム及びロック画面の消費が1...
-
写真をコピーしたら作成日時が...
-
電源を入れるとWindowsブートマ...
-
Windows11で、背景が勝手に変わ...
-
LinuxのOSで、Adobeフォトショ...
-
Arduinoのリアルタイムクロック...
-
エクスプローラのアクティブウ...
-
画面から消えたマウスの矢印探...
-
Windows11のデスクトップのアプ...
-
ウインドウズ12のことで知りた...
-
iobitのUninstaller or Geek Un...
-
自作アイコンが普通のアイコン...
-
Windows11 デスクトップ アイコ...
-
windows11、23H2用の更新プログ...
-
MS-DOS 6.22のダウンロード
-
マイクロソフトアカウントの認証
-
OSのWindows11のインストールに...
おすすめ情報