comando print em vez de eco no linux


7

Eu simplesmente posso imprimir uma mensagem no terminal usando o echocomando linux .

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

Posso ter a mesma saída com o printcomando

Na verdade, eu $ man printanalisei os manuais deles, onde o descreve como Run-mailcap-programs, termo que nunca ouvi antes. E soube que ele é usado para encontrar o programa correto para abrir um arquivo, com base no MIME.

Então, existe alguma maneira de imprimir uma linha simples usando printsozinho em vez de echo?

Encontrei um problema semelhante no Need to atribuir o conteúdo de um arquivo de texto a uma variável em um script bash , mas pessoas sugerindo echopor printlá.

Tentei seguir, mas tenho problemas.

$ 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"

Ele pede um arquivo, com o arquivo fornecido.

$ 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"

Mas comecei a trabalhar em combinação com o awkcomando com um arquivo fornecido,

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

Em qual SO você está?
slm

@slm Estou no ubuntu
prayagupd

OK, veja a minha resposta e deixe-me saber se isso ajuda
SLM

Respostas:


16

Você está confundindo muitas coisas aqui, deixe-me tentar separar isso para você.

  1. awk '{print}' ...

    Isso não tem nada a ver com o que printvocê está perguntando. awké uma linguagem de programação dinâmica que contém seus próprios comandos, sendo printum deles.

  2. print --"text/plain" "prayag works on JVM" e outras formas

    O comando printé para exibir arquivos de acordo com o conteúdo do arquivo mailcap, usando o "manipulador" designado para cada tipo de arquivo específico, não para imprimir seqüências na tela.

    trecho da página de manual de impressão

    run-mailcap, visualize, veja, edite, componha, imprima - execute programas através de entradas no arquivo mailcap

    O run-mailcap (ou qualquer um de seus aliases) usará a ação fornecida para processar cada tipo / arquivo MIME por vez. Cada arquivo é especificado como seu tipo MIME, sua codificação (por exemplo, compactação) e nome do arquivo juntos, separados por dois pontos. Se o tipo mime for omitido, é feita uma tentativa de determinar o tipo, tentando corresponder a extensão do arquivo com as dos arquivos mime.types. Se a codificação for omitida, ela também será determinada pelas extensões do arquivo. As codificações atualmente suportadas são gzip (.gz), bzip (.bz), bzip2 (.bz2) e compactação (.Z). Um nome de arquivo "-" pode ser usado para significar "entrada padrão", mas um tipo MIME deve ser especificado.

  3. echo

    O comando echoé um comando interno do shell que você está usando chamado Bash (suponho que você esteja usando o Bash). Você pode confirmar isso usando este comando:

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

    Você notará que echotambém é um executável independente /bin/echo,. Este é um comando diferente do que echovocê está usando, mas serve a um propósito semelhante.

  4. print em conchas como zsh / ksh

    Graças ao comentário do @Gilles, o printcomando que você está procurando provavelmente é aquele que está embutido em shells como zshe / ou ksh. Você pode ver seu uso na página de manual man zshbuiltins,.

    Exemplo

    zsh % print "hello world"
    hello world
    

    Você pode executar um desses shells digitando zshou ksh.

printf

Talvez você esteja procurando o comando 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

O comando printfusa um conjunto de formatação de caracteres especiais para que você possa instruí-lo como deseja exibir itens como cadeias de caracteres ou dígitos, etc. Consulte a página de manual para printf.

mailcap

Então, muitas pessoas provavelmente estão alheias ao arquivo /etc/mailcap. Este arquivo contém tipos MIME (cabeçalhos de arquivos que identificam que tipo de arquivo é um arquivo). Você pode criar entradas nesse mailcaparquivo que designam qual ferramenta usar para abrir um tipo mime específico para um arquivo.

Exemplo

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"

As linhas acima dizem que, se você obtiver um arquivo com o tipo MIME audio/mpeg, use a ferramenta /usr/bin/mplayerpara abrir esse arquivo.

Essas regras geralmente são usadas pela ferramenta de email, mas outras ferramentas também podem se beneficiar dessas entradas no mailcaparquivo.

Se você estiver interessado em aprender mais sobre tipos mime ou mailcap, consulte as seguintes referências.

Referências


2
Às vezes acho que você nunca dorme :-). +1, não poderia ter respondido isso melhor
Iruvar

2
@PrayagUpd - obrigado por seu P. Acredite ou não, eu também aprendo algo com cada Q. Por isso, eu os aprecio imensamente, pois eles me levam a aprender as coisas de uma maneira muito mais detalhada. 8-)
slm

1
@ PrayagUpd - sim, procurei seu IP. Eu uso corredor de estrada aqui nos EUA. Eu hospedo meu blog de forma que eles provavelmente estejam bloqueando com base no IP da região geográfica? Eu pretendia mudar meu blog para algo mais acessível.
slm

2
@ PrayagUpd - de nada, obrigado por me informar sobre o meu blog. Obviamente, quero que seja o mais acessível possível, não adianta escrever as coisas se as pessoas não conseguirem.
Slm

1
printtambém é um ksh (e zsh) embutido, semelhante, echomas sem as peculiaridades históricas. Essa é provavelmente a origem última do motivo pelo qual o solicitante dessa pergunta do SO usou print.
Gilles 'SO- stop be evil' (

0

Você pode usar o comando printf para fazer isso,

 # printf Hello World
 Hello

 # printf "Hello World"
 Hello World

Bem, exatamente você precisa usar o commnad de impressão e adicionar o alias

 # alias print='echo'

 # print Hello World
 Hello World

 # unalias print  < -- to revert.

também para definir permanente,

 # export print='echo'

 # print Hello Linux
 Hello Linux

tão,

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

# unset print   < -- to revert.
# export | grep print
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.