在这里看到一个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'