在Linux中使用print命令代替echo


7

我只是可以使用linux echo命令在终端中打印一条消息。

prayag@prayag$ echo "prayag works on JVM"
prayag works on JVM

我可以使用print命令获得相同的输出。

我实际上浏览了他们的手册,在其中$ man print将其描述为Run-mailcap-programs,这是我以前从未听说过的术语。并且了解到它是用于基于MIME查找用于打开文件的正确程序的。

那么,有没有办法单独使用而不是打印简单的线条printecho

Need需要在bash脚本中将文本文件的内容分配给变量时发现了类似的问题,但有人echoprint那儿提出建议。

我尝试跟随,但遇到了问题。

$ print --"text/plain" "prayag works on JVM"
Warning: unknown mime-type for "prayag works on JVM" -- using "application/octet-stream"
Error: no such file "prayag works on JVM"

它要求提供包含文件的文件。

$ print --"text/plain" application.properties 
Warning: unknown mime-type for "application.properties" -- using "application/octet-stream"
Error: no "print" mailcap rules found for type "application/octet-stream"

但是可以与awk提供文件的命令结合使用,

$ awk '{print}' application.properties 
prayag works on JVM

您在什么操作系统上?
slm

@slm我在ubuntu上
祈祷

好吧,请看我的回答,让我知道是否有帮助
slm

Answers:


16

您在这里使很多事情感到困惑,让我尝试为您分开。

  1. awk '{print}' ...

    这与print您要问的无关。awk是一种动态编程语言,其中包含自己的命令,其中print之一就是命令。

  2. print --"text/plain" "prayag works on JVM" 和其他形式

    该命令print用于针对mailcap文件的每个内容显示文件,使用针对每种特定文件类型的指定“处理程序”,而不是用于在屏幕上打印字符串。

    印刷手册页摘录

    运行mailcap,查看,查看,编辑,撰写,打印-通过mailcap文件中的条目执行程序

    run-mailcap(或其任何别名)将使用给定的操作依次处理每个mime类型/文件。每个文件都指定为它的mime类型,其编码(例如压缩)和文件名,并用冒号分隔。如果省略了mime-type,则尝试通过将文件的扩展名与mime.types文件中的扩展名进行匹配来确定类型。如果省略了编码,则还将根据文件的扩展名确定编码。当前支持的编码是gzip(.gz),bzip(.bz),bzip2(.bz2)和compress(.Z)。文件名“-”可用于表示“标准输入”,但必须指定mime类型。

  3. echo

    该命令echo是您正在使用的shell的内置命令,称为Bash(我假设您正在使用Bash)。您可以使用以下命令来确认这一点:

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    您会注意到,echo它也是一个独立的可执行文件/bin/echo。这是与echo您所使用的命令不同的命令,但目的类似。

  4. print 在zsh / ksh之类的shell中

    感谢@Gilles注释,print您正在寻找的命令很可能是内置在shell中的命令,例如zshand / or ksh。您可以通过手册页来查看其用法man zshbuiltins

    zsh % print "hello world"
    hello world
    

    您可以通过键入zsh或来运行这些外壳之一ksh

打印

也许您正在寻找命令printf

$ printf "%s\n" "hello stringy world"
hello stringy world

$ printf "this is some padded digits: %04d\n" "10"
this is some padded digits: 0010

该命令printf采用一组特殊字符格式,以便您可以指示它如何显示诸如字符串或数字等内容。有关的信息,请参见手册页printf

邮件盖

因此,很多人可能对文件一无所知/etc/mailcap。该文件包含mime类型(文件的标头,用于标识文件的文件类型)。然后,您可以在此mailcap文件中创建条目,以指定用于打开文件的特定mime类型的工具。

text/html; /usr/bin/sensible-browser '%s'; description=HTML Text; nametemplate=%s.html
application/x-troff-man; /usr/bin/nroff -mandoc -Tutf8; copiousoutput; print=/usr/bin/nroff -mandoc -Tutf8 | print text/plain:-
application/x-ogg; /usr/bin/mplayer '%s'; description="OggVorbis Audio"
application/ogg; /usr/bin/mplayer '%s'; description="OggVorbis Audio"
audio/mpeg; /usr/bin/mplayer '%s'; description="MPEG Audio Format"
audio/x-mpegurl; /usr/bin/mplayer '%s'; description="Icecast Playlists"
audio/x-ms-wax; /usr/bin/mplayer '%s'; description="Audio Format"

上面几行说,如果您得到的文件带有mime-type audio/mpeg,则使用该工具/usr/bin/mplayer打开该文件。

这些规则通常由电子邮件工具使用,但是其他工具也可以利用mailcap文件中的这些条目。

如果您想了解有关mime类型或mailcap的更多信息,请参阅以下参考。

参考文献


2
有时我认为你从不睡觉:-)。+1,无法回答得更好
iruvar

2
@PrayagUpd-谢谢您的Q。信不信由你,我也对每个Q都学到一些东西,所以我非常感谢他们,因为他们带我更详细地学习东西。8
slm

1
@PrayagUpd-是的,我查找了您的IP。我在美国这里使用慢跑者。我自己托管博客,因此它们可能基于地理区域IP被阻止了?我一直想将博客移至更易于访问的地方。
slm

2
@PrayagUpd-不客气,感谢您让我知道我的博客。显然,我希望它尽可能地易于访问,如果ppl看起来好像没什么用,那就没事了。
slm

1
print也是一个ksh(和zsh)内置函数,类似于echo但没有历史怪癖。这可能就是为什么使用SO问题的提问者的最终原因print
吉尔斯(Gilles)'所以

0

您可以使用printf命令来这样做,

 # printf Hello World
 Hello

 # printf "Hello World"
 Hello World

好吧,您确实需要使用print commnad,然后才能添加别名

 # alias print='echo'

 # print Hello World
 Hello World

 # unalias print  < -- to revert.

还设置永久

 # export print='echo'

 # print Hello Linux
 Hello Linux

所以,

# export | grep print
declare -x print="echo"

# unset print   < -- to revert.
# export | grep print
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.