Как и выше, я хотел бы отобразить IPv4-адрес eth0 (или его части) в PS1 или bash. Есть ли способ сделать это?
7 ответов
Я использую следующее в моем .bashrc
THEIP=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | tail -1 | cut -d: -f2 | awk '{ print $1}')
PS1="\[\033[01;31m\]\u@"$THEIP" \w $\[\033[00m\] ";
Это покажет вам подсказку:
root@1.2.3.4 /opt/amazon/jungle $
Удалите \w
чтобы избавиться от существующего рабочего каталога, или сделайте его \W
чтобы сделать его только частичным рабочим каталогом.
root@1.2.3.4 jungle $
Вы также можете использовать следующее, предполагая, что в вашем /etc/hosts
есть только один IP-адрес:
THEIP=$(hostname -i)
Отказ от ответственности: буквально не предпринималась попытка сделать это менее мусором.
Ниже приведен способ сделать это ...
PS1=$(ifconfig $(route -n | grep ^0.0.0.0 | awk '{print $NF}') | grep inet | grep -v inet6 | awk '{print $2}')
Как заявляет Sirex, с подстановкой команд можно сделать много хитрых вещей, я бы предпочел следующее объявление с помощью утилиты ip
:
export PS1="IP: $(ip addr show dev eth0 | grep "inet " | cut -d" " -f6) #"
или что-то в этом роде.
Другой вариант заключается в использовании facter
инструмента , который обеспечивает много информации о вашей системе , так просто facter ipaddress_eth0
дает вам IP-адрес. Таким образом, новый пример будет
export PS1="IP: $(facter ipaddress_eth0) #
facter
позволяет вам использовать гораздо больше системной информации для сценариев, если хотите. Просто запустите facter
чтобы увидеть, что он получил во всей своей конфигурации. Если вы хотите, вы также можете объявить свои собственные факты в /etc/facts.d
.
Я использую этот конфиг в .bashrc и довольно круто (аналогично предложенному выше)
pyclean () {
find . -type f -name "*.py[co]" -delete -print
find . -type f -name ".DS_Store" -delete -print
find . -type d -name "__pycache__" -delete -print
}
IP=$( ifconfig | grep ^eth -A2 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }' )
export PS1="\e[1;32m\D{%T} @$IP\e[1;34m\w/\e[m\n\$ "
Вам также может понравиться это
IP=$( ifconfig | grep ^eth -A2 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }' )
PS1='\e[1;34m\D{%T} \[\033[00;39m\]\u\[\033[00;32m\]@$IP \[\033[00;33m\]\w/\n\\$\[\033[00m\] '
Я взял ответ @ SomeGuyOnAComputer и немного его улучшил:
IP=$( ifconfig | grep ^eth -A2 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }' )
PS1='\n\[\033[00;32m\]\u@$IP \[\033[00;33m\]\w\n\\$\[\033[00m\] '
На моей машине был запущен докер-контейнер, поэтому при запуске команды @ SomeGuyOnAComputer он выбирал IP-адрес докера. Новая версия ищет строку, которая начинается с 'eth', и печатает 2 строки после информации о соответствующей строке (-A2). Остальное похоже на версию @ SomeGuyOnAComputer.
Экспортируйте переменную IP: export MYIP = $(ifconfig | grep inet | egrep -v "127 | inet6" | awk '{print $ 2}') Экспортируйте переменную bash: export PS1 = '[\u @ "$ MYIP" \W] \$ '