5

Как и выше, я хотел бы отобразить IPv4-адрес eth0 (или его части) в PS1 или bash. Есть ли способ сделать это?

7 ответов7

8

Я использую следующее в моем .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)
3

Отказ от ответственности: буквально не предпринималась попытка сделать это менее мусором.

Ниже приведен способ сделать это ...

PS1=$(ifconfig $(route -n | grep ^0.0.0.0 | awk '{print $NF}') | grep inet | grep -v inet6 | awk '{print $2}')
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 .

0

Я использую этот конфиг в .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\$ "
0

Вам также может понравиться это

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\] '
0

Я взял ответ @ 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.

-2

Экспортируйте переменную IP: export MYIP = $(ifconfig | grep inet | egrep -v "127 | inet6" | awk '{print $ 2}') Экспортируйте переменную bash: export PS1 = '[\u @ "$ MYIP" \W] \$ '

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .