我曾经知道这一点,但我忘记了:我想在每个提示之前执行一个命令或几个命令。当我在我们的 PROD 框中时,我希望在每个提示上方都有一个大大的提醒,上面写着* 您正在生产中 *也许还有一两件事。目前,我认为这就是检查邮件的方式,但我不记得如何设置该配置。
使用 ksh 和 Solaris 5.10
任何想法?
谢谢
答案1
如果您想要的只是一个大的固定警告,那么只需将其添加到提示中即可:
red=$(tput setaf 1; tput smso; tput bold) reset_color=$(tput sgr0)
PS1='
${red}[THIS IS A PRODUCTION SYSTEM!!]${reset_color}
rest of the prompt$ '
在现代(1995 年之后)ksh(ksh93、mksh)的实现中,$PS1
受命令替换和参数扩展的影响,因此您可以执行以下操作:
function mywarning {
tput setaf 1; tput bold
date "+it's %T, please remember it's a production system"
tput sgr0
}
PS1='$(mywarning)# '
在 ksh88 中(Solaris 10/usr/bin/ksh
仍然如此),提示符中仅完成参数和波形符扩展。
对于提示中的任何奇特内容,您都必须恢复到聪明的技巧。然后,你能做的事情就非常有限。
虽然不执行算术扩展,但由于您可以扩展诸如 之类的内容${array[expr]}
,因此您可以expr
计算算术表达式(此处为 )。因为赋值(尽管只对数值)可以在算术表达式中完成,所以这提供了一些做奇特事情的机会。
您可以使用它来后处理动态变量,例如$SECONDS
, $PWD
, $?
, $!
, $RANDOM
, $_
。
例如,您可以通过以下方式获取 HH:MM:SS 日期:
typeset -Z2 _h _m _s
eval "$(date +'SECONDS=$((%H*3600+%M*60+%S))')"
PS1='${z[(_h=SECONDS/3600)+(_m=(SECONDS/60)%60)+(_s=SECONDS%60)]}${_h}:${_m}:${_s} $ '
您可以添加您的肥胖警告每 5 次提示一次:
set -A warn '' '
[THIS IS A PRODUCTION SYSTEM!!]
' '' '' ''
PS1='${warn[warn_count=(warn_count+1)%5]}# '
我不认为你可以在每个提示之前运行一个命令(邮件检查是由 内部完成的ksh
),但是你可以在每个命令之后使用 DEBUG 陷阱运行一个命令:
trap 'my-command' DEBUG
请注意,它是在每个子 shell 中的每个简单命令之后完成的。
例如,在:
for f in *; do :; done
my-command
将运行与当前目录中有文件一样多的次数。
在:
: | :
它运行了 3 次...所以实际上,它并不实用。
答案2
我只是将其放入/etc/profile
, 或/etc/issue
。有时会关闭显示问题文件的内容,但我仍然认为这是一个很好的提醒。
更改变量的内容$PS1
是可以的,我想,您可能仍想打印一些警告/etc/profile
。由于它是一个生产系统,因此可以编辑这些文件,因为在这里,您希望系统中发生持久的更改。 (通常,我建议不要更改这些文件并改用用户文件。)
答案3
您可以使用以下命令查看主机、时间、位置和 git 分支:
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
您可以修改其中任何一个,例如host。
如果你想运行命令,请使用 backtics - these
``