0

JavaGUIから実行するスクリプトがあります。SQLスクリプトを実行し、結果をtmpディレクトリのログファイルに書き込みます。スクリプトの残りの部分はxtermを開き、出力ファイルの結果を画面に表示する必要があります。想定どおりにログファイルを作成し、xtermも開きます。唯一の問題は、その時点以降にフリーズし、プロセス全体を再起動する必要があることです。これは、xtermを開くために使用しているスクリプトの例です。

#!/bin/csh -f



#set MYSQL=${MYSQL_HOME}/mysql
set PSQL=${PSQL_HOME}/psql
set MORE=/usr/xpg4/bin/more


set REPORT=/h/Scripts/DataValidation/ParametersDataReport.sql


#${REPORT}

${PSQL} ${USER}<${REPORT} 

#Get the number of lines in the report file for scrollbar control
#set lc='wc -l /tmp/results.log'
#echo $lc

#Open an extra terminal

set title="EARTH ORIENTATION PARAMETERS REPORT"

/usr/openwin/bin/xterm -T "$title" \
-bg lightblue -fg black -sb -sl 2000 -ut -e ${MORE}  \
-f /h/USERS/Pablito/results.log     \

exit

MOREおよびtitleは、スクリプトファイルで変数として定義されています。スクリプトがクラッシュして端末がハングアップするのはなぜですか?これはセグメンテーション違反でしょうか?

私はssh接続を介してこれらすべてを行っています。私は発行されたコマンドを見ました、そしてこれはそれが述べていることです:

/usr/openwin/bin/xterm -sb -ls -display@d&@;

ターミナルでこのコマンドを入力すると、結果がかなり表示されました。GUIからこれを実行できないのはなぜですか?

/usr/openwin/bin/xterm -T EARTHORIENTATIONPARAMETER -geometry 104x50+0+80 -bg lightblue -fg black -sb -sl 2000 -ut -e /usr/xpg4/bin/more -f /tmp/results.log

GUIを使おうとすると、フリーズするだけです(つまり、GUIまたはターミナルにアクセスできません)。エラーも含まれています

bg: Command not found

GUIが起動された端末。

私が本当に尋ねるべきことは、cshスクリプトで次のコマンドを実行する方法だと思います。これは、ターミナルから手動で入力すると、目的の効果が得られるためです。

xterm -T "EarthOrientation Parameter" -geom 104x50+0+80 -bg pink -fg black -sb -sl   2000 -ut -e /usr/xpg4/bin/more -f /h/USERS/local/Pablito/results.log
4

1 に答える 1

1

質問のスクリプトのバージョンは、実際に実行しているものと一致すると思います。

/usr/openwin/bin/xterm \
-title "$title"        \ 
-geometry 100x40+0+90
-bg lightblue -fg brown \
-sb -sl 2000 -ut
-e ${MORE} -F /tmp/results.log

これをcshスクリプトとして呼び出す場合は#!/bin/csh -f、上部にaが必要です。または、明示的にとして呼び出す必要がありますcsh -f script-name

いくつかの円記号がありません。行に何もないので、それに\続く-geometry行はxtermコマンドへの引数として渡されません。あなたが私たちに示したコードは、次のものと同等です。

/usr/openwin/bin/xterm -title "$title" -geometry 100x40+0+90
-geometry 100x40+0+90 -bg lightblue -fg brown sb -sl 2000 -ut 
-e ${MORE} -F /tmp/results.log

これはコマンドを指定せずに呼び出す必要があるxtermため、デフォルトのシェルがインタラクティブに実行されます。次の行でエラーメッセージが表示されます。

-geometry: Command not found.
-e: Command not found.

ただし、GUIからスクリプトを呼び出す場合は、これらのメッセージは表示されない可能性があります。

と行\の最後に文字を追加すると、その問題が解決するはずです。geometry-sb

スクリプトはフォアグラウンドで(コマンドxtermの末尾を付けずに)呼び出すため、スクリプトはウィンドウが閉じるのを待ってから終了します。&xterm

あなたはそれが「フリーズする」と言います。それが何を意味するのかはわかりませんが、xterm閉じてスクリプトが終了した後に何が起こるかは、まだ示していないJavaGUIコードによって制御されます。

繰り返しますが、実際に実行しているスクリプトにはこれらの円記号がないことを前提としています。そうでない場合は、質問を更新して、実行している正確なスクリプトを表示する必要があります。

アップデート :

どうやら私の仮定は間違っていました。実際のスクリプトは、質問に最初に表示されたものとはかなり異なります。

問題の原因となっている正確なスクリプトまたはプログラムをコピーして貼り付けることの重要性、または確認した修正バージョンが同じ問題を引き起こすことの重要性を十分に強調することはできません。スクリプトの概算を投稿しようとすると、問題の原因となるコードを省略する可能性が非常に高くなります。

http://sscce.org/でこれについて説明していますが、現在サイトはダウンしているようです。Googleのキャッシュはここにあります。

それで、これが今あなたの質問にあるスクリプトの関連部分です:

/usr/openwin/bin/xterm -T "$title" \
-bg lightblue -fg black -sb -sl 2000 -ut -e ${MORE}  \
-f /h/USERS/Pablito/results.log     \

exit

コメントで、あなたは次のようなエラーが発生していると言っています

-bg Command is not found

それはそれに答えようとする人にとって重要な情報なので、それは本当に問題になるはずです。

(これは本当に重要だと思い-bg: Command not found.ます。繰り返しになりますが、正確なコピーアンドペーストは、コードの場合と同様にエラーメッセージの場合にも重要です。)

今の問題は、xterm行の円記号の後にスペースがあることだと思います。\行継続文字は、行の最後になければなりません。バックスラッシュの後にスペースがある場合、それは継続文字として扱われず、次の行は別のコマンドとして扱われます。

そして、\コマンドの最後の行は役に立たず、潜在的に危険です。exitその行を次の行と結合します。これは空であるため、おそらく無害ですが、その空白行を削除すると、その単語が引数として。に渡されxtermます。

最も簡単な回避策は、コマンド全体がバックスラッシュなしで1行(非常に長い)になるようにスクリプトを変更することです。

于 2012-08-06T20:59:36.730 に答える