我正在尝试为用户登录 FreeBSD 10 时设置一个“动态”motd。我已经设置了它,以便它使用 .cshrc 并有一些命令来输出一些信息。然而,其中一个打印为单行,而不是添加换行符。
echo 'Uptime: '`uptime`
echo ''`who -H | awk '{print $0,"\n"}'`
的输出WHO以单行形式出现,而不是分开。我怎样才能完成它,以便它添加换行符\n在每行的末尾?我尝试了一些改变sed也是如此,但都会产生相同的结果。
我正在使用 tcsh 进行测试。
答案1
您的方法有两个问题。
首先是您没有引用命令替换的输出。当您执行此操作时,shell 会根据空格对输出进行分词,并将每个单词作为单独的参数传递给echo
.echo
然后在一行上输出其所有参数。
解决此问题的方法是引用您的命令替换。例如:
echo "$(who -H | awk '{ print $0,"\n"}')"
第二个问题是您根本不需要echo
(或)。awk
您将命令的输出捕获到字符串中,然后将其回显而不进行任何操作。因此,这echo
没有任何意义。
将您的迷你脚本转换为:
echo "Uptime: $(uptime)"
who -H
我删除了它awk
,因为它除了添加行之外没有做任何事情。
还有其他方法可以做到这一点:
echo -n "Uptime: "
uptime
who -H