質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

4回答

6645閲覧

scriptコマンドをシェルスクリプトで記述した際の、exitについての理屈

taiyouman

総合スコア1

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/05/27 14:49

編集2020/05/27 22:48

知りたい事

/etc/profileにscriptコマンドを記述し、そのすぐあとにexitコマンドを記述する事で
exitの回数が減る理屈がわからないので、教えていただきたいです。

■詳細な内容として
例えば、Aサーバ(Linux)の/etc/profileに下記のように記載したとします。(コマンドの内容自体は、気にしないでください)

#例:1 script -f /var/log/script/`whoami`_`date '+%Y%m%d%H%M%S'`.log

このAサーバにteratermでログインした際、scriptコマンドが実行され、exitコマンドを入力するまでの操作ログを指定のファイルに出力し、再度exitコマンドでサーバからログアウトという動作になるかと思います。

これを

#例:2 logfile=/var/log/script/`whoami`_`date '+%Y%m%d%H%M%S'`.log if [ ! -e $logfile ] then script -f $logfile exit fi

このように記載した場合(※無限ループの課題は一旦置いておいてください)、今度はAサーバにteratermでログインした際、scriptコマンドが実行され、exitコマンドを入力するまでの操作ログを指定のファイルに出力し、そのexit1回でサーバからもログアウトできる動作になるので、例:1の時はscriptコマンド終了時のexitと、サーバログアウト時のexitと2回exitするところを、「例:2ではexit1回で済む」理屈がわからないです。

例:2だと、ログインした時点で「scriptコマンドが実行されてexitされる」になるのではないかなぁと思ったのですが、検証時には、例:2の方法でサーバログアウトするまでの操作ログが指定のファイルに出力されてたので。

調べても有益な情報が見つけられなかったので、ご存じの方いらっしゃれば
どうか教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

angel_p_57

2020/05/27 16:41

> scriptコマンド終了時のexitがなくなる 主観が混じった表現なので、質問の意図が取りづらいです。 「exit 入力で script が終了した直後に、exit を入力することなくサーバからもログアウトしている」ことを意図しているのでしょうか。
taiyouman

2020/05/27 22:54

すみません、足らない点があったので、文章を編集しました。
guest

回答4

0

ベストアンサー

scriptコマンドが実行され、exitコマンドを入力するまでの操作ログを指定のファイルに出力

おそらく、scrpitコマンドの意味を誤解しています。

端末から、下記のように打った場合、

sh

1script -f xxx.log 2ls

scriptコマンドの実行が終わってから、lsコマンドを入れていると思っていませんか?

sh

1script -f xxx.log 2ps f

と打つと分かりますが、

plain

1 9104 pts/3 Ss 0:06 /bin/bash 216949 pts/3 S+ 0:00 \_ script 316951 pts/3 S+ 0:00 \_ script 416952 pts/1 Ss 0:00 \_ bash -i 516971 pts/1 R+ 0:00 \_ ps f

のように、scriptコマンドはずっと実行中で、bash等のシェルが動き、psコマンドはscriptのひ孫プロセスです。

exitと打つと、bash -iが終了するのでscriptも終了します。

下記のようなシェルスクリプトを実行すると、

sh

1#!/bin/sh 2script -f xxx.log 3date

exitを入れて初めてdateが動きます。

投稿2020/05/28 11:27

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

取り敢えず時系列的に処理を書くので見比べて頂ければ。

例1:

  1. SSHDなど: ログインシェル起動
  2. ログインシェル: /etc/profile読み込み開始
  3. ログインシェル: スクリプト起動

 3.1. スクリプト: シェル起動
3.1.1. シェル: ユーザと対話
3.1.2. シェル: exit入力受付
3.1.3. シェル: 終了
3.2. スクリプト: シェル終了検出
3.3. スクリプト: 終了
4. ログインシェル: /etc/profile読み込み完了
5. ログインシェル: ユーザと対話
6. ログインシェル: exit入力受付
7. ログインシェル: 終了(ログアウト)

例2:

  1. SSHDなど: ログインシェル起動
  2. ログインシェル: /etc/profile読み込み開始
  3. ログインシェル: スクリプト起動

 3.1. スクリプト: シェル起動
3.1.1. シェル: ユーザと対話
3.1.2. シェル: exit入力受付
3.1.3. シェル: 終了
3.2. スクリプト: シェル終了検出
3.3. スクリプト: 終了
4. ログインシェル: exit実行 → 終了(ログアウト)

投稿2020/05/28 03:54

angel_p_57

総合スコア1681

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

取り敢えず修正依頼は出しました。

が、それはそれとして、scriptコマンドのことは一旦置いておいて、/etc/profile に単に exit とだけ書いたら、ログイン時にどういう振る舞いになるか把握していますか?
その話の延長に過ぎないと思いますが。
※把握していない場合、実際のサーバで安易に試さないようご注意ください。

投稿2020/05/27 16:46

angel_p_57

総合スコア1681

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このAサーバにteratermでログインした際、scriptコマンドが実行され、exitコマンドを入力する事でそのプロセスが終了し

exitコマンドを入力しようと試みている時点で既に「そのプロセス」は終了しているはずなので、そこでexitすればそのままログアウトです。
何か根本的な勘違いがあるのではないでしょうか。

投稿2020/05/27 15:07

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問