我正在尝试使用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”命令输入脚本,它就会循环播放。
谢谢。
答案 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
。
这应该避免无限递归。