【问题标题】:Linux Script Command With PS1 Change带有 PS1 更改的 Linux 脚本命令
【发布时间】:2017-05-05 14:05:53
【问题描述】:

在这里看到一篇帖子:Change PS1 after running the 'script' command,但似乎没有回答问题。

我正在尝试让脚本运行“脚本”命令,并更改提示 (PS1) 以指示 shell 现在已编写脚本。基本上,普通的 PS1 中有“[UNSCRIPTED] 红色,以便评估者知道他们没有使用脚本窗口。一旦他们准备好进行评估,他们将运行这个脚本,窗口现在将被脚本化,并且提示将更改以指示此类。

现在,如果您将命令一一粘贴,它可以工作,但是当尝试将它们角色放入脚本时不起作用,因为“脚本”命令会启动一个新进程,因此 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

【问题讨论】:

    标签: linux bash shell ps1


    【解决方案1】:

    你可以运行

    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"
    

    在不解析任何 rc 文件的情况下运行 bash,因此导出的 PS1 不会更改。

    【讨论】:

    • 我在使用 -c 标志时遇到了问题,因为脚本会在运行我的命令后关闭,我没想到将 bash 作为最终命令运行。
    【解决方案2】:

    您可以尝试在 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

    【讨论】:

      【解决方案3】:

      另一种选择是使用您的 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'
      

      【讨论】:

        猜你喜欢
        • 2013-08-29
        • 2011-12-03
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-22
        相关资源
        最近更新 更多