bashinput/输出到日志文件

我有一个bash脚本,下面的语句。 我需要输出这个问题:“你快乐吗?”和答案“是”或“否”的日志文件。我可以得到答案日志文件与“回声”$ 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 

我试过的:read -p“你没事吧? yn> log.log 2>&1这确实可行,但是当我运行我的脚本问题不会显示。 我发现的唯一方法是回声“你快乐吗?$ yn”>> log1.log 2>&1这个问题是,我有几个提示与长的陈述,我喜欢让我的脚本很好,很短

重定向只适用于echo 。 完成后,您需要添加一个类似的重定向。 (这也将重定向你的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文件将包含由用户完成的任何编辑,即打字错误及其校正将被包括在内,终端使用各种显示码来执行编辑。