Linux 具有 PS1 更改的脚本命令
Linux Script Command With PS1 Change
在这里看到一个 post:Change PS1 after running the 'script' command 但它似乎没有回答问题。
我正在尝试使用脚本 运行 "script" 命令并更改提示 (PS1) 以指示 shell 现在已编写脚本。基本上,正常的 PS1 中有红色的“[UNSCRIPTED],这样评估员就知道他们没有使用脚本 window。一旦他们准备好进行评估,他们就会 运行 这个脚本,window 现在将编写脚本,并且提示将更改以指示此类。
现在,如果您将命令一个接一个地粘贴,它可以工作,但是当尝试将它们角色化到脚本中时,它不起作用,因为 "script" 命令启动了一个新进程,因此 PS1 更改将仅适用于父进程(shell 脚本来自 运行)并且在退出 "script" 进程之前不会生效。
我已经尝试了多种后台脚本进程 (&)、运行按顺序执行命令 (; 和 &&) 的变体,但这些仍然等待父进程(脚本命令)完成在继续之前。
如果 运行 逐行 (copy/paste) 但我无法在 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"
比 运行s 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'
在这里看到一个 post:Change PS1 after running the 'script' command 但它似乎没有回答问题。
我正在尝试使用脚本 运行 "script" 命令并更改提示 (PS1) 以指示 shell 现在已编写脚本。基本上,正常的 PS1 中有红色的“[UNSCRIPTED],这样评估员就知道他们没有使用脚本 window。一旦他们准备好进行评估,他们就会 运行 这个脚本,window 现在将编写脚本,并且提示将更改以指示此类。
现在,如果您将命令一个接一个地粘贴,它可以工作,但是当尝试将它们角色化到脚本中时,它不起作用,因为 "script" 命令启动了一个新进程,因此 PS1 更改将仅适用于父进程(shell 脚本来自 运行)并且在退出 "script" 进程之前不会生效。
我已经尝试了多种后台脚本进程 (&)、运行按顺序执行命令 (; 和 &&) 的变体,但这些仍然等待父进程(脚本命令)完成在继续之前。
如果 运行 逐行 (copy/paste) 但我无法在 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"
比 运行s 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'