GNU/Linux >> Linux の 問題 >  >> Linux

Bash スクリプト:セッションをログに記録するための bash スクリプトからのスクリプト コマンドの使用

シェル スクリプトは終了しませんでした。それはまだ実行されています。 script のため、プロンプトが表示されます 新しいシェルを生成しています。表示されるプロンプトは、生成されたシェルからのプロンプトです。

script の通常の使用例 は次のようなものです:

<オール>
  • start script .これにより、新しいシェルが生成されます。
  • 新しいシェルでコマンドを実行する
  • シェルを終了して前のシェルに戻る
  • script によって作成されたログファイルを調べる
  • 基本的に script 期待どおりに動作しています。あなたが望むものを達成するには、別の方法を見つける必要があります。

    次のようにスクリプトの実行をログに記録できます:

    #! /bin/bash
    exec > logfile 2>&1
    set -x
    FOO=BAR
    echo $FOO
    

    説明:

    • exec > logfile 2>&1 stdout と stderr をログファイルにリダイレクト
    • set -x コマンドを実行する前に bash にすべてのコマンドを出力させます

    例:

    $ ./foo.sh
      # (no output here because everything goes to logfile)
    $ cat logfile 
    + FOO=BAR
    + echo BAR
    BAR
    

    この方法の欠点は、スクリプトが人間に見える出力を出力しないことです。すべてがログファイルに送られます。

    または、次のようにすることもできます:

    #! /bin/bash
    # nothing special here
    FOO=BAR
    echo $FOO
    

    次に、次のように実行します:

    $ script -c "bash -x foo.sh"
    Script started, file is typescript
    + FOO=BAR
    + echo BAR
    BAR
    Script done, file is typescript
    

    出力が直接表示され、ログファイルにも保存されるようになりました (ログファイルのデフォルト名は typescript です) )

    $ cat typescript 
    Script started on Mi 18 Mai 2011 01:05:29 CEST
    + FOO=BAR
    + echo BAR
    BAR
    
    Script done on Mi 18 Mai 2011 01:05:29 CEST
    

    bash スクリプトはまだ実行中ですが、新しいインタラクティブ シェルが生成されています。 bash スクリプトは script を待機しています これは、対話型シェルが終了した場合 (強制終了されるか、ユーザーが exit を入力することによって) のみ発生します。 ).

    script以降のコマンドを作成するには script によってログに記録されます 、次のようにします:

    script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'
    

    ただし、script そのコマンドを実行した後、実行を停止します。

    script 内で複数のコマンドを実行するには 、それらのコマンドを別の bash スクリプト内に配置し、その bash スクリプトを -c に対して実行するコマンドとして指定します。 オプション。


    Linux
    1. URLからbashスクリプトを実行

    2. Bash シェル スクリプト内から Vim を開く

    3. bash から apachectl を起動する

    1. 2 番目の要素から for ループを開始する - シェル スクリプト

    2. jenkins パイプラインで bash コマンドを実行する

    3. *nix でポイント コマンド `.` のヘルプを見つけるにはどうすればよいですか?

    1. 自動化のためのBashの使用

    2. Ssh – Sshサーバーにログインするためのシェルスクリプト?

    3. BashスクリプトからTmuxセッションに参加しているかどうかを確認するにはどうすればよいですか?