shell 将csh提示符设置为包含多行和特殊字符的命令的原始输出?

flvtvl50  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(139)

我尝试将csh提示符设置为某个特定命令的原始输出,我知道如何对简单输出进行设置;例如:

set prompt=`echo propmt%|sed "s/pm/mp/"`

...导致以下提示:

prompt%

但是我想要的提示符更复杂。首先,它有多行。我知道如何直接做到这一点(即不通过命令的输出):

set prompt="This is a line\nThis is another\nAnd this is the last% "

...结果是:

This is a line
This is another
And this is the last%

但如果我尝试通过命令执行相同的操作:

set prompt=`echo "This is a line\
This is another\
And this is the last% "`

......提示就变成了:

This

......甚至没有This is a line;只有This
最重要的是,我想使用的特定命令不仅会输出多行,还会输出一堆其他字符,我认为csh和/或set会以我不希望的方式解释这些字符。

cowsay -f ghostbusters "BOOOOOOOOOOOOOOOOOOOOOOOOO \
? \
? You are using CEEEEEE SHELLLLLLLLLLLLLLLLL\
? \
? Be my guest, but you have no one to blame but\
? YOURSELLLLLLLLLLLLLLLLLLLLLLF"; echo; echo "% "

......输出:

_________________________________________
/ BOOOOOOOOOOOOOOOOOOOOOOOOO              \
|                                         |
| You are using CEEEEEE                   |
| SHELLLLLLLLLLLLLLLLL                    |
|                                         |
| Be my guest, but you have no one to     |
\ blame but YOURSELLLLLLLLLLLLLLLLLLLLLLF /
 -----------------------------------------
          \
           \
            \          __---__
                    _-       /--______
               __--( /     \ )XXXXXXXXXXX\v.
             .-XXX(   O   O  )XXXXXXXXXXXXXXX-
            /XXX(       U     )        XXXXXXX\
          /XXXXX(              )--_  XXXXXXXXXXX\
         /XXXXX/ (      O     )   XXXXXX   \XXXXX\
         XXXXX/   /            XXXXXX   \__ \XXXXX
         XXXXXX__/          XXXXXX         \__---->
 ---___  XXX__/          XXXXXX      \__         /
   \-  --__/   ___/\  XXXXXX            /  ___--/=
    \-\    ___/    XXXXXX              '--- XXXXXX
       \-\/XXX\ XXXXXX                      /XXXXX
         \XXXXXXXXX   \                    /XXXXX/
          \XXXXXX      >                 _/XXXXX/
            \XXXXX--__/              __-- XXXX/
             -XXXXXXXX---------------  XXXXXX-
                \XXXXXXXXXXXXXXXXXXXXXXXXXX/
                  ""VXXXXXXXXXXXXXXXXXXV""
%

这就是我想要的csh提示符。在这一点上,我觉得有义务指出我不是在开玩笑。
我想我可以忘记运行命令来生成它,而只是手动将其转换为一个单行字符串,并为set prompt正确转义,但是:
1.这似乎是一种痛苦;
1.我希望能够快速方便地将提示更改为类似但不同的内容。
因此,我希望有某种方法告诉set prompt "只使用 (任意命令) 的原始输出;不要把它解释为特殊字符或其他什么"。有什么方法吗?或者其他建议来完成我想要的?谢谢。

kmbjn2e3

kmbjn2e31#

也许使用别名precmd更好:

alias precmd 'cowsay -f ghostbusters << EOF \
line 1 \
\
line 2 \
\
line 3 \
EOF'

从csh(1):

precmd  Runs just before each prompt is printed.  For example, if one
         does

               > alias precmd date

         then date(1) runs just before the shell prompts for each command.

         There are no limits on what precmd can be set to do, but
         discretion should be used.

或者您可以将其设置为不同的文件以避免所有反斜杠:

alias precmd 'source ~/cowsay'

# ~/cowsay
cowsay -f ghostbusters << EOF
line 1

line 2

line 3
EOF

相关问题