Преобразуйте числовую строку от файла до кода выхода в оболочке

Как видете, hostname -i может показать 127.0.0.1 (нет NAT здесь (archlinux)), это не то, что мы хотим.

Таким образом, я делаю предложение:

dev=eth0
ip=$(
    ip a s dev $dev |
        awk '/inet /{gsub("/.*", "");print $2}'
)
echo "$ip"

Или если Вы имеете -P переключатель для grep :

ip a s dev eth0 | grep -oP 'inet\s+\K[^/]+'

Я предполагаю, что это - самое короткое решение =)

2
04.12.2013, 23:19
2 ответа
id=$( getent passwd $username | cut -d: -f3 | sed 's/.*\(..\)$/\1/' )

с awk

awk -v u=$username -F: '$1 == u {exit $3%100}' /etc/passwd
2
27.01.2020, 22:00

Что Вы имеете в виду "некоторую другую стандартную утилиту"? Если Вы хотите, чтобы сценарий оболочки возвратил произвольные статусы выхода, можно передать любое значение встроенной оболочке exit:

exit `awk -F: $USER '{print $2}' /etc/passwd`

(или просто exit 35, и т.д.)

Это позволяет Вам преобразовать вывод в статус выхода, даже для программ, которые не имеют exit операция как perl и awk сделать. Но имейте в виду, что конвенция Unix состоит в том, чтобы успешные программы возвратились 0, таким образом, Вы получите некоторое странное поведение, если Вы запустите свою специальную программу от командной строки (и т.д.).

2
27.01.2020, 22:00
  • 1
    Стандартной утилитой я имел в виду что-либо, что обычно доступно от обычных оболочек (sh, удар, ksh, csh...) на Linux и Unix (и современный и древний). На некотором Unix системный жемчуг не может быть установлен как стандарт. Спасибо за ре подсказки exit. –  RedGrittyBrick 04.12.2013, 16:49
  • 2
    я вижу; я рассчитывал perl среди стандартных опций, следовательно, "почему не только используют жемчуг" беспорядок. –  alexis 04.12.2013, 16:52

Теги

Похожие вопросы