Linuxでエコーの代わりにコマンドを印刷する


7

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

どのOSを使用していますか?
slm

@slm私はUbuntuにいます
prayagupd

わかりました。私の答えを見て、それが役に立ったかどうかを知らせてください
slm

回答:


16

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

  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あなたが探しているコマンドは、おそらくzshやなどのシェルに組み込まれているものkshです。使用方法は、manページで確認できますman zshbuiltins

    zsh % print "hello world"
    hello world

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

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タイプまたはメールキャップについて詳しく知りたい場合は、次の参考文献をご覧ください。

参考文献


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「SO-邪悪なことをやめなさい」

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.