在同一行上显示Bash标准输出和提示符

3
在bash中,一些命令会将它们的stdout放在命令提示符之前,并且在同一行上。例如:
$ printf message
message$ 
$ gettext -d gtk20 File
Fichier$ 

我希望将标准输出(stdout)放在专用行上,而命令提示符则在下一行显示。我可以像这样使用echo并将其包装在反引号中,但我想知道是否有更好的方法(例如可以经常使用的参数等):

$ echo `printf message`
message
$
$ echo `gettext -d gtk20 File`
Fichier
$ 

1
“一些命令在命令提示符之前,并且在同一行上放置其标准输出” - 这听起来你可能对这个输出的来源有错误的印象。来自命令本身的标准输出(message在你的第一个例子中)来自于命令本身,但是提示符来自于shell。该命令与打印提示没有任何关系。 - David Z
@DavidZ 在Linux的偏好设置中有没有选项可以更改bash显示printf的方式? - john
1
@john 这可能是一个很好的问题,可以在这里或者[unix.se]上单独提问。 - David Z
2个回答

2
尝试在你的命令后添加; printf "\n"; echo。问题在于你的输出没有以换行符结尾。 你也可以将命令输出注入到一个单独的printf "%s\n"命令中。

是的,谢谢。这里是解决Ubuntu上复杂(真实世界)情况的代码:$ printf "ngettext -d gtk20 'Opening %d Item' 'Opening %d Items' 5" 5 && echo Ouverture de 5 éléments $ - user389850

2
您可以设置提示符以自动处理此操作。
PS1='$(printf "%$(($(tput cols)-1))s\r")\u@\h [\w]\$ '

Server Fault上的这个问题中得知。

它会打印足够的空格以包裹行尾,然后使用回车符(\r)返回到第一列。您可以像通常一样自定义在此之后显示的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接