簡體   English   中英

bash 輸入/輸出到日志文件

[英]bash input/ouput to a log file

我有一個帶有以下語句的 bash 腳本。 我需要將問題“你快樂嗎?”和“是”或“否”的答案輸出到日志文件中。我可以使用“echo“$yn”>>log1.log 獲得日志文件的答案2>&1" 但不是問題(讀取命令)

while true; do
    read -p "Are you happy? " yn
    case $yn in
        [Yy]* ) break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no.";;
    esac
done
echo "$yn" >>log1.log 2>&1

我試過的:閱讀 -p “你還好嗎?” yn > log.log 2>&1 這確實有效,但是當我運行我的腳本時,沒有顯示問題。 我發現的唯一方法是 echo "Are you happy? $yn" >>log1.log 2>&1 問題在於我有幾個帶有長語句的提示,我喜歡讓我的腳本保持簡潔

重定向僅適用於echo 您需要在done添加一個類似的重定向。 (這也將重定向您從case echo的錯誤消息,順便說一下應該轉到標准錯誤):

while true; do
    read -p "Are you happy? " yn
    case $yn in
        [Yy]* ) break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no." >&2;;
    esac
done >>log1.log 2>&1
echo "$yn" >>log1.log

或將整個命令序列放在括號或大括號內。

{ while true; do
    read -p "Are you happy? " yn
    case $yn in
        [Yy]* ) break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no." >&2;;
    esac
done
echo "$yn"; } >>log1.log 2>&1

就像您發現的那樣,並且該術語應該揭示,重定向會導致輸出到另一個地方(在這種情況下,是文件而不是終端)。 如果您希望它也顯示在終端上, tee ,但它可能不適合交互式腳本(因為您不能在輸出中包含標准輸入)。

tripleee$ cat >nst
#!/bin/bash
while true; do
  read -p "Are you happy? " yn
  case $yn in
    [Yy]*) break;;
    [Nn]*) exit;;
    *) echo "Please answer yes or no." >&2;;
  esac
done
echo "$yn"
^D

tripleee$ chmod +x ./nst

tripleee$ ./nst 2>&1 | tee log1.log
Are you happy? forget it
Please answer yes or no.
Are you happy? no

tripleee$ cat log1.log
Are you happy? Please answer yes or no.
Are you happy? tripleee$

也許您實際上正在尋找script命令?

tripleee$ script typescript ./nst
Script started, output file is typescript
Are you happy? forget it
Please answer yes or no.
Are you happy? yes ma'am
yes ma'am

Script done, output file is typescript

tripleee$ nl -ba typescript
     1  Script started on Thu Oct 26 20:34:04 2017
     2  command: ./nst
     3  Are you happy? forget it
     4  Please answer yes or no.
     5  Are you happy? yes ma'am
     6  yes ma'am
     7  
     8  Script done on Thu Oct 26 20:34:11 2017

請注意, typescript文件將包含用戶所做的任何編輯,即拼寫錯誤及其更正,以及終端用於執行編輯的各種顯示代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM