.bashrc文件正在循环“脚本”命令

时间:2019-11-05 14:31:53

标签: bash shell autostart

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

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

脚本本身似乎可以正常工作,但是我想将其添加到bash自动启动中,因此每当我打开终端时,我的shellscript就会被执行。

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

谢谢。

2 个答案:

答案 0 :(得分:3)

一个新的终端窗口是启动一个新的交互式shell的一种方式,但是正在运行script。您只希望在第一种情况下运行script,而不在每种情况下运行。{p>

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

答案 1 :(得分:2)

script(1)命令打开一个新的交互式外壳。

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

如果您希望某些内容仅在登录Shell上运行,请将其放入.bash_profile

这应该避免无限递归。