Почему команда printf в сценарии оболочки выдает ошибки
У меня есть скрипт, который отправляет мне некоторую информацию о разных машинах, и он отлично работает на машинах с Fedora, но Ubuntu 20.04 выдает ошибку только для одного printf. Кажется, я не вижу, что я делаю неправильно. Итак, утверждение:
#printf "Last logins (last -10) \n `last -10` \n"
Last logins (last -10)
bash: printf: ` ': invalid format character
vecn1 pts/8 tmux(1233684).
тогда как аналогичные утверждения работают нормально:
printf "Default gw (ip ro ls) \n`ip ro ls` \n"
Default gw (ip ro ls)
default via 192.168.111.1 dev en0 proto dhcp src 192.168.111.6 metric 100
192.168.111.0/24 dev en0 proto kernel scope link src 192.168.111.6
192.168.111.1 dev en0 proto dhcp scope link src 192.168.111.6 metric 100
Что я делаю не так? Может быть, эти цифры "%"? Не уверен, почему там. Обычно это просто имя хоста (ip). Если я простоlast -10
следующий вывод
vecn1 pts/8 tmux(1233684).%3 Mon Dec 26 11:29 - 12:01 (00:31)
vecn1 pts/7 tmux(1233684).%2 Mon Dec 26 11:29 - 12:01 (00:31)
vecn1 pts/6 tmux(1233684).%1 Mon Dec 26 11:29 - 12:01 (00:31)
vecn1 pts/5 tmux(1233684).%0 Mon Dec 26 11:29 - 11:29 (00:00)
vecn1 pts/8 tmux(1232989).%3 Mon Dec 26 11:27 - 11:29 (00:01)
vecn1 pts/7 tmux(1232989).%2 Mon Dec 26 11:27 - 11:29 (00:01)
vecn1 pts/6 tmux(1232989).%1 Mon Dec 26 11:27 - 11:29 (00:01)
vecn1 pts/5 tmux(1232989).%0 Mon Dec 26 11:27 - 11:27 (00:00)
vecn1 pts/8 tmux(1198190).%3 Mon Dec 26 11:03 - 11:04 (00:00)
vecn1 pts/7 tmux(1198190).%2 Mon Dec 26 11:03 - 11:04 (00:00)
wtmp begins Wed Jun 22 17:27:34 2022
Спасибо
1 ответ
Да это скорее всего%
символы.
Всегда следует избегать внедрения кода в строку формата файлаprintf
функция; вместо этого передайте результат команды в качестве аргумента, используя соответствующий спецификатор формата (%s
в случае строки):
printf 'Last logins (last -10)\n%s\n' "`last -10`"
или лучше (избегая устаревшей формы подстановки команд с обратной кавычкой)
printf 'Last logins (last -10)\n%s\n' "$(last -10)"