lệnh in thay vì echo trong linux


7

Tôi chỉ đơn giản có thể in một tin nhắn trong thiết bị đầu cuối bằng cách sử dụng echolệnh linux .

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

Tôi có thể có cùng một đầu ra với printlệnh.

Tôi thực sự đã xem qua các hướng dẫn của họ, trong đó $ man printmô tả nó là Run-mailcap-chương trình mà thuật ngữ mà tôi chưa từng nghe trước đây. Và được biết rằng nó được sử dụng để tìm chương trình chính xác để mở tệp, dựa trên MIME.

Vì vậy, có cách nào để in một dòng đơn giản bằng cách sử dụng printmột mình thay vì echo?

Tìm thấy loại tương tự của vấn đề ở Cần gán nội dung của một tập tin văn bản để một biến trong một kịch bản bash , nhưng mọi người thấy echotrên printđó.

Tôi đã cố gắng làm theo, nhưng có vấn đề.

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

Nó yêu cầu một tập tin, với tập tin được cung cấp.

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

Nhưng đã làm việc kết hợp với awklệnh với một tệp được cung cấp,

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

Bạn đang dùng hệ điều hành nào?
slm

@slm Tôi đang trên Ubuntu
nguyện

OK, xem câu trả lời của tôi và cho tôi biết nếu nó giúp
slm

Câu trả lời:


16

Bạn đang nhầm lẫn nhiều thứ ở đây, hãy để tôi thử và trêu chọc điều này cho bạn.

  1. awk '{print}' ...

    Điều này không có gì để làm với printbạn đang hỏi về. awklà một ngôn ngữ lập trình động chứa các lệnh riêng của nó, printlà một trong số chúng.

  2. print --"text/plain" "prayag works on JVM" và các hình thức khác

    Lệnh printnày là để hiển thị các tệp theo nội dung của tệp mailcap, sử dụng "trình xử lý" được chỉ định cho từng loại tệp cụ thể, không phải để in chuỗi lên màn hình.

    đoạn trích từ trang in

    run-mailcap, xem, xem, chỉnh sửa, soạn thảo, in - thực thi chương trình thông qua các mục trong tệp mailcap

    run-mailcap (hoặc bất kỳ bí danh nào của nó) sẽ sử dụng hành động đã cho để xử lý lần lượt từng loại mime / tệp. Mỗi tệp được xác định là loại mime, mã hóa của nó (ví dụ nén) và tên tệp với nhau, được phân tách bằng dấu hai chấm. Nếu loại mime bị bỏ qua, một nỗ lực để xác định loại được thực hiện bằng cách thử khớp phần mở rộng của tệp với các phần trong tệp mime.types. Nếu mã hóa bị bỏ qua, nó cũng sẽ được xác định từ các phần mở rộng của tệp. Các mã hóa được hỗ trợ hiện tại là gzip (.gz), bzip (.bz), bzip2 (.bz2) và nén (.Z). Tên tệp của "-" có thể được sử dụng để có nghĩa là "đầu vào tiêu chuẩn", nhưng sau đó phải xác định loại mime.

  3. echo

    Lệnh echonày là một lệnh dựng sẵn cho trình bao bạn đang sử dụng được gọi là Bash (Tôi giả sử bạn đang sử dụng Bash). Bạn có thể xác nhận điều này bằng cách sử dụng lệnh này:

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

    Bạn sẽ nhận thấy rằng đó echocũng là một thực thi độc lập , /bin/echo. Đây là một lệnh khác với lệnh echobạn đang sử dụng, nhưng phục vụ một mục đích tương tự.

  4. print trong các vỏ như zsh / ksh

    Nhờ nhận xét @Gilles, printlệnh bạn đang tìm kiếm rất có thể là lệnh được tích hợp vào các shell như zshvà / hoặc ksh. Bạn có thể thấy cách sử dụng của nó thông qua trang man , man zshbuiltins.

    Thí dụ

    zsh % print "hello world"
    hello world

    Bạn có thể chạy một trong các shell này bằng cách gõ zshhoặc ksh.

in

Có lẽ bạn đang tìm kiếm lệnh 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

Lệnh printflấy một bộ định dạng các ký tự đặc biệt để bạn có thể hướng dẫn nó cách bạn muốn hiển thị những thứ như chuỗi hoặc chữ số, v.v. Xem trang man cho printf.

mailcap

Vì vậy, rất nhiều người có thể không biết gì về tập tin /etc/mailcap. Tệp này chứa các loại mime (tiêu đề từ các tệp xác định loại tệp của tệp). Sau đó, bạn có thể tạo các mục trong mailcaptệp này để chỉ định công cụ nào sẽ sử dụng để mở loại mime cụ thể cho tệp.

Thí dụ

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"

Các dòng trên nói rằng nếu bạn nhận được một tệp có loại mime audio/mpeg, thì hãy sử dụng công cụ /usr/bin/mplayerđể mở tệp này.

Các quy tắc này thường được sử dụng bởi công cụ email, nhưng các công cụ khác cũng có thể tận dụng các mục này trong mailcaptệp.

Nếu bạn muốn tìm hiểu thêm về các loại mime hoặc mailcap, hãy xem các tài liệu tham khảo sau.

Người giới thiệu


2
Đôi khi tôi nghĩ bạn không bao giờ ngủ :-). +1, không thể trả lời điều này tốt hơn
iruvar

2
@PrayagUpd - cảm ơn bạn vì Q. Tin hay không tôi cũng học được điều gì đó với mỗi Q vì vậy tôi đánh giá cao họ vì họ thúc đẩy tôi học mọi thứ theo cách chi tiết hơn nhiều. 8-)
slm

1
@PrayagUpd - vâng tôi đã tra cứu IP của bạn. Tôi sử dụng đường chạy ở đây tại Mỹ. Tôi tự lưu trữ blog của mình để họ có thể chặn dựa trên IP khu vực địa lý? Tôi đã có ý định chuyển blog của tôi đến một cái gì đó dễ tiếp cận hơn.
slm

2
@PrayagUpd - bạn được chào đón, cảm ơn vì đã cho tôi biết về blog của mình. Rõ ràng tôi muốn nó có thể truy cập càng nhiều càng tốt, không có lý do gì để viết lên nếu ppl không thể xuất hiện.
slm

1
printcũng là một nội dung ksh (và zsh), tương tự echonhưng không có các quirks lịch sử. Đó có lẽ là nguồn gốc cuối cùng của lý do tại sao người hỏi của câu hỏi SO đó được sử dụng print.
Gilles 'SO- ngừng trở nên xấu xa'

0

Bạn có thể sử dụng lệnh printf để làm như vậy,

 # printf Hello World
 Hello

 # printf "Hello World"
 Hello World

Chà, thật ra bạn cần sử dụng commnad in thì bạn có thể thêm bí danh

 # alias print='echo'

 # print Hello World
 Hello World

 # unalias print  < -- to revert.

cũng để thiết lập vĩnh viễn,

 # export print='echo'

 # print Hello Linux
 Hello Linux

vì thế,

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

# unset print   < -- to revert.
# export | grep print
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.