cshのechoに関して

このQ&Aのポイント
  • cシェルでのechoコマンドに関する質問です。クラスパスの設定時に発生しているエラーについて解決策を教えてください。
  • 現在、cシェルでJavaを実行するプログラムを組んでいます。クラスパスの設定時にエラーが発生しており、うまくパスがセットされていないようです。
  • 具体的には、クラスパスを設定した際に、期待しているパスとは異なる結果が出てしまいます。この問題の解決策を教えていただけませんか?
回答を見る
  • ベストアンサー

cshのechoに関して

どなたかご存知の方がいましたら、教えてください。 現在cシェルでJavaを実行するプログラムを組んでいます。 そこで、クラスパスを設定したいので以下のようにしています。 set class_home=/home/user/test set lib_home=${class_home}/lib echo ${class_home} echo ${lib_home} java -classpath .:${class_home}:${lib_home}/XXX.jar TestClass 2番目のechoで『/home/user/test/lib』が出ることを想定していますが、『/libe/user/test』と出てしまいます。 色々試しましたが解決策が見つかりません。 ご存知の方がいましたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

よく見たら、「/libe/user/test」と出力されるんですね 「/home/user/test」じゃなくて。 それで、わかりました。 改行コードがDOS(CR+LF)のスクリプトを、 cshがunix系の改行コード(LF)として実行としています。 set class_home=/home/user/test が set class_home=/home/user/test[CR] ([CR]はCRのコード)と解釈されて set lib_home=${class_home}/lib が set lib_home=/home/user/test[CR]/lib になって echo ${lib_home} で /home/user/test まで表示したところでCRで行頭に移動、その続きの /lib を表示するので、 画面上には後からの出力された文字だけが残るので /libe/user/test と表示される、ということです。 スクリプトの改行コードをLFにしてください。 エディタで設定を変えるとか、ツールを使うとかやりかたがありますが、これ以上詳しくは、あなたがどんな環境やOSを使用しているか、わからないので、説明できません。

system0001
質問者

お礼

ご回答ありがとうございました。 改行コードが原因でした。 ご指摘頂いてとても助かりました。 本当にありがとうございました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

こちらでは再現しませんでした(手元にtcshしかないので、その差かもしれませんが) やってみるべきことしては ・-xや -v オプションで実行の様子を確認する ・set lib_home="${class_home}/lib" 等とダブルクォートで括る ・B-sh系にする くらいでしょうか

system0001
質問者

お礼

ご回答ありがとうございました。 改行コードが原因でした。 まだまだシェルは使いこなせていないので 色々と勉強してみます。 本当にありがとうございました。

関連するQ&A

  • シェルからJava起動

    シェルからJavaを起動するには、 setenvでCLASSPATHを事前に設定し、 java クラス名 では実行できず、 java -classpath クラスパス クラス名 で実行するしかないのでしょうか? 以下では実行できませんでした・・ #!/usr/bin/csh setenv CLASSPATH /export/home/test/jdk13/lib/tools.jar setenv CLASSPATH /export/home/test/batch/java:${CLASSPATH} java B123

  • WIN98seへのtomcatの実装方法について

    tomcatのクラスパスの設定についてですが、 WIN98SEでは、 autoexec.batで、行うのでしょうか ちなみにJSDK1.3は、Dドライブに入っています、 tomcatも同じドライブに入っています。 java pressの15号を見ると以下のように書いています。 c:\jakarta-tomcat\lib\jasper.jar c:\jakarta-tomcat\lib\servlet.jar c:\jakarta-tomcat\lib\webserver.jar c:\jakarta-tomcat\lib\xml.jar と書いてあるのですが、 DOS画面で、 D:WINDOWS>set classpath このあとに続けて書けばよいのか教えてください。 初歩的な質問で、申し訳ありませんが なるべく詳細に教えてくださいませんでしょうか?

  • CLASSPATHを設定しても、『ClassNotFound~』になってしまう

    はじめまして、質問をさせていただきます。 JDBCを利用して、データベースにアクセスするため、2週間前から javaを勉強している初心者です。 色々なサンプルを参考にして、javaコードを作成しましたが、 java実行時に『ClassNotFoundException』になってしまいます。 過去の質問から、No.952983やNo.957189を参考にさせていただき、JDBCドライバー をダウンロードし、CLASSPATHの設定をしてみましたが変わりませんでした。 その後も色々と調べましたが、なぜCLASSPATH設定が有効にならないのか分かりません。 お手数かとは思いますが、御教授のほどよろしくお願いします。 サーバのOS :LINUX(FedoraCore5) データベース :Postgresql8.1.4(rpmでインストール) JDKのVer   :1.5.0_08 JDBCドライバー:postgresql-8.1-407.jdbc3.jar ↓.bash_profileの設定 export JAVA_HOME=/usr/java/jdk1.5.0_08 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/$JAVA_HOME/lib/postgresql-8.1-407.jdbc3.jar ↓『set』コマンドで確認したCLASSPATH CLASSPATH=.:/usr/java/jdk1.5.0_08/lib/tools.jar://usr/java/jdk1.5.0_08/lib/postgresql-8.1-407.jdbc3.jar 以上

    • ベストアンサー
    • Java
  • csh (tcsh)での環境変数の長さの制限について教えて下さい。

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

  • javaの実行環境

    javaの勉強をしようと思い、以下のhelloworldコードを書いてみました。 public class HelloWorld { public static void main(String[] args) { System.out.print("Hello World\n"); } } それを、以下のようにlinux環境(ubuntu 10.10)でコンパイル実行しようとしたのですが、 javac HelloWorld.java java HelloWorld.class Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。そこで色々調べて jar cvmf manifest.mf test HelloWorld.class とjarファイルを作成して実行したところ、適切に"Hello World"が表示されました。 (manifest.mfの中身は"Main-Class: HelloWorld"1行だけです。) その後、このjarファイルをwindows環境に持っていって実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。 linux環境で、"echo $CLASSPATH"を実行しても何も表示されず、CLASSPATHはどこにも通っていないようです。 また、windows環境のDOS画面にてSETを実行し、環境変数を表示させてもCLASSPATHはありませんでした。(javaはインストール済みです。) で、質問です。 1)なぜjarにすると実行でき、classファイルのままでは実行出来なかったのでしょうか? 2)windows環境で、CLASSPATHを設定したほうが良いのでしょうか?設定する場合は、prgramfiles\java\binで良いのでしょうか? 以上、長くなり申し訳ないのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • クラスパスがとおりません。

    クラスパスがどおしてもとおりません。 # javac JdbcAccessTest.java # java JdbcAccessTest.class Exception in thread "main" java.lang.NoClassDefFoundError: JdbcAccessTest/class 以下のようにパスを通しているのですが。。 # pwd /export/home/test/webapp/sample/WEB-INF/classes # env CLASSPATH=/export/home/test/webapp/sample/WEB-INF/classes ・環境はSolarisです。よろしくお願いします。

    • ベストアンサー
    • Java
  • JavaアプレットからローカルJarを利用する方法

    クライアントのローカルフォルダに格納されているJarファイルを Javaアプレットから呼び出して使用することは可能でしょうか? クライアントにC:\Applet\lib\app-test.jarの様に、jarファイルが格納されているとして、 Javaアプレットからこのjarを使用しようするには、どのような設定が必要でしょうか? 現在は、NoClassDefFoundErrorになってしまいます。 eclipseで開発するときは、ビルドパスに上記パスを設定するので、問題なく動作します。 また、app-test.jarをC:\Program Files\Java\jre1.5.0_22\lib\extフォルダに格納すれば、 正常に動作します。 CLASSPATHを設定すれば良いのかと思い、C:\Applet\lib\app-test.jarを クライアントの環境変数(CLASSPATH)に登録しましたが、同じエラーが発生します。 C:\Applet\lib\app-test.jarを利用するために必要設定(環境変数、HTMLのobjectタグ、 java.policyなど)があれば教えてください。 以上

    • ベストアンサー
    • Java
  • Servletから呼ぶ外部コマンドの環境変数をJavaでセットしたいです

    JavaServletから、以下でJavaのバッチを呼んでいます。 Process process = Runtime.getRuntime().exec("java -classpath /export/home/test Batch001"); Batch001で使用する環境変数をJavaでセットし別途シェルファイルを作らずにすむ方法はありますでしょうか? シェルであれば、以下のようにできますがファイルを増やしたくないのです。 #/bin/csh/bin setenv LD_LIBRARY_PATH /xxx/xxx/xxx java -classpath /export/home/test Batch001

  • TOMCATの設定に関して

    TOMCATの設定に関しての質問です。 OSはWinMeです。 Cの直下にあるautoexec.batファイルに 以下の3行を追加しました。 SET JAVA_HOME=C:\j2sdk1.4.0_01 SET TOMCAT_HOME=C:\jakarta-tomcat-3.2.4 SET CLASSPATH=C:\jakarta-tomcat-3.2.4\lib\servlet.jar *結果* -------------------------------------------------------------------------- C:\jakarta-tomcat-3.2.4\bin>startup Unable to set CLASSPATH dynamically. Note: To set the CLASSPATH dynamically on Win9x systems only DOS 8.3 names may be used in TOMCAT_HOME! Setting your CLASSPATH statically. Using CLASSPATH: C:\jakarta-tomcat-3.2.4\classes;C:\jakarta-tomcat-3.2.4\lib\ant .jar;C:\jakarta-tomcat-3.2.4\lib\jasper.jar;C:\jakarta-tomcat-3.2.4\lib\jaxp.jar ;C:\jakarta-tomcat-3.2.4\lib\servlet.jar;C:\jakarta-tomcat-3.2.4\lib\webserver.j ar;C:\jakarta-tomcat-3.2.4\lib\servlet.jar;C:\j2sdk1.4.0_01\lib\tools.jar 環境変数のための領域が足りません. Starting Tomcat in new window -------------------------------------------------------------------------- 原因が良く分かりません。本に書いてある通りにやったのですが、このエラーの 意味を教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • Linuxでの質問。(echoコマンドなど)

    Linuxでの質問。 1.echoコマンドで* $home=' home ' (ただし home はシェル変数homeの値)と表示したい。echoコマンドにどのようは引数を渡せばよいのでしょうか。 実行例 % echo 適切な引数 * $home='/home/gbu/myname' 答えは echo \* "\home="\'$home\' でよろしいですか。 echo \* '$home='\'$home\' と入力しても同じ結果が出るのですが、どっちでいいでしょうか。 2.次の2つのコマンドラインは実行結果が異なる。その違いが生じる理由は何でしょうか。 % cd ; (cd / ; pwd) ; pwd % cd ; cd / ; pwd ; pwd まったく初心者です。manコマンドを使って調べたのですが。。 man () って入力しても、何にも出なくて、ぜひ教えてください。お願いします。 3.演習課題にならって、 エイリアスが子プロセスのシェル(サブシェル)に引き継がれるかどうかを確かめる手順の例を示しなさい。っていう課題が出ました。どういうふうにやればいいでしょうか。教えてください。 演習課題 シェル変数と環境変数の違いの確認 % set foo=1 シェル変数fooに値を設定する。 % setenv FOO 1 環境変数FOOに値を設定する。 % echo $foo シェル変数fooの値を表示する。 % echo $FOO 環境変数FOOの値を表示する。 % tcsh 子プロセスとしてシェルを起動する。 (ここから、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値の表示を試みる。(引き継がれていない。) % echo $FOO 環境変数FOOの値を表示する。(引き継がれている。) % set foo=2 シェル変数fooに値を設定する。 % setenv FOO 2 環境変数FOOに値を設定する。 % exit 子プロセスとしてシェルを起動したシェルを終了する。 (ここまで、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値を表示する。(子プロセスでの変更は影響しない。) % echo $FOO 環境変数FOOの値を表示する。(子プロセスでの変更は影響しない。) エイリアスの意味を調べたのですが、「コマンドを別名で登録したもの」と解釈されていて、これはどういうことなんでしょうか。 この問題の意味は、課題にならって set alias=1 と設定して、次は setenv ALIAS 1 そして、課題のように、fooのとこをalias、FOOのとこをALIASと変えて、最後echo $ALIAS を調べればいいのですか。 学校の宿題ですが、やってもぜんぜん意味不明なので、助けてください。

専門家に質問してみよう