首页 > 解决方案 > 尝试始终从终端记录我的命令输出,但脚本命令正在循环

问题描述

所以我试图使用该script命令来始终记录我的命令的输出(这是为了工作);但是,当我将script命令放在我的~/.zshrc文件中时(因为我使用的是 zshell),它似乎在我打开 zsh 时不断运行。

所以这是我的~/.zshrc文件在底部的样子:

LOGDATE=$(date +"%m_%d_%Y_%H_%M_%S_%p.tlog")
script $LOGDATE

然后当我打开一个新终端时,这就是我得到的:

Script started, file is 01_16_2019_07_15_05_AM.tlog
Script started, file is 01_16_2019_07_15_05_AM.tlog
Script started, file is 01_16_2019_07_15_05_AM.tlog
Script started, file is 01_16_2019_07_15_05_AM.tlog
Script started, file is 01_16_2019_07_15_05_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_06_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_07_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog
Script started, file is 01_16_2019_07_15_08_AM.tlog

这会一直运行,直到我按住 ctrl-c 阻止它这样做。

我究竟做错了什么?

标签: bash

解决方案


我根本不建议script在 shell 初始化文件中使用(我们的姊妹站点Unix & Linux Stack Exchange更适合解决关于使用什么的更广泛的问题),但避免狭隘问题的一种方法是使用环境变量作为记录已经发生的标志,如果设置它,请避免启动新会话:

if ! [ -n "$script_log" ]; then
    script_log=$(date +"%m_%d_%Y_%H_%M_%S_%p.tlog")
    export script_log
    script "$script_log"
fi

推荐阅读