Linux脚本命令与PS1更改

在这里看到一个post: 运行“脚本”命令后更改PS1,但似乎没有回答这个问题。

我正在尝试让脚本运行“脚本”命令,并更改提示(PS1),以指示shell现在是脚本。 基本上,正常的PS1里面有红色的[未标注],以便评估者知道他们没有使用脚本窗口,一旦他们准备好评估,他们就会运行这个脚本,窗口现在将被编写脚本提示会改变以表明这种情况。

现在它可以工作,如果你逐个粘贴命令,但是当试图将它们angular色到一个脚本是行不通的,因为“脚本”命令启动一个新的进程,所以PS1的变化将只适用于父进程(shell脚本从中跑出来),直到退出“脚本”过程才生效。

我已经尝试了许多背景脚本过程(&)的变体,以顺序(;和&&)运行命令,但是这些仍然等待父进程(脚本命令)在继续之前完成。

这里是如果一行一行(复制/粘贴)运行的命令,但我不能在shell脚本中工作:

script -af /opdata/logs/scripted/script.$$ # SETUP WINDOW ENVIRONMENT PS1='\d \t \u@\h \[\e[38;5;33m\]\w \[\e[0m\]# ' date -u date hostname ifconfig -a netstat -nr uname -a 

你可以跑

 script -af /tmp/script.out -c "export PS1='\d \t \u@\h \[\e[38;5;33m\]\w \[\e[0m\]# '; date -u; date; hostname; ifconfig -a; netstat -nr; uname -a; bash --norc" 

运行bash而不解析任何rc文件,所以导出的PS1不会被改变。

你可以尝试在bash脚本(比如说scbash.sh )中使用这些命令:

 script -a /opdata/logs/scripted/script.$$ bash --init-file <(cat <<'EOF' #these commands will run BEFORE the scripted bash goes interactive PS1='SCRIPTED >' ls date EOF ) 

运行scbash.sh ,你会得到

 Script started, output file is .... #ls output #date output SCRIPTED > #< as prompt ... #interactive scripted bash here using a prompt 'SCRIPTTED >' exit Script done, output file is... 

script完成后…你将继续你的原始PS1

另一个选择是用你的init命令创建一个文件,例如.scriptrc

 # SETUP WINDOW ENVIRONMENT PS1='\d \t \u@\h \[\e[38;5;33m\]\w \[\e[0m\]# ' date -u date hostname ifconfig -a netstat -nr uname -a 

然后让你的脚本命令调用带有--rcfile参数的bash来在启动时读取这个文件:

 script -af /opdata/logs/scripted/script.$$ -c 'bash --rcfile ${HOME}/.scriptrc'