我有一个脚本,可以向我发送有关不同机器的一些信息,它在 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)"