web-dev-qa-db-ja.com

Linuxのエコーの代わりに印刷コマンド

Linux echoコマンドを使用して、ターミナルでメッセージを出力できます。

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

printコマンドで同じ出力を取得できますか?.

私は実際に$ man printは、これをRun-mailcap-programsと表現しています。そして、それはMIMEに基づいて、ファイルを開くための正しいプログラムを見つけるために使用されることがわかりました。

では、printの代わりにechoだけを使用して単純な行を印刷する方法はありますか

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
7
prayagupd

あなたはここで多くのことを混乱させています。私はあなたのためにこれをばらばらにしてみます。

  1. awk '{print}' ...

    これはあなたが尋ねているprintとは何の関係もありません。 awkは、独自のコマンドを含む動的プログラミング言語で、printはその1つです。

  2. print --"text/plain" "prayag works on JVM"およびその他のフォーム

    コマンドprintは、文字列を画面に出力するためではなく、特定のファイルタイプごとに指定された「ハンドラ」を使用して、mailcapファイルの内容ごとにファイルを表示するためのものです。

    print manページからの抜粋

    run-mailcap、表示、表示、編集、作成、印刷-mailcapファイルのエントリを介してプログラムを実行します

    run-mailcap(またはそのエイリアス)は、指定されたアクションを使用して、各MIMEタイプ/ファイルを順番に処理します。各ファイルは、MIMEタイプ、エンコーディング(圧縮など)、ファイル名をコロンで区切って指定します。 mime-typeが省略されている場合、ファイルの拡張子をmime.typesファイル内の拡張子と一致させることにより、タイプを判別しようとします。エンコーディングを省略した場合は、ファイルの拡張子からも決定されます。現在サポートされているエンコードは、gzip(.gz)、bzip(.bz)、bzip2(.bz2)、および圧縮(.Z)です。ファイル名「-」は「標準入力」を意味するために使用できますが、その場合はMIMEタイプを指定する必要があります。

  3. echo

    コマンドechoは、使用しているシェルへの組み込みコマンドで、Bashと呼ばれます(私はBashを使用していると想定しています)。これは、次のコマンドを使用して確認できます。

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

    echoもスタンドアロンの実行可能ファイル/bin/echoであることがわかります。これは、使用しているechoとは異なるコマンドですが、目的は同じです。

  4. print zsh/kshなどのシェル

    @Gillesコメントのおかげで、探しているprintコマンドは、zshkshなどのシェルに組み込まれているコマンドである可能性が高いです。使い方はman zshbuiltinsのmanページで確認できます。

    zsh % print "hello world"
    hello world
    

    zshまたはkshと入力すると、これらのシェルの1つを実行できます。

printf

おそらく、コマンド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-typesまたはmailcapの詳細に興味がある場合は、次の参考文献を参照してください。

参考文献

16
slm

これを行うには、printfコマンドを使用できます。

 # printf Hello World
 Hello

 # printf "Hello World"
 Hello World

まあ、まさにあなたはprintコマンドを使う必要があり、次にエイリアスを追加することができます

 # 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
0
Ranjithkumar T