শেলের মধ্যে একটি কমান্ড চালানোর আগে সর্বদা ব্যবহারকারীকে অনুরোধ করুন


10

sudoপাসওয়ার্ড জিজ্ঞাসা করার অনুরূপ একটি আদেশ কার্যকর করার আগে ব্যবহারকারীদের সর্বদা নিশ্চিতকরণের জন্য অনুরোধ করে এমন কোনও ইউটিলিটি রয়েছে কি ?


1
আপনি কি কোনও আদেশের জন্য সত্যই এটি চান? সহ cdএবং ls?
কার্স্টেন থিয়েল

আমি এটি .Bashrc এ আমার নিজস্ব উপাধিতে রাখতে চাই।
m33lky

উত্তর:


9

আপনি কি অতিরিক্ত কমান্ড টাইপ না করে এটি কাজ করতে চান?

$ rm file

অথবা শুধুমাত্র যখন ব্যবহারকারী কিছু পছন্দ করে

$ confirm rm file

অথবা শুধুমাত্র যখন ব্যবহারকারী নির্দিষ্ট কমান্ডগুলি চালনার চেষ্টা করে, যেমন

$ rm file

কিন্তু না

$ echo "Hello"

বিকল্প 1, যদি এটি zsh এ প্রাইসেক হুক বা ব্যাশে DEBUG ফাঁদ ব্যবহার করে করা যায়।

অপশন 2 যদি, /etc/bash.bashrcঅন্য শেল স্টার্টআপ ফাইলে এমন কিছু রাখুন।

confirm() {
    echo -n "Do you want to run $*? [N/y] "
    read -N 1 REPLY
    echo
    if test "$REPLY" = "y" -o "$REPLY" = "Y"; then
        "$@"
    else
        echo "Cancelled by user"
    fi
}

যদি বিকল্প 3, আপনি confirmউপরের স্ক্রিপ্টটি সংশোধন করতে পারেন , বা কিছু কমান্ডের কিছু করার আগে জিজ্ঞাসা করার বিকল্প রয়েছে যেমন, উদাহরণস্বরূপ rm -i। আপনি করা হতে পারে alias rm='rm -i'মধ্যে /etc/bash.bashrc


আমি কেবল একটি একক আদেশের নিশ্চয়তা চাই যা আমাকে সর্বদা মাথা ব্যথা করে। স্ক্রিপ্টটি কেমন হবে?
দানিজেল

10

আমি কিছুটা বাশ নিয়ে খেলেছি এবং একটি হ্যাক বের করেছি যার দ্বারা এটি সম্ভব হয়েছিল।

#!/bin/bash

debug_trap () {
    echo "executing $BASH_COMMAND"
    echo "Allow?"
    select choice in yes no
    do
        if [ "$choice" = "yes" ]
        then break
        elif [ "$choice" = "no" ]
        then return 1
        fi
    done
}

shopt -s extdebug
trap debug_trap DEBUG

আপনি এই স্ক্রিপ্টটির নীচে, বলুন confirm-any-command.shএবং sourceএটিতে সংরক্ষণ করতে পারেন bashrc। এটি প্রতিটি আদেশের নিশ্চিতকরণের জন্য জিজ্ঞাসা করবে আপনি কার্যকর করার চেষ্টা করবেন।

অনুগ্রহ করে নোট করুন যে এটি একটি প্রুফ অফ কনসেপ্ট হ্যাক ছাড়া আর কিছুই নয়; আমি সন্দেহ করি যে এটি এই ফর্মটিতে আসলেই কার্যকর হতে পারে। আপনার টাইপ করা প্রতিটি কমান্ডটি যদি আপনাকে নিশ্চিত করতে হয় তবে খুব শীঘ্রই প্রতিটি কমান্ডের পরে স্বয়ংক্রিয়ভাবে "হ্যাঁ" চাপার অভ্যাস অর্জন করবেন। "কমান্ড শেষে" জন্য আপনার মানসিক ম্যাপিং শুধু থেকে পরিবর্তন করতে হবে Enterকরতে Enter, yes, Enter- আপনি এটি সামগ্রিকভাবে টাইপ করা হবে, এমনকি যাচাই করছে যে আপনি উপর কিছু সময় ব্যয় করার চেষ্টা না সত্যিই এই কমান্ডটি চালাবার চাই। এটি প্রতিক্রিয়াশীল এবং আপনাকে সাহায্য করবে না।


অসীম লুপ Allow? 1) yes 2) no #? yesno
তৈরির

@vladkras পড়া help select: আপনি ইনপুট অনুমিত করছি 1বা 2বদলে yesবা no। অবৈধ ইনপুটগুলির জন্য স্বয়ংক্রিয় পুনরায় চেষ্টা হ'ল আচরণ (যাতে স্ক্রিপ্ট লেখককে whileনিজেকে পুনরায় উদ্ভাবন করতে হবে না , সংক্ষিপ্ততা এবং স্পষ্টতা বজায় রাখতে হবে) এবং ইওএফ ইনপুট লুপটি বন্ধ করে দেয়। এটি জেনে আপনি নিজে যাচাই করতে পারবেন যে উপরের স্ক্রিপ্টটি কাজ করে। আমি এটি সংশোধন করব না, যেহেতু এটি কোনওভাবেই ধারণার একটি অশোধিত প্রমাণ।
ulidtko

সেটা সত্য. আমি আপনার y e s Enterউদাহরণ দিয়ে বিভ্রান্ত হয়েছি
ভ্লাদক্রাস

0

প্রথমে টার্মিনালটি খুলুন।

তারপরে, টাইপ করুন

cd ~
touch .sure
chmod 700 .sure

এরপরে .সুর করুন এবং এটি ভিতরে পেস্ট করুন।

#!/bin/bash --init-file
PS1='> '
alias y='
    $1
    exit
'
alias n='killall Terminal'
echo ''
echo 'Are you sure? Answer y or n.'
echo ''

এর পরে, ফাইলটি বন্ধ করুন।

~/.sure ; ENTER COMMAND HERE

এটি আপনাকে কমান্ডটি চালিয়ে যাওয়ার আগে নিশ্চিত কিনা একটি প্রম্পট দেবে।

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