বিভিন্ন শেলের "ইকো-ই" সহ সিকোয়েন্সগুলি এড়িয়ে চলুন


20

আমি কেবল লক্ষ্য করেছি যে লিনাক্সে আমার শেলের কমান্ডের -eজন্য পতাকাটি উপস্থিত নেই বলে মনে হচ্ছে echo। এটি কি কেবল বিশৃঙ্খলা স্থাপন করে সেটি "স্বাভাবিক"?

উদাহরণ হিসাবে কিছু কোড:

#!/bin/sh
echo -e "\e[3;12r\e[3H"

ছাপে:

-e \e[3;12r\e[3H

এই আগে কাজ! আমি অনুমান করি কিছু sttyকমান্ড মারাত্মক ভুল হয়েছে এবং এখন এটি আর কাজ করে না। কেউ পরামর্শ দিয়েছিলেন যে আমার shআসলে ন্যায়বিচার ছিল bash


"লিনাক্স শেল" বলে কোনও জিনিস নেই । উদাহরণস্বরূপ , echoদেবিয়ান/bin/shdash (একটি অপারেটিং সিস্টেম যাতে লিনাক্স বা ফ্রিবিএসডি এর কার্নেল হিসাবে থাকতে পারে) দ্বারা প্যাকেজটি সরবরাহ করে যেমন শেলটির বিল্টিন রয়েছে
স্টাফেন চেজেলাস

এবং এ কারণেই আমি যখন আমার প্রয়োজন তখন আমার স্ক্রিপ্টে পালানোর অক্ষর রাখি।

উত্তর:


20

কারণ আপনি ব্যবহার shনা bashহয়, তাহলে echoকমান্ডে shবিকল্প নেই -eshম্যানপেজ থেকে :

echo [-n] args...
            Print the arguments on the standard output, separated by spaces.
            Unless the -n option is present, a newline is output following the
            arguments.

এবং এটিও নেই \e:

        If any of the following sequences of characters is encountered
        during output, the sequence is not output.  Instead, the specified
        action is performed:

        \b      A backspace character is output.

        \c      Subsequent output is suppressed.  This is normally used at
                the end of the last argument to suppress the trailing new
                line that echo would otherwise output.

        \f      Output a form feed.

        \n      Output a newline character.

        \r      Output a carriage return.

        \t      Output a (horizontal) tab character.

        \v      Output a vertical tab.

        \0digits
                Output the character whose value is given by zero to three
                octal digits.  If there are zero digits, a nul character
                is output.

        \\      Output a backslash.

        All other backslash sequences elicit undefined behaviour.

5
সংকলনের সময় বেশ কয়েকটি shবাস্তবায়ন সমর্থন করে না বলে বলা যেতে পারে । এটি কেবলমাত্র সেই নির্দিষ্ট sh (সম্ভবত ) সমর্থন করে না যখন সেই নির্দিষ্টটি করে। echo -ebashecho -edash-ebash
স্টাফেন চেজেলাস

17

-eপসিক্স নয় (আসলে, পসিক্স প্রতিধ্বনি সাধারণত কোনও বিকল্প গ্রহণ করে না (যদিও সমর্থন করার অনুমতি রয়েছে -n), দেখুন এখানে ) এবং /bin/shআপনার সিস্টেমে একটি পসিক্স শেল হিসাবে উপস্থিত রয়েছে। -eকিছু শেলের মধ্যে গ্রহণযোগ্য একটি এক্সটেনশন, তবে আপনার এটির উপর নির্ভর করা উচিত নয়, এটি বহনযোগ্য নয়। আদর্শভাবে, ব্যবহার করুন printfবা একটি শেল ব্যবহার করে স্যুইচ করুন echo -e

\eনীচের মন্তব্যে এর সতর্কতাগুলি দেখুন, যা দিয়ে প্রতিস্থাপন করা উচিত \033

printf '\033[3;12r\033[3H'

3
gnouc পয়েন্ট হিসাবে, shনা চিনতে পারে না \e। ব্যবহার\033
ধনী

4

নোট করুন যে কোনও সময় এবং প্রায় কোনও শেলের মধ্যে, আপনি টাইপ করে type echoবা কোন "প্রতিধ্বনি" ডাকা হবে তা নির্ধারণ করতে পারেন which echo। এটি সাধারণত শেল অন্তর্নির্মিত। সুতরাং এটি নির্ভর করে কোন "প্রতিধ্বনি" ইনস্টল করা হয়েছে এবং আপনি কোন শেল ব্যবহার করছেন।


4
which echoব্যবহার করা উচিত নয়, এটি সম্ভবত আপনাকে বলবে না যে আপনি কোনও বিল্টিন ব্যবহার করছেন কারণ whichসাধারণত একটি বাহ্যিক বাইনারি হয়। typeভাল, যদিও।
ক্রিস ডাউন

1
ভাল দাগযুক্ত, যদিও আমার মূল শেল (zsh) এ, এটি একটি বিল্টিন (যেমন প্রকাশ করেছেন type whichবা দ্বারা which which)। ;)
পাইওজো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.