• ベストアンサー
  • 暇なときにでも

.shの実行がうまくきません

こんにちは、お世話になります。 Linux初心者で、RedHat9を使用しています。 ターミナルを立ち上げて直打ちでコマンド入力をすればうまくいくのに、 同じ内容を.sh ファイルに記述したものを実行してうまくきません。 例:set.shの内容 PATH=$PATH:/test/bin export PATH これをターミナルで ./set.sh と実行すると ': not a valid identifier 'PATH と表示されます。 この他にも、smbmount コマンドを.sh ファイルに記述し、実行した際も コマンド直打ちでは出ないエラーが出てしまいました。 ちなみにログインはROOTで入っています。 みなさんご教授ください。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数1716
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1
  • osamuy
  • ベストアンサー率42% (1231/2878)

シェルスクリプトの改行コードがDOS形式になっているのでは。

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231014/

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 その通りでした。 Winのテキストエディタでファイルを作成し、Linuxにコピーして使っていました。 一度消去し、同じ内容のものをLinuxのViエディタで作成したところ、 問題なく動作しました。 ありがとうございました。

関連するQ&A

  • rootにpathを通す方法

    こんにちは、kaituyoと申します。 Solaris8でのpathの通し方の質問です。一般ユーザーの場合ですとHOMEディレクトリの中の「.cshrc」ファイルにpathを書きこみシェルを再実行させればコマンドが使えるようになりました。しかし、rootでログインすると使えません。それで、rootにもpathを通そうかしたら「.cshrc」が見つかりません。  rootでpathを通してコマンドを実行できるようにはどうしたらいいのでしょうか? よろしくお願いします。

  • phpでsudoコマンドの実行

    ブラウザからAndroidアプリのプロジェクト作成を可能にしようとしています。 Linux端末もしくわターミナルのroot権限で 「android create project --target ○ --name △ --path /var/../../.. --activity △ --package ■〇△」←「..や〇、△等は適当です(笑)」 というコマンドを実行するとプロジェクトが作成されます。端末、ターミナルでのこのコマンド実行には成功しています。 上記のコマンドをブラウザで実行させようと、まず一般ユーザモードでsudoコマンドでの実行を試みました。 「sudo /home/../../android create project --target ○ --name △ --path /var/../../.. --activity △ --package ■〇△」 というコマンドを実行するとsudoコマンドでもプロジェクトが作成されます。端末、ターミナル内でのこのコマンド実行も成功しています。 次にブラウザからの実行ですが、 ブラウザからphpのsystem関数を用いてsudoコマンドを使ったコマンド実行を試みているのですが、できません。 自分なりに調べて、sudoコマンドに必要なパスを入力不要にし、サイトに書いてあったので、viコマンドで、sudoure内の「Defaults requiretty」に#も追加しました。 ブラウザでphpのsystem関数を用いて上記コマンドの実行は不可能なのでしょうか?

    • 締切済み
    • PHP
  • pathを追加するスクリプト

    初歩的な質問内容ですが、よろしくお願いします。 ある作業マシンにログインするたびに、 export PATH="/hoge:$PATH" と打つのが面倒なので、スクリプトを作ることにしました。 スクリプトを作るのは初めてなので、ちょっとネットで調べて、 path.shというファイルに #!/bin/sh export PATH="/hoge:$PATH" echo $PATH と記述して、 $ sh path.sh と実行しました。 すると、スクリプト内のechoによって表示された$PATHを見ると hogeの部分がちゃんと追加されているように見えるのですが、 もう一度改めて(スクリプトでなく)$ echo $PATH と打ってみるとhogeは$PATHに追加されていず、 実際にもpathが通ってくれてないです‥。 理由、解決策など、教えて頂けるとうれしいです。 よろしくお願いします。 --- また、普通はこういう場合、.bash_profileなどを編集すると思うのですが、今回それはしたくないです。理由は、 自分がこのマシンの使うのが一時的ということもあって、 自分のユーザとしてでなく、rootとして入っている為です。 自分以外の人もrootでログインすることが多いので、 スクリプトを実行するような形でpathを変更したいです。

  • batファイルの実行について

    batファイルを作成しました。 (ATコマンドにてスケジュールさせたいと考えてます。) ファイル自体をダブルクリックで実行すると正常に処理が完了しますが、コマンドプロンプトから実行しようとすると以下のエラーが発生します。 〓〓〓〓〓〓〓〓〓〓〓〓 C:\>cmd /c "E:\MirroringTool\SimpleFolderMirror\test.bat" 指定した名前は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されません。 〓〓〓〓〓〓〓〓〓〓〓〓 実行させたいbatファイルは以下のとおりです。 〓〓〓〓〓〓〓〓〓〓〓〓 echo off cls rem ↓SimpleFolderMirror.exeを解凍したフォルダ SET EXEFOLDER_PATH="E:\MirroringTool\SimpleFolderMirror\" rem ↓ログの出力フォルダ・ファイル SET LOG_DIR="E:\MirroringTool\SimpleFolderMirror\logs\" rem ↓ミラー元フォルダ1 SET COPY_FROM_PATH_01="S:\" rem ↓ミラー先フォルダ1 SET COPY_TO_PATH_01="E:\ORANT\OWS" cd %EXEFOLDER_PATH% SimpleFolderMirror.exe %COPY_FROM_PATH_01% %COPY_TO_PATH_01% > %LOG_DIR%logs.txt 〓〓〓〓〓〓〓〓〓〓〓〓 cd %EXEFOLDER_PATH%のところまでは処理は完了しているようなので、最後の行のところで発生しているようです。 何が原因でエラーが発生してしまっているのでしょうか? 宜しくお願い致します

  • JAVAの環境変数が初期化されてしまいます

    Linux初心者です。 JDK6.0をインストールして、環境変数を次のように設定しました。 export JAVA_HOME=/usr/local/jdk1.6.0 export PATH=$JAVA_HOME/bin:$PATH これで一旦はjavacやjavaコマンドが使えるようになるのですが、 bashを再起動すると、また使えなくなるので再設定しなければなりません。 調べてみた所、homeディレクトリの.bash_profileを変更すると 再設定の必要がなくなると書いていたので、 # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" → export JAVA_HOME=/usr/local/jdk1.6.0 → export PATH=$JAVA_HOME/bin:$PATH fi と記述してみたのですが、やはりbash再起動後のPATHに 上記のパスは含まれていません。 私の記述方法が間違っているのでしょうが、 どうすれば自動的にパスを通すように設定できるのでしょうか? ターミナルはubuntu6.10からGNOME端末を使用しています。 よろしくお願いします。

  • ubuntuのコマンドをファイルから実行したい

    ubuntu初心者です。 ターミナルのコマンドを自動的に複数実行するために、ファイルを読み込ませて、コマンドを実行したいのですが、そんなことできますか? イメージとしてはDBでSQL文が書かれたファイルを実行する感じです。

  • リモートシェルでファイルをrootで実行させる方法

    UNIX1マシンから一般ユーザーで、ramshを使って UNIX2マシンのシェルをrootで実行させる、という仕組みを 自動化させたいのですが、パスワードが聞かれるためうまくいきません。 何か良い方法はあるでしょうか? もしくは一般ユーザーがUNIX2のシェルを実行し、その中で suコマンドを使ってrootであるファイルを実行する、というパターン でもいいのですが。 宜しくおねがいします。

  • バックグランド実行における漢字出力不可の対策方法を教えてください。

    バックグランド実行における漢字出力不可の対策方法を教えてください。 Linux(Ecolinux9.10)で夜間自動バックアップシステムを稼動させていますが、バックアップが正常に処理されたかどうかを毎朝自分のWindowsマシン上で確認するために、記録されたファイル名を(インターネット経由で)メールにて送信しています。しかし、毎回受け取っているファイル名は漢字の部分がすべて"¥"が先頭に付いたエンコード文字となって受け取っています。 一連の処理はシェルとして、すべてスケジュール起動しています。 原因を調べたところ、作成されたファイルの中身を見るコマンドtarにてリダイレクションを使って出力したファイルが必ず化けてしまいます。コマンドラインでは、root実行すると発生するようです。また、スケジュール実行では必ず発生します。 そこで質問ですが、root環境でもしっかり漢字のまま、ファイルに出力するようにシェルを工夫する方法、または受け取ったメールを漢字にデコードされた状態になる方法を教えていただけないでしょうか?よろしくお願いします。 なお、ネットで調べた結果、シェルに"export=~"を入れて、シェルを日本語環境で動作させているつもりです。想像では、日本語ターミナル上で動作させることで問題が解決かなと思っていますが、肝心の日本語ターミナルが不明です。

  • Cシェルでエラーハンドリングする方法について

    Cシェルでエラーハンドリングする方法について 特定のファイルをしたのディレクトリに移動させる際、特定ファイルがなければ、処理を終了するという記述の仕方を教えていただきたいです。 すでに、以下のように記述をしてファイルを指定したディレクトリへ移動する動作確認はできています。 ------------------------------------------ set dir1=/export/home/username/test1_dir set dir2=/export/home/username/test2_dir mv ${dir1}/*.log /export/home/username/mv_dir mv ${dir2}/*.csv /export/home/username/mv_dir ------------------------------------------ この場合、*.log、*csvがディレクトリ内に存在すれば、移動先ディレクトリへ移動し ファイルがなければそのまま終了しています。 ファイルがなかったとしても、シェルが実行中のまま終わらなかったり エラーがでてしまうことはありませんでしたが、 念のため、ファイルが存在しない場合、何もせず処理を終了する というエラーハンドリング処理を入れたいと思うのですが、 どのように記述したらよいでしょうか? if (条件式) コマンド行 で実施ができるのか?と思うのですが どのような記述となりますでしょうか。

  • javacの実行ができません

    javacの実行ができません。javacコマンドを打つと 'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出ます。ちなみにCLASSPATHはありませんでした。PATHも通したのですがどうすればいいかわかりません。 Javaフォルダにはjdk1.6.0_13とjre6があります。 よろしくお願いします。 これからJavaを学ぶのでぜんぜんわかりません。

    • ベストアンサー
    • Java