Solaris8 (SPARC)上でJavaでいろいろ開発をしているのですが、
シェルの環境変数の長さに制限があるようで困っています。
具体的には、あちこちに散在しているjarファイルを参照する必要
があるので、環境変数 $CLASSPATHが非常に長くなっていて、
現在の設定以上に CLASSPATHを追加しようとすると「Word too long」
というエラーが出て設定できません。
1つの環境変数の長さの制限を変更することは可能でしょうか?
もしくはなにか回避策があれば教えて下さい。
使用しているシェルは tcsh です。

A 回答 (1件)

参考URLに tcsh の man を示します。


ここの最後の方に「制限」という章がありますが、そこにある
「単語は1024文字まで」という制限に引っ掛かってるんでしょうね。

まあ、tcsh であれば、ソースが有るわけですから、ソースを
いじってしまえば良いですよね。

もしくは、コンパイルや実行の際には bash を使う。コンパイルで
make を使っているんだったら、そこでシェルを指定すれば良いだけ
ですよね。

参考URL:http://www.linux.or.jp/JM/html/tcsh/man1/tcsh.1. …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。
結局ソースをいじるか、もしくはbashを使えば良いのですね。
有難うございました。

お礼日時:2001/05/17 19:28

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

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

Qシェルスクリプトの変数の制限?

こんにちは。
シェルスクリプトで謎の現象が起こりまして悩んでいます。

現在、
#!/usr/bin/sh
var='foo'
if [ $? - eq - 0 ]; then
mv xxx.bz2 xxx.old.bz2
echo $var | bzip2 -z >xxx.bz2
fi
といった感じのシェルスクリプトを動かしています。
これを手作業で、
foo | bzip2 -z >xxx.tmp.bz2
とやると、xxx.tmp.bz2は1.2MB程度のファイルとなるのですが、
上記のシェルスクリプトで実行すると8KBほどにしかなりません。

シェルスクリプトの変数のサイズの制限かと思い、調べてみましたが、
特に制限があるとの資料はみつかりませんでした。
fooの出力がバイナリなので、そのせいかとも思ったのですが、unix系列の場合、windowsと違ってテキスト/バイナリの区別はないはずだしということで、理由がわかりません。

シェルの変数には、やはり制限があるのでしょうか?それとも他の理由でしょうか。ご存知の方がいらっしゃいましたら、ご教示お願いします。

環境はsolarisです。バージョンは、
$ cat /etc/release
Solaris 10 8/07 s10s_u4wos_12b SPARC
Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 16 August 2007

です。よろしくお願いします。

こんにちは。
シェルスクリプトで謎の現象が起こりまして悩んでいます。

現在、
#!/usr/bin/sh
var='foo'
if [ $? - eq - 0 ]; then
mv xxx.bz2 xxx.old.bz2
echo $var | bzip2 -z >xxx.bz2
fi
といった感じのシェルスクリプトを動かしています。
これを手作業で、
foo | bzip2 -z >xxx.tmp.bz2
とやると、xxx.tmp.bz2は1.2MB程度のファイルとなるのですが、
上記のシェルスクリプトで実行すると8KBほどにしかなりません。

シェルスクリプトの変数のサイズの制限かと思い、調べてみましたが、...続きを読む

Aベストアンサー

変数と言うより、シェルのコマンドライン長の制約の気がします。
圧縮して1.2MBということはfooの出力は数十~数百MB?
外部コマンド起動の場合は、Linuxだと128KBが上限のようですが、echoは組み込みコマンドなので、もっと上限は大きいはずです。
変数に200MBいれてみると、入りましたけど、echoしてみるとbashが落ちました。SolarisだとOSが違うので、上限も異なると思いますが。

やはり変数に入れない方がいいでしょうね。

foo | bzip2 -z >xxx.tmp.bz2
ただ、ステータスを調べるのは面倒。パイプのステータスはパイプの最終段のコマンドつまりbzip2のステータスになります。

bashだと、${PIPESTATUS[0]} でfooのステータスが取れるのですが、shだとちょっと細工が要ります。

status=`((foo ; echo $? >&3) | bzip2 -z >xxx.tmp.bz2) 3>&1`
if [ $status = 0 ]
then mv xxx.bz2 xxx.old.bz2; mv xxx.tmp.bz2 xxx.bz2
else rm xxx.tmp.bz2
fi

変数と言うより、シェルのコマンドライン長の制約の気がします。
圧縮して1.2MBということはfooの出力は数十~数百MB?
外部コマンド起動の場合は、Linuxだと128KBが上限のようですが、echoは組み込みコマンドなので、もっと上限は大きいはずです。
変数に200MBいれてみると、入りましたけど、echoしてみるとbashが落ちました。SolarisだとOSが違うので、上限も異なると思いますが。

やはり変数に入れない方がいいでしょうね。

foo | bzip2 -z >xxx.tmp.bz2
ただ、ステータスを調べるのは面倒。パイプの...続きを読む

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Q空白を含んだシェル変数の代入

こんにちは。
空白を含んだシェル変数の代入について教えてください。

set test1="ABCD EFGHIJ"
set w1=$test1
echo "w1 = $w1"

このようなシェルスクリプトを実行させた時
w1 = ABCD
と表示されてしまいます。
解決案があれば教えてください。

よろしくお願いします。

Aベストアンサー

set w1="$test1"

ダブルクォーテーションで囲ってください。
この場合シングルはダメです(変数内容が展開されません)。

Qgrepで検索文字列が完全一致した行だけ取り出す方法

grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか?

通常は
grep hoge hoge.txt

と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。

例えばhoge.txtの中に
cc ghoge
kkl hogem
jjll hoge
という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。

何かよい方法があれば教えてください

Aベストアンサー

-w オプションじゃだめですか?

参考URL:http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

QCシェルでのファイルからの入力について

あるファイルが最終行になるまでに繰り返し実行するシェルを作りたいです。
とりあえずファイル名を1行ごとに5行程度入れてあるファイル「filemei」を作成しました。
そのファイルからファイル名を順番に取り出し、lsをするものを作ってみたのですが、うまくいきません。
とりあえず、繰り返しにはwhileやforeach、ファイルの読み込みにはawkを使ってみたのですが...
どなたか分かるかたがいれば教えて下さい。
無知なので、質問自体が訳が分からない場合があると思いますが、ご勘弁願います。

Aベストアンサー

とりあえず、
set a = $<
で、標準入力からの入力が一行、変数aに入ります。
例えば入力が
abcde 12345
であれば
$a = ( abcde 12345 )
となります。
abcde, 12345 はそれぞれ
$a[1], $a[2]
で参照できます。
ですから、
 while ( 条件 )
  set line = $<
  $line を処理
 end
のようにすれば、標準入力からの入力を一行ずつ処理できます。
これを例えばcommandというスクリプトにして
command < file
のようにすれば、指定したファイルからの入力を一行ずつ処理できます。

Qcshの文字列操作(0埋め)

ヤマトです。

cshの文字列操作について質問します。
環境はRed Had Linux7.2です。

数値を文字列に変換し、更に0埋めするのはどのようにしたら良いのでしょうか?
以下に例を書きます。

====SAMPLE.sh(一部抜粋)====
@ NUM_AAA = 1
ECHO NUM_AAA
set CHR_AAA = ×××××
ECHO CHR_AAA

====SAMPLE.sh(実行結果)====
1
01

以上の ××××× に当てはまる処理が分かりません。
C言語とかで言うなら、sprintf のような処理をしたいのですが。

どのようにしたら良いのでしょうか?
教えて頂けると有り難く思います。宜しくお願いします。

Aベストアンサー

/usr/bin/printf があれば以下でOKです。

set CHA_AAA=`printf "%02d" $NUM_AAA`

「"%02d"」の部分の指定方法は、C言語のprintf、sprintfとだいたい同じです。

QCシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法

Cシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法を教えてください
たとえば、
set str = abcdabceabcd
set abc = abc
str中に、abcを現れる数(3)を求める方法を教えてください
Cシェルは詳しい方がいらっしゃいましたら、是非教えてお願いいたします

Aベストアンサー

別に詳しいって訳でも無いですが、リダイレクトしてテンポラリファイルに出力してfgrep等で数えるのが簡単かなーと思いますけど。

http://oshiete.goo.ne.jp/qa/198863.html

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QUNIX(Cシェル)での数値判断での条件分岐がうまくいきません。

いつもお世話になっております。
宜しく御願い致します。

if文で数値判断により条件分岐をしようと思ってます。

条件は”0<変数<=20”(仮)で、エラーだと警告文表示後に変数入力部に戻したいのです。

変数を画面上から”変数 = $<”で読み込み、処理をしたいのですが、うまくいきません。

整数値だとうまく行く方法を見つけましたが、小数値が入るとNG、小数値でもうまく行く方法を見つけました(bcを使用)が、文字列が入力されるとNG、と行き詰まってしまいました。

入力値としては小数値を期待しているのですが、操作する人が間違って”3..2”や”2 5”、”4rr”等が入力された場合も偽の判断をもって処理を戻したいのですが、ifの形式がおかしいとか、文法上のエラーがあると表示され、うまく戻ってくれません。

なにか良い方法はないでしょうか?

要は、if(変数 > 0 && 変数 <= 20) then で変数の値が文字列、小数、整数問わずに処理をしたいだけなんですが・・・。

どうぞ宜しく御願いします。

Aベストアンサー

expr等を使って正規表現で判断するしかないでしょうね。\| の前が小数値、後ろが整数値のチェックです。
expr以外でも正規表現が使えるコマンドなら何でもいいですが。

expr "$var" : '[0-9][0-9]*\.[0-9][0-9]*$' \| "$var" : '[0-9][0-9]*$' >/dev/null

if( $status == 0 ) then
 正常処理
else
 エラー処理
endif

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。


人気Q&Aランキング