.bashrc 文件正在循环 "script" 命令

.bashrc file is looping "script" command

我正在尝试使用 linux 命令 "script" 设置一个小 shell 脚本来记录我的 Kali Linux 机器上的每个输入。

#!/bin/bash
now=$(date +"%m_%d_%Y_%H:%M:%S")
script /root/Logs/log_$now.txt

脚本本身似乎可以工作,但我想将它添加到 bash 自动启动中,所以每当我打开终端时,我的 shell 脚本就会被执行。

我尝试将它添加到我的 .bashrc 文件中,但是当我现在打开终端时,脚本会循环。 我添加了一个简单的 "echo 'test'" 脚本,它只在终端启动时启动一次。 将脚本添加到我的 .profile 文件并手动执行 .profile 可以按预期工作,但是一旦我使用 "script" 命令向我的 .bashrc 输入脚本,它就会循环。

提前谢谢你。

脚本(1)命令打开一个新的交互shell。

文件 .bashrc 运行 在每个启动的交互式 bash shell 上,因此你的无限递归。

如果您只希望在登录 shell 时 运行 某些内容,请将其放入 .bash_profile

这应该可以避免无限递归。

新终端window是一种启动新交互shell的方式,运行宁script ].您只想在第一种情况下 运行 script,而不是在 每个 情况下。

script 本身在环境中设置了一个变量,让您知道您是否已经处于由 script 启动的 shell 中。在再次尝试 运行 script 之前检查该变量。

if [[ -z $SCRIPT ]]; then
    now=$(date +"%m_%d_%Y_%H:%M:%S")
    script /root/Logs/log_$now.txt
fi

SCRIPT 的值(如果设置)是要记录到的文件的名称。

或者,您可以将您的终端仿真器直接配置为 运行 script,而不是让它继续打开一个普通的交互 shell 而您试图改变 配置。


以上适用于BSD script;对于 GNU script,您必须自己设置这样的变量。

if [[ -z $SCRIPT ]]; then
  now=$(date +"%m_%d_%Y_%H:%M:%S")
  export SCRIPT=/root/Logs/log_$now.txt
  script "$SCRIPT"
fi