我的问题很愚蠢,但在互联网上找不到任何解释我的方法。问题是我想让终端中的名称显示为:Server mpi@raspberry: ... $
但找不到如何将“名称”服务器添加到用户(我正在调用该名称,但可能不正确)。相反,我的终端显示mpi@raspberry: ... $
我使用多个主机,如果清单或剧本中未设置 ansible_become_user 和 ansible_become_password,我想提示用户提供 sudo 用户名和密码
我使用以下内容:
库存文件:
os:
children:
centos:
hosts:
clean_centos_1:
vars:
ansible_become_user: root
ansible_become_password: root
rocky:
hosts:
clean_rocky_1:
ubuntu:
hosts:
clean_ubuntu_1:
debian:
hosts:
clean_debian_1:
alpine:
hosts:
clean_alpine_1:
vars:
ansible_become_user: root
ansible_become_password: root
vars:
ansible_user: test
ansible_password: test
剧本
- name: "PLAY1"
hosts: all
gather_facts: no
tasks:
## Identify ansible_become_user if present
#------------------------------------------------------
- name: "Test if ansible_become_user is empty"
debug:
var: ansible_become_user
register: result
when: ansible_become_user | length > 0
ignore_errors: yes
- name: "Set status_ansible_become_user"
set_fact:
status_ansible_become_user: "{{ status_ansible_become_user|default({}) | combine( { ansible_host: 'absent' if result.failed is true else 'present' }) }}"
## Get user input
#------------------------------------------------------
- name: "User-input: <ansible_become_user>"
pause:
prompt: "\nEnter root username or sudo username for host: {{ansible_host}}"
when: item == 'absent'
loop: "{{status_ansible_become_user.values()}}"
- set_fact:
ansible_become_user: "{{ result.user_input }}"
when: result.failed is false
- debug:
var: item == 'absent'
loop: "{{status_ansible_become_user.values()}}"
上例中因为 clean_centos_1 排在第一位,并且设置了 ansible_become_user 和 ansible_become_passwor,其他主机如下跳过,没有提示
TASK [User-input: <ansible_become_user>] **********************************************************************************************************************************************************************************************************************************
skipping: [clean_centos_1] => (item=present)
TASK [set_fact] ***********************************************************************************************************************************************************************************************************************************************************
fatal: [clean_centos_1]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'user_input'\n\nThe error appears to be in '/git/ansible/role/rar.pkg.python/playbook/test.yml': line 28, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - set_fact:\n ^ here\n"}
skipping: [clean_rocky_1]
skipping: [clean_debian_1]
skipping: [clean_ubuntu_1]
fatal: [clean_alpine_1]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'user_input'\n\nThe error appears to be in '/git/ansible/role/rar.pkg.python/playbook/test.yml': line 28, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - set_fact:\n ^ here\n"}
问题:
如何正确验证是否设置了 ansible_become_user 和 ansible_become_password,如果未设置,如何提示使用以提供每个主机可能不同的 ansible_become_user 和 ansible_become_password?
我为什么要问这个?
你可以猜到,这主要是出于好奇。但是,为什么我的脑海里会涌现出好奇心呢?
好吧,有一段时间我注意到我很不高兴,在我跑去clear
清理终端屏幕之后,我不得不把眼睛从屏幕底部移开,在连续命令和他们的命令之后提示结束了输出,到屏幕的顶部。
那是我将其插入我的~/.bashrc
:
__prompt_to_bottom_line() {
tput cup $LINES
}
alias clear='clear && __prompt_to_bottom_line'
对我来说,运行后提示在底部clear
意味着提示总是在底部,从不在顶部。其他一切都和平常一样。
其他人呢?
我想我不是唯一一个感到这种必要性的人。以这个问题为例:用户希望提示始终位于顶部,输出位于其下方,但顺序相反(但一个命令的一个输出,即使是多行,也不会颠倒,很明显)。
如果您考虑一下,该用户希望在屏幕上看到tac
的正是我所期望的(除了多行输出没有反转)。
所以我的问题是
为什么终端设计有这种不统一的行为?我所说的非均匀是指它从一种除非一个 s 否则永远不会重复的情况开始,这将在clear
命令后更改命令,提示在屏幕下方移动,最终提示最终处于“稳定”位置屏幕底部,它不会再从那里移动,除非一个clear
s.
输出向下/向上推总是在顶部/底部的线不是更适合眼睛的设计吗?
我一直在尝试自定义我的 bash 提示符
下面是我的配置
#!bin/bash
Nocolor="\[\033[0m\]" # Text Reset
# Bold High Intensty
BIBlack="\[\033[1;90m\]" # Black
BIRed="\[\033[1;91m\]" # Red
BIGreen="\[\033[1;92m\]" # Green
BIYellow="\[\033[1;93m\]" # Yellow
BIBlue="\[\033[1;94m\]" # Blue
BIPurple="\[\033[1;95m\]" # Purple
BICyan="\[\033[1;96m\]" # Cyan
BIWhite="\[\033[1;97m\]" # White
function git_color {
local git_status="$(git status 2> /dev/null)"
if [[ $git_status =~ "Changes not staged for commit" ]]; then
echo -e $BIRed
elif [[ $git_status =~ "Changes to be committed" ]]; then
echo -e $BIYellow
else
echo -e $BIGreen
fi
}
PS1="\u\[$BIRed\]\W"
PS1+="\$(git_color) $ "
PS1+="\[$Nocolor\]"
export PS1
我要做的是根据我的 git 状态用特定颜色突出显示我的 $ 符号
这\[\]来自哪里。我尝试了所有可能的方法来调用方法 git_status 但没有任何效果。
我的 Bash 版本
bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
帮帮我。提前致谢。
我无法使用 Cinnamon 更改 Linux Mint 19.2终端模拟器的 de PS1 提示值。它仅适用于在控制台上进行的登录(F1 到 F6)。
文件的最后几行.profile
:
export PS1='my-customized-prompt $'
export PSCOPY=$PS1
重新启动 Cinnamon 后(我也尝试过重新启动计算机):
在 之后,似乎还有其他东西.profile
正在更改PS1
值,例如终端模拟器或任何其他 bash“功能”。
luc@lucmint:~$ echo $PSCOPY
my-customized-prompt $
luc@lucmint:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
luc@lucmint:~$
但是,当我使用“-l”参数从命令行运行 bash 或使用su
命令更改用户时,它可以工作:
luc@lucmint:~$ bash -l
my-customized-prompt $logout
luc@lucmint:~$ su - luc
Password:
my-customized-prompt $
这是怎么回事?当终端仿真器打开时,谁在覆盖 PS1 变量?以及如何预防?
编辑:
主目录中的所有隐藏文件:
$ ls -ld ~/.*
drwxr-xr-x 30 luc luc 4096 Aug 27 14:44 /home/luc/.
drwxr-xr-x 3 root root 4096 Aug 26 14:27 /home/luc/..
-rw------- 1 luc luc 4706 Aug 27 14:42 /home/luc/.bash_history
-rw-r--r-- 1 luc luc 220 Aug 26 14:27 /home/luc/.bash_logout
-rw-r--r-- 1 luc luc 3771 Aug 27 14:00 /home/luc/.bashrc
drwx------ 10 luc luc 4096 Aug 26 16:36 /home/luc/.cache
drwxrwxr-x 4 luc luc 4096 Aug 26 15:25 /home/luc/.cinnamon
drwxr-xr-x 14 luc luc 4096 Aug 26 16:36 /home/luc/.config
-rw-r--r-- 1 luc luc 27 Aug 26 14:36 /home/luc/.dmrc
drwx------ 2 luc luc 4096 Aug 26 14:36 /home/luc/.gconf
-rw-r--r-- 1 luc luc 112 Aug 26 18:06 /home/luc/.gitconfig
drwx------ 3 luc luc 4096 Aug 26 16:36 /home/luc/.gnome
drwx------ 3 luc luc 4096 Aug 26 14:36 /home/luc/.gnupg
-rw-r--r-- 1 luc luc 245 Aug 26 18:18 /home/luc/.gtkrc-2.0
-rw-r--r-- 1 luc luc 516 Aug 26 14:27 /home/luc/.gtkrc-xfce
-rw------- 1 luc luc 5470 Aug 27 14:43 /home/luc/.ICEauthority
drwxrwxr-x 2 luc luc 4096 Aug 26 16:33 /home/luc/.icons
drwxr-xr-x 4 luc luc 4096 Aug 26 17:53 /home/luc/.java
-rw------- 1 luc luc 32 Aug 27 14:20 /home/luc/.lesshst
drwx------ 3 luc luc 4096 Aug 26 14:36 /home/luc/.local
drwx------ 5 luc luc 4096 Aug 26 15:04 /home/luc/.mozilla
drwxr-xr-x 7 luc luc 4096 Aug 26 15:49 /home/luc/.nbi
drwxr-xr-x 3 luc luc 4096 Aug 26 15:54 /home/luc/.netbeans
drwx------ 3 luc luc 4096 Aug 26 16:36 /home/luc/.pki
-rw-r--r-- 1 luc luc 938 Aug 27 14:44 /home/luc/.profile
drwx------ 2 luc luc 4096 Aug 26 16:49 /home/luc/.ssh
-rw-r--r-- 1 luc luc 0 Aug 26 14:40 /home/luc/.sudo_as_admin_successful
drwxrwxr-x 3 luc luc 4096 Aug 26 18:19 /home/luc/.themes
-rw-r----- 1 luc luc 5 Aug 27 14:43 /home/luc/.vboxclient-clipboard.pid
-rw-r----- 1 luc luc 5 Aug 27 14:43 /home/luc/.vboxclient-display.pid
-rw-r----- 1 luc luc 5 Aug 27 14:43 /home/luc/.vboxclient-draganddrop.pid
-rw-r----- 1 luc luc 5 Aug 27 14:43 /home/luc/.vboxclient-seamless.pid
-rw------- 1 luc luc 8268 Aug 27 14:44 /home/luc/.viminfo
-rw------- 1 luc luc 52 Aug 27 14:43 /home/luc/.Xauthority
-rw-rw-r-- 1 luc luc 131 Aug 26 18:28 /home/luc/.xinputrc
-rw------- 1 luc luc 19039 Aug 27 14:44 /home/luc/.xsession-errors
-rw------- 1 luc luc 97892 Aug 27 14:42 /home/luc/.xsession-errors.old
我正在寻找一种将 bash 提示符、命令及其输出打印到图像中的方法,如下所示,以便在学习时进行文档记录,我编写了一个快速命令来执行此操作,但我需要自动打印 bash 提示符而不是我当用户或路径更改时更改命令的这一部分[$USER@`hostname` ~]#
,不要忘记主目录的波浪号和 #/$ 取决于用户是否是 root 以便我需要更改的是cmd="ls -l";
,我也不想使用$PWD 因为我得到了完整的路径,而不是我需要确切的 bash 提示符:
cmd="ls -l"; convert -font DejaVu-Sans-Mono-Book -pointsize 16 label:"$(echo "[$USER@`hostname` ~]# $cmd\n";$cmd)" /home/myuser/Desktop/result.png
上面的结果就是这个镜像,注意[root@centos7 ~] 也包含在镜像中:
[\u@\h \W]\$
谢谢