是否可以使用特殊字符替换终端中的用户名?


0

我发现似乎接近解决方案,但它并不完全存在。

编辑:使用JavaScript,我知道我可以运行test.replace(/\w/g, "*")test我的用户名在哪里,但我不知道终端的等价物。


什么特殊字符?您已经阅读PROMPT_COMMANDPROMPTINGBASH手册页?在终端类型中,bash然后右键单击它并选择Open man Page。然后⌘F并搜索并阅读它。你有googled - 如何自定义bash命令提示符?这个很好:如何:更改/设置bash自定义提示(PS1)
user3439894

@ user3439894我看过那些但我仍然不明白如何更改我的用户名*****(这些是我正在谈论的特殊字符)。我明白我会PRMOPT_COMMAND$PS1开始之前做到这一点。
NetOperator Wibby 2016年

您真的应该澄清这个问题,以解释您要在命令提示符中替换用户名,而不是在终端中显示的其他上下文中。
戈登戴维森2016年

@GordonDavisson我做了,我的问题得到了解答。
NetOperator Wibby 2016年

@NetOperatorWibby你得到了你想要的答案,但是这个网站的一部分内容是让其他拥有相同(或类似)问题的人找到你的答案。因此,最好使您的问题尽可能清晰,明确,并且对搜索术语友好。
戈登戴维森2016年

Answers:


1

隐藏的用户名应与原始用户名的长度相同?像这样:

Alices-MacBook:〜*****

Bobs-MacBook:〜***

以下代码片段应该完成这项工作(作为奖励,它还会隐藏主机名)。将其添加到〜/ .bash_profile或您设置PS1的任何位置。(我创建了一个临时文件 - test.sh - 用于测试,然后获取该文件 - '../ test.sh'。如果出现了严重错误,并且我的提示难以辨认,我可以简单地重启终端并回到我的旧提示)。

PROMPT_COMMAND=__prompt_command

__hide_string()
{
    echo "$1" | sed 's/./\*/g'
}

__prompt_command()
{
    PS1="$(__hide_string $HOSTNAME):\W $(__hide_string $USER)\$"
}

这将用“*”替换用户名中的每个字符(它也将为主机名执行,以显示函数重用)。我认为这不太理想 - 每次显示提示时,函数都被调用(两次 - 一次用户,一次用于主机名)(即使用户名没有改变):有一点黑客攻击应该是可能的修改它,以便它只在PS1设置时(即在登录时)调用'__hide_string'函数。

说明:每次显示提示时,我们定义的__prompt_command函数都会设置PS1。(这可能是矫枉过正,但让事情变得“充满活力”)。PS1应该很熟悉; 唯一的新功能是'\ h'和'\ u'被调用__hide_string函数替换(并使用$ HOSTNAME和$ USER作为参数)。__hide_string是有趣的部分:它将其参数与sed相呼应,它将每个字符替换为'*'。


谢谢!我使用zsh-shell所以我必须为我的主题定制一点,但最终结果仍然是相同的。:D
NetOperator Wibby 2016年

1

所述PS1提示中所定义/etc/bashrc,默认通常为PS1='\h:\W \u\$ '。你会替换\u*****。您也可以将文件添加export PS1='\h:\W *****\$ '~/.bash_profile文件中,同时/etc/bashrc单独保留系统文件()。


嗯,所以没有办法动态地这样做?我希望星号的数量与我的用户名中的字符数相匹配,而无需手动设置长度。
NetOperator Wibby 2016年

1
您可以获得一个与用户名相同长度的星号字符串${USER//?/*}(即导出PS1 =“\ h:\ W $ {USER //?/ *} \ $”)。请注意,由于用户名在会话期间不会更改,因此每个会话只需运行一次(在〜/ .bash_profile中,也可能在〜/ .bashrc中),而不是每次提示运行一次(使用PROMPT_COMMAND)。
戈登戴维森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.