在 .cshrc 命令输出中添加换行符

在 .cshrc 命令输出中添加换行符

我正在尝试为用户登录 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

相关内容