度々申し訳ございません。
現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。
その、Linuxマシン2からログアウトする際に、
"exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。
どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。
よろしくお願い致します。
No.1
- 回答日時:
rshコマンドを利用するのはだめですか?
Linuxマシン2にログインせずに、Linuxマシン1から、Linuxマシン2のコマンドを
実行できます。
http://www.nifty.com/webapp/digitalword/word/017 …
No.2
- 回答日時:
exitはそれを実行しているシェルを終了させるだけですから、シェルスクリプトの中からexitでログインシェルを終了させることは出来ません。
案1) exec スクリプトファイル名
とexecコマンドを使い、ログインシェル終了とスクリプト実行を同時に行う
案2) . スクリプトファイル名
(ただしログインシェルが/bin/shの場合のみ)
ドットコマンド(ピリオド)を使ってログインシェル内でスクリプトを実行させる
案3) ログインシェルのプロセスIDを調べてそのプロセスをkillコマンドで終了させる
普通は案1でいいと思います。exec実行時点でログインシェルは終了しているので、スクリプト内のexitの実行でtelnetセッションが終了します。
この回答への補足
少し質問内容を補足いたします。
PC1(Linux)にシェルスクリプト1(SS1:/usr/bin/expect)があり、PC2(Linux)にシェルスクリプト2(SS2:/bin/sh)が置いてあります。
まず、PC1のSS1を実行します。このスクリプトは、自動的にPC2へTelnetでログインし、PC2内のSS2を実行し、「interact」を実行します。
SS2は、PC2にあるプログラム(P1)を実行します。P1は、実行結果を画面に表示します。次にSS2は、ユーザからの入力を受け付け、ユーザが「OK」と入力すると、次のプログラム(P2)を実行します。
# 「NG」と入力すると、再度P1を実行します。
P2でも同様な処理を行い、全部で3つのプログラムを実行して、SS2を終了します。
ここで問題が起きていて、理想は、SS2が終了して、Telnetからログアウトし、SS1の方に戻って欲しいのですが、それが出来ていません。
# SS1に戻ってこなくても、少なくともTelnetからログアウトしたい
そのため、SS2の最後に「exit」と記述しているのですが、それではダメなんですよね。。。
そこで、notnotさんのおっしゃる通り、
exec "スクリプトファイル名"をSS2の最後に記述すればよいのですか?その際、"スクリプトファイル名"はどのファイル名になるのですか?
大変ご迷惑をおかけして申し訳ありませんが、今一度ご教授よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
#2です。
expectの質問をしていた方ですね。それなら、expectでSS2の終了を検知して、マシン2に対してexitを送るという手もあるとおもいますが。
#2で書いたのは、SS2を実行するために SS2 と打つ代わりに、exec SS2 と打つということです。
例えば、ログインシェルで sleep 10 と打つと10秒後にログインシェルのプロンプトが出ますが、exec sleep 10 と打つと、10秒後にログアウトします。つまりコマンド実行終了後にログインシェルに戻らないということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Linuxについて質問です。 引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つ 1 2023/02/03 03:46
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をdiff.shとして、以下のように2つのテキストフ 1 2023/02/03 20:06
- その他(OS) CloudreadyでLinuxのセットアップが出来無い 1 2022/04/06 12:36
- UNIX・Linux Linuxについて2つ質問したいです。 ① シェルスクリプト名をawk1.shとして、指定されたデー 1 2023/02/03 03:49
- タブレット Linuxパソコンからのログインと表示される 1 2023/04/12 15:58
- UNIX・Linux Linux Mint 日本語入力できなくなった 4 2022/05/13 16:15
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をfind.shとして、以下の条件をすべて満たすファ 1 2023/02/03 03:50
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- ドライブ・ストレージ 複数のパソコンが自宅にあり、互いの固有のHD、光学ドライブを相互にアクセスする方法。その2 3 2022/12/16 09:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルの -eq の動作について
-
diskpart でパーティションの一...
-
シェルの実行について
-
シェルスクリプト(if文)
-
FTPコマンドの戻り値について
-
telnet へのパイプができないです
-
時間を計算する方法
-
Viで書き込もうとすると、保...
-
書き込み権限が無いためコピー...
-
DOSコマンドでのワイルドカ...
-
/ が何時の間にか「Read-only f...
-
ウィンドウズお自動起動後、ラ...
-
メールサーバの/var/spool/mail...
-
CPUのbit数を調べるコマンド
-
solaris ディスク情報の見方に...
-
cactiでグラフが表示されない
-
別名でリンク先を保存。
-
【ターミナル】MacBookにディー...
-
IBM漢字コードのSJIS変...
-
snmpでMIB取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
FTPコマンドの戻り値について
-
cshで変数名の入れ子ができない
-
lsコマンドの色設定が反映されない
-
diskpart でパーティションの一...
-
実行中のシェルスクリプト自体...
-
Mac OSXのターミナルでemacsを起動
-
cronでftp自動転送を行いたい
-
telnet へのパイプができないです
-
cshの標準出力を制御したい
-
複数の処理を順番にログアウト...
-
vagrant upでエラーが表示され...
-
UNIX Cシェルで実数の比較
-
kshでのcase文条件範囲について
-
空白を含んだシェル変数の代入
-
shellから起動したkterm上でコ...
-
PHP4の Warning: pg_freeresul...
-
メニュー画面よりコマンド実行...
-
リモートシェルでファイルをroo...
-
cygwinシェルスクリプト内での...
おすすめ情報