• 締切済み

コマンドプロンプトとシェルでの実行結果の違い

OS:Redhat AS v4.0 /etc/init.d/配下の実行ファイルをスクリプトの中で呼び出して いますが、何故かスクリプト実行時と個々のコマンドで実行した時と アプリの文字コードが違いますが、何が原因なのでしょうか? コマンドプロンプトで実行した時:(文字コード)正常 root#/etc/init.d/xxx restart スクリプト経由で実行時:(文字コード)異常root#/opt/tools/script.sh ※スクリプトで/etc/init.d/xxx restart を呼び出すます。。

みんなの回答

  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.4

#3です。 このスクリプト中の /etc/init.d/apache restart で出力されるメッセージと、直接 /etc/init.d/apache restart だけシェルプロンプトから実行した場合で、出力されるメッセージが異なると言うことですよね? 見た限り動作環境に影響を与える部分は無いので、何らかの勘違いがどこかにあると思われますが、これだけの情報からではちょっと推測できません。

rere2006
質問者

補足

はい。直接/etc/init.d/apache restart 実行だと日本語のログメッセージも正常に表示されますが、 スクリプト中の再起動しますと、日本語が文字化けになってしまいます。 他に回避方法があるかどうか調べてみます。 ありがとうございました。

  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.3

script.shの内容を全部書いてください。

rere2006
質問者

補足

Scriptの内容です。 ========= #!/bin/sh # Script Start LOGFILE=/opt/service/`date +%Y%m%d`.log echo "INFO Script <$0> START. 0" >>$LOGFILE # Check service status ps -ef |grep apache STATUS=$? if [ $STATUS != 0 ]; then echo "ERROR apacheサービスは停止されています。" >>$LOGFILE exit 1 fi # Restart service /etc/init.d/apache restart R_STAT=$? if [ $R_STAT = 0 ]; then echo "INFO apacheサービスは正常に再起動しました。" >>$LOGFILE else echo "ERROR apacheサービスは正常に再起動出来ませんでした。" >>$LOGFILE fi # Script end echo "INFO Script <$0> END." 0 >>$LOGFILE exit 0

回答No.2

>スクリプトでの実行=>UTF-8以外の文字コード 常識で考えてそりゃ文字化けするよね。 EUCコードのテキストファイルをWinodwsのメモ帳で 開いて文字化けすると騒いでいるのと同レベル。

rere2006
質問者

お礼

ありがとうございます。 すみません、初心者であまり理解出来ておりません。。 もう少し分かりやすく説明して頂けるとありがたいのですが。。。

回答No.1

>(文字コード)異常root#/opt/tools/script.sh どの環境でどの文字コードで作られたスクリプトですか? 現在のRedhat/Fedora系はEUCコードではなくてUTF-8だったはずです。

rere2006
質問者

補足

Rootユーザ環境で、文字コードはUTF-8です。 コマンドプロンプト実行=>UTF-8 スクリプトでの実行=>UTF-8以外の文字コード

関連するQ&A

  • webからroot権限のコマンドを実行したい

    はじめまして。 プロキシサーバの閲覧許可サイトを変更するCGIを作っています。 許可サイトのリストを更新して、 my $res=system("/etc/rc.d/init.d/squid restart"); または、sudoersの設定も可能なので、 my $res=system("sudo /etc/rc.d/init.d/squid restart"); を実行したいのですが、方法が分かりません。 どなたか、実行方法を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • シェルスクリプトでバックグラウンドで実行したコマンドの実行結果を取得するには

    OS redhat linux シェル bornシェル シェルスクリプトでバックグラウンドで複数のコマンドを実行し、 すべてのコマンドが正常に終了したら次の処理へ進むみたいな事をしたいのですが、可能でしょうか? 直列にすればよいのですが、処理時間短縮の為、並列に処理したいのです。 宜しくお願いします。

  • シェルコマンドについて

    初歩的な質問ですが、質問させてください。 現在MacPortsでApacheやPHP、MySQLなどをインストーをしているのですが、その中で以下のようなコマンドの実行を促されます。 //MySQLインストール時 cd /opt/local; /opt/local/lib/mysql5/bin/mysqld_safe & や //PHPインストール時 cd /opt/local/apache2/modules /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so ここで疑問なのが、cdの以下に続く cd /opt/local; や cd /opt/local/apache2/modules の実行についてです。 実際このコマンドは実行しなくてもカレントディレクトリが変わるだけで、特に意味のなさそうなコマンドなのですが、何か理由があるのでしょうか。

  • シェルスクリプトの動きが不安定

    Redhat9で、DTC-Radiusというソフトを動かしているのですが、/etc/rc.d/init.d/radiusdというスクリプトが正常に動きません。 ☆radiusdの内容 #!/bin/bash # source function library . /etc/rc.d/init.d/functions start() { echo "Starting DTC_Radius: " /usr/etc/radiusd -d /etc/raddb -a /usr/adm/radacct return 0 } stop() { echo "Stoping DTC_Radius:" killproc radiusd return 0 } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; esac ☆エラー内容 /etc/rc.d/init.d/radiusd stop と実行すると Stoping DTC_Radius: /usr/etc/radiusd: Exit on signal (15) Dec 14 16:16:41.411 radiusd[4664] Exit on signal (15) /usr/etc/radiusd: Exit on signal (100) Dec 14 16:16:41.411 radiusd[4663] Exit on signal (100) /etc/rc.d/init.d/radiusd: line 195: kill: (4663) - そのようなプロセスはありませ ん と表示されます。PSで確認すると一応止まっていますが、なんでこんなメッセージが出るのでしょうか? 気持ちが悪いので、出ないようにならないでしょうか?

  • システム停止時にコマンドを実行したい

    システムの停止時にあるコマンドを実行したいと考えています。 ネットでの情報を検索すると /etc/rc.d/halt に実行内容を登録しておけば、そのコマンドが実行されるという内容が ありましたが、実際にやってみると、実行された形跡がありませんでした。 本当にやりたいことは、システム停止時に、「ある常駐プロセスにSIGTERMを発行したい」 ことなのですが、それをコマンドを登録して実行したいと考えています。 もし、/etc/rc.d/haltに登録して実行された方か、 ほかの方法をご存知の方がおりましたら教えてください。 ちなみに、「ある常住プロセスを立ち上げたまま、システムを停止させると、そのプロセスに対して SIGTERMがOSから発行されている」と思われるのですが、このことを明確に記述されたものが 見当たりませんでした。もし、間違いなく、OSからSIGTERMが発行されるなら、それでもかまいませんが、その裏づけだけは、取っておきたいとおきたいと考えています。 この件で、ご存知の方がおりましたら、教えて頂けませんでしょうか。 OSはRedhat linux です。(正確なバージョンは今不明ですが、5.5だったかと思います)

  • Linux起動時にコマンドを実行

    Windowsで例えると、スタートアップにVBSを置くようなことをしたいです。 VineLinuxの起動時に、/etc/init.d/webmin start をさせたい場合、どうやったらいいか教えてください。 起動時のスクリプト実行の練習をしたいので、ツールやwebminの基本機能に頼らず、原始的な方法でやりたいです。 Windowsで例えると、msconfigからやるのではなく、runに直接書き込むような感じでやりたいです。 LinuxなのでVBSでなく*.shを使うのでと思うのですが。

  • コマンドラインによる実行とjupyterでの実行

    pythonの実行には例えばjupyter notebook, spyder, Gooogle collaboなどGUI風の開発環境がありますが、コマンドラインで実行することを想定したものをそのままGUIで実行するにはどうしたらいいでしょうか。 例えば、python hoge.py xxx.dat yyy.dat のようにしてコマンドラインで実行することが想定されているコードですが、hoge.pyをGUIで実行するときにxxx.dat とかyyy.datをどう指定するかということです。ソースプログラムをそれ用に書き換えるということになるのでしょうか。 よろしくお願いします。

  • シェルでコマンドの実行結果を変数に格納する方法

    以下のようなコマンドライン引数を取得するシェルを書いたのですが 実行時にエラーになってしまいました。コマンド(第2引数以降を取得するコマンド)の実行結果を変数に格納するところでエラーになってしまいました。どのようにすればよろしいでしょうか。 「./test2.sh a b c d e」を実行し「a: コマンドが見つかりません」 というエラーが出てしまいます。 (test2.shの内容) #!/bin/sh OUTPUTFILE=$1 SRC_FILES=`"$@" | cut -d ' ' -f 2-` # 第二引数以降を取得 echo $OUTPUTFILE ←ここは表示される echo $SRC_FILES ←ここでエラー

  • linux(redhat)ファイルシステムの復旧について

    お疲れ様です。 Linux(redhat)環境で、あるフォルダ配下をフォルダごとルート直下に移動しようとして以下のmvコマンドを投入しました。 >mv /opt/xxx/test /* コマンドの指定方法に誤りがあったのか、この後lsなどのコマンドが効かなくなってしまいました。 >/bin/ls:そのようなファイルやディレクトリはありません cdコマンドで/opt配下には移動はできるのですが、/binなどは壊れてしまったのか、移動もできません。 /bin配下のコマンドが効かず何もできない状態なのですが、何とか復旧させる手段はないでしょうか。OSを再インストールするしかないでしょうか。 ご存じの方おりましたらよろしくお願いいたします。

  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。