ইতিহাস সহ পড়া


11

আমি কীভাবে বিল্টিন readকমান্ড সমর্থন ইতিহাস তৈরি করতে পারি , তার মাধ্যমে চক্রের জন্য উপরে / ডাউন কী টিপে?

আপনি আপ কীটি টিপানোর সময় আমি ধরার চেষ্টা করেছি, তবে এটি এর সাথে কাজ করবে বলে মনে হয় না read:

read -p '> ' -n 3 foo
echo
echo -n "$foo" | hexdump

তীরচিহ্নগুলি টিপানো কাজ করছে বলে মনে হচ্ছে এবং এটি ব্যবহার করে আমি এটি সনাক্ত করতে পারি, তবে আমি টিপলে এটি aaব্যর্থ হবে কারণ এটি কেবলমাত্র তীরটির সনাক্তকারীটির প্রথম অক্ষরটি পড়বে, তৃতীয়টি পৃথক তীরটি পৃথক করার জন্য প্রয়োজন কি।

উত্তর:


9

আপনি rlwrapযদি সফ্টওয়্যার ইনস্টল করতে আপত্তি না করেন তবে আপনি এটির জন্য ব্যবহার করতে পারেন ।

আপনি সম্ভবত একটি পৃথক ইতিহাস ফাইল রাখতে চান যা কেবলমাত্র আপনার স্ক্রিপ্টে নির্দিষ্ট প্রম্পটের জন্য ইতিহাস বজায় রাখে (যেমন ব্যবহারকারীর শেল কমান্ড ইতিহাসের সাথে মিশ্রণ এড়াতে)।

এখানে একটি উদাহরণ যা আপনার জন্য কার্যকর হতে পারে:

#!/bin/sh
# Save in rlwrap_example.sh

HISTORY=$HOME/.myscript_history
USERINPUT=$(rlwrap -H $HISTORY sh -c 'read REPLY && echo $REPLY')
echo "User said $USERINPUT"

$ ./rlwrap_example.sh
hello
User said hello

উপরের স্ক্রিপ্টে, ব্যবহারকারী সমস্ত জিএনইউ রিডলাইন কার্যকারিতা ব্যবহার করতে পারে - এর সাথে ইতিহাস - এবং সঞ্চিত - থেকে ইতিহাস দেওয়া হয়  ~/.myscript_history। প্রয়োজন মত টুইঙ্ক।

বিকল্পভাবে, আপনি read -eবাশের ব্যবহার করতে পারেন , যা readআমন্ত্রণগুলির জন্য পাঠ্যলাইন সক্ষম করে , তবে আপনি সম্ভবত এর ইতিহাস কার্যকারিতা খুব সীমাবদ্ধ দেখতে পাবেন (অর্থাত্ প্রায় অস্তিত্বহীন)।


10

এই পুরানো মেলিং তালিকা পোস্ট থেকে মাইক স্ট্রোয়ানের দুর্দান্ত উত্তরটি অনুলিপি করতে :

শেলের ইতিহাসে একটি ফাইল পড়তে আপনি "ইতিহাস-আর" এবং আপনি ইতিহাসে পড়া প্রতিটি লাইন যুক্ত করতে "ইতিহাস -s" ব্যবহার করতে পারেন। তারপরে হিস্টরি -w ব্যবহার করে ইতিহাসটি ফাইলে সংরক্ষণ করুন। Vi স্টাইল রিডলাইন এডিটিং সহ এখানে একটি উদাহরণ।

#!/bin/bash
history -r script_history
set -o vi
CMD=""
while true
do
    echo "Type something"
    read -e CMD
    history -s "$CMD"
    echo "You typed $CMD"
    case "$CMD" in
        stop)
            break
            ;;
        history)
            history
            ;;
    esac
done
history -w script_history
echo stopping

আমি এই সমাধানটির চেয়ে ভাল পছন্দ করি rlwrap(কমপক্ষে আমার মেশিনে) rlwrapসিটিআরএল-সি করুণভাবে পরিচালনা করতে অক্ষম, উদাহরণস্বরূপ চালানো USERINPUT=$(rlwrap -o cat)এবং সিটিআরএল-সি টিপতে চেষ্টা করুন এবং আপনার টার্মিনালটি পরে কীভাবে আচরণ করবে তা দেখুন ( resetআবার কোনও বুদ্ধিমান অবস্থায় ফিরে আসার জন্য কমান্ডটি চালান ) ।
zpon

আপনি অতিরিক্ত লিবস ইনস্টল করতে না চান এবং ইনপুট পরিচালনা করতে আলাদা ফাইল ব্যবহার করে আপনি খুশি হন এটি সত্যিই দুর্দান্ত কাজ করে।
লুক এক্সন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.