$0の変数には、パスを含んだ形式でプロセス名が編集されると思うのですが、この変数からパスをはずした形式でユーザ変数にセットする簡単な方法はありませんか?

たとえば$0に、/tmp/a.sh と設定されている場合に
変数 $shlに a.sh を設定したいのですが。

宜しくお願いします。

A 回答 (2件)

basename コマンドで、お望みのことができます。



お使いのシェルが sh なら shl=`basename $0` で、csh なら set shl=`basename $0` で、
$shl に $0 からパス名を除いたものがセットされます。

以下は、csh によるサンプルプログラムです。

  % cat /tmp/a.sh
  #!/bin/csh -f

  set shl=`basename $0`
  echo $0
  echo $shl

実行結果は、

  /tmp/a.sh
  a.sh

となります。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。
早速確認させていただきます。

お礼日時:2001/10/14 16:02

cshだけでしかできないのかもしれませんが・・・



set shll=$0:t で、パスは取り除かれます。
ちなみに、パスが取り除かれたa.shからさらに拡張子(というか末尾の"."とそれ以降の文字列)を取り除きたい場合は
set shll2=$shll:r
で行けます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確認してみます。

お礼日時:2001/10/19 21:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qshで書いたシェルスクリプトで`とか'とかの中で変数を使いたい。

標題の質問ですが、gnu dateコマンドを使って数日前の日付を取得しているのですが、

こんな具合:
DATE=`date --d '1 day ago'`

何日前の日付を取得するかを引数で決めたいのです。
しかし
DATE=`date` --d '$1 day ago'`
これでは当然上手く行きません。
上手いことエスケープして変数を使用する方法を教えてください。

シェルはshです。

Aベストアンサー

ごめんなさい、`がひとつ多かった^^;


``の中でも変数は展開されますので、

DATE=`date --d $1' day ago'`

でいけます

Q環境変数とシェル変数

UNIXのシェルスクリプトで使用するシェル変数と環境変数とはどういった違いがあるのでしょうか?どのように使い分ける必要があるのでしょうか?また、このような使い方をすると間違いがおこりやすいといった具体的な例など教えていただければ助かります。

Aベストアンサー

環境変数はforkした子プロセス(及び子シェル呼び出し)に引き継がれ、呼ばれた子プロセスはそれらを参照する事が出来ますが、シェル変数は子プロセスには引き継がれません。

子プロセスが親からの情報を受け取って何かしたい時に環境変数を使います。

QFreeBSDのtmpディレクトリ

FreeBSD8.0を使用しています。
今回の質問はOSのバージョンは関係ないと
思いますが質問します。

tmpディレクトリの中に入っていた
ファイルが勝手に消去されました。

なぜですか?

メーラーのバックアップディレクトリだと
聞いたことはあるのですが、
もうちょっと詳しくお願いします。

Aベストアンサー

FreeBSD ですよね?
で、/tmp が消えちゃった、っていう話ですよね?

/etc/rc.conf に、
clear_tmp_enable="NO"
を書けば、ブート時に /tmp の内容は消去されません。

もし状況が違うなら、より正確に(多少冗長でも構いません)状況を補足して下さい。

Q" /var/log/messages "の中は何を拾って来てるのですか?

初心者Addministratorです。
教えてください。お願いします。

○Domain nameまたは、WWWを付けるとURLになる、この大量の文字列はなんでPicupといいますか、logとして残されるのでしょうか?基準はなんですか?

宜しくお願いします。

Aベストアンサー

「この大量の文字列」と言われても、見えないものを教えるのは無
理です。wwwをつけるとURLになるというのも、wwwがないとURLじゃ
ないというわけでもないですし。

/var/log/messages には、そのファイル名のとおり、メッセージが
記録されているわけですから、単にドメイン名があってこりゃ何で
すかというんじゃなくて、そのメッセージに何と書いてあるかが重
要です。それを掲載してください。

で、一般論として、messages には syslogd が書き込みます。
syslogd は各種のデーモンプロセスからの syslog 要求を受けとっ
て、それを記録していきます。だから、何が記録されるかは、どん
なデーモンが動いているか、またそのデーモンがどんな基準で
syslog 要求しているかしだいです。

だから、メッセージ全体を読まないと、無意味なんです。

ところで、過去の解決した質問をちゃんとしめきっていますか?

Qアセンブルでエラー「error: invalid character (0x0d)」が

識者の皆様、宜しくお願い致します。
Solaris2.6上でアセンブルテストを行っています。

% uname -a
SunOS ultra 5.6 Generic_105181-23 sun4m sparc SUNW,SPARCstation-5

% cat sparc_test
main: save %sp,-112,%sp
sethi %hi(.LLC0),%o0
call printf,0
or %o0,%lo(.LLC0),%o0
ret
restore
.LLC0: .asciz "Hello.\n"

% as sparc_test
as: "sparc_test", line 1: error: invalid character (0x0d)
as: "sparc_test", line 2: error: invalid character (0x0d)
as: "sparc_test", line 3: error: invalid character (0x0d)
as: "sparc_test", line 4: error: invalid character (0x0d)
as: "sparc_test", line 5: error: invalid character (0x0d)
as: "sparc_test", line 6: error: invalid character (0x0d)
as: "sparc_test", line 7: error: invalid character (0x0d)

となってしまいます。
「0x0d」は改行CRですかね。

これにはどう対処したらいいのでしょうか?

識者の皆様、宜しくお願い致します。
Solaris2.6上でアセンブルテストを行っています。

% uname -a
SunOS ultra 5.6 Generic_105181-23 sun4m sparc SUNW,SPARCstation-5

% cat sparc_test
main: save %sp,-112,%sp
sethi %hi(.LLC0),%o0
call printf,0
or %o0,%lo(.LLC0),%o0
ret
restore
.LLC0: .asciz "Hello.\n"

% as sparc_test
as: "sparc_test", line 1: error: invalid character (0x0d)
as: "sparc_test", line 2: error: invalid character (0x0d)
...続きを読む

Aベストアンサー

通常 Solarisだと改行コードは、LF(0A)なので出ているのでは?
このソースは、Windowsで作成しFTPしたものであれば、ascモードで転送するとか・・・


このカテゴリの人気Q&Aランキング

おすすめ情報