কেবলমাত্র একটি লাইনে ক্রমানুসারে উভয়কে সম্পাদন করতে `অ্যাপট আপডেট` এবং` অ্যাপটি আপগ্রেড` কমান্ডের `apt up` অংশটি পুনরায় ব্যবহার করুন


11

কীভাবে একটি apt upঅংশে পুনরায় ব্যবহার করতে হবে apt updateএবং apt upgradeএকটি নাম ছাড়াই কেবল একটি লাইনে ক্রমানুসারে উভয় কমান্ড কার্যকর করতে আদেশগুলি।

ভালো কিছু: apt up{date,grade}


আসলে এটি অর্জনের লক্ষ্য কী হবে? কেন এটি আকর্ষণীয় / প্রাসঙ্গিক হতে পারে?
ভ্যানিয়ামিয়াম

25
@ ভেনিয়ামিয়াম আমরা লিনাক্স ব্যবহারকারী, অর্থহীন জিনিস চেষ্টা করে এমন কৌশলগুলি শিখতে দেয় যা পরবর্তীকালে আরও জটিল জিনিসগুলিতে প্রয়োগ করা যেতে পারে, যদি আমাদের মধ্যে কেউ কখনও সত্যবাদী না হয় তবে আমাদের কেউই এখানে থাকবেন না
ড্যারেন এইচ

1
যে @DarrenH কি আমি তো চিন্তা :-)
ভানাদিত্তম

উত্তর:


19

সরল উপায় (এবং আরও দক্ষ) লুপের মাধ্যমে হয় (এক লাইনে তবে এখানে এটি স্পষ্টতার জন্য একাধিক লাইনে দেখানো হয়েছে):

for i in {date,grade}; do
     apt up${i}
done

স্মার্ট উপায় হ'ল ~/.bashrcএই দুটি কমান্ডের জন্য একটি উপাধি তৈরি করা এবং এটি আবার কখনও টাইপ করা ভুলে যাওয়া:

alias upgrade=' sudo apt update && sudo apt upgrade'

বিস্তৃত উপায় এটি করা:

$ echo sudo" "apt" "up{"date","grade"}" && " :
sudo apt update &&  sudo apt upgrade &&  :

কি হচ্ছে দেখুন? আমরা শেল দ্বারা চালিত পাঠ্যের একটি বৈধ স্ট্রিং তৈরি করছি। এখন আপনাকে যা করতে হবে তা হ'ল evalপরিবর্তে ব্যবহার করা echo। তবে evalশেল স্ক্রিপ্টিংয়ে সাধারণত প্রস্তাবিত হয় না এবং এই কমান্ডটি লুপের চেয়ে অনেক বেশি সংহত এবং বহনযোগ্য নয়। থিমটিতে ইওল ছাড়াই তারতম্য (এবং এ পর্যন্ত সংক্ষিপ্ততম, তবে পাইপ এবং একাধিক কমান্ডের কারণে কার্যকর নয় echo, দুটি apt, sudoএবং shপ্রচুর কাঁটাচামচ):

$ echo "apt "{update,upgrade}";"|sudo sh

আমরা ব্যবহার করতে পারেন setঅবস্থানগত পরামিতি মধ্যে পছন্দসই ক্রম চালু করতে এবং মাত্র চালানো aptসঙ্গে $1এবং $2args:

$ set {update,upgrade}; echo apt $1 && echo apt $2
apt update
apt upgrade

অথবা বিকল্পভাবে আবার লুপের জন্য ব্যবহার করুন, যেহেতু এটি অবস্থানীয় পরামিতিগুলি প্রসেসিংয়ের ক্ষেত্রে ডিফল্ট হয় যদি আপনি কোনও ক্রম নির্দিষ্ট না করে থাকেন for variable (sequence)

$ set {update,upgrade} ; for i; do echo apt $i ;done
apt update
apt upgrade

ব্যবহার setকরা একটি খুব সাধারণ কৌশল যা আমি পেশাদারদের মধ্যে দেখতে পাই যারা শেলগুলি নিয়ে প্রচুর পরিমাণে কাজ করে এবং একটি ভাল কারণে - এটি খুব বহনযোগ্য এবং /bin/shযেখানে আপনার কোনও অ্যারে বা {a,b,c}সম্প্রসারণ নেই সেখানে কাজ করবে । সুতরাং পসিক্স-ল্য পোর্টেবল উপায় হবে set update upgrade ; for i; do echo apt $i ;done। অতিরিক্তভাবে, এটি দক্ষ হওয়া উচিত।


অথবা আমরা whileলুপের রুটে যেতে পারি :

$ echo {date,$'\n',grade}|while read i;do echo apt up${i}; done 
apt update
apt upgrade

অবশ্যই মনে রাখবেন echoবাস্তব কমান্ড কার্যকর করার জন্য এটি চালিত না করে


7
একটি লাইনে লুপের জন্য কেবল করুন। for i in {date,grade}; do sudo apt up${i}; done
ভিডিওনাথ

3
আপনি যদি নিজের ফাইলগুলি সুন্দর এবং পরিপাটি করে রাখতে পছন্দ করেন তবে ~/.bash_aliasesআপনিও এ্যালিয়াস রাখতে পারেন । এই ফাইলটি স্বয়ংক্রিয়ভাবে উত্স থেকে নেওয়া উচিত ~/.bashrc
francescop21

2
আপনি যা চান তা দিয়ে আমি আমার উত্তর আপডেট করেছি। এটি একটি এক-লাইনার, তবে আমি মনে করি না এটি এটিকে আরও সহজ করে তোলে কিনা। সত্যি বলতে গেলে, আপনি যখন দুটি aptযুক্তি ( হ্যাঁ, এটি দুটি কমান্ড) বিভিন্ন যুক্তি (আপডেট এবং আপগ্রেড) দিয়ে চালাতে চান তখন এটি করার কোনও মানে নেই , তাই আমি এখনও লুপের
পথটিই

1
লুপ শিরোলেখের জন্য স্ট্রিং প্রসারণের প্রয়োজন নেই, কেবল পুনরাবৃত্তির নাম দিন:for i in date grade; do
রেক্সকোগিটানস

5
এই জাতীয় একটি উলামের নাম অবশ্যই প্রকাশ করা উচিত upgrate
পাইপ 11

14

আপনি বর্তমান কমান্ড লাইনের অংশগুলি পেতে এবং এটি সংশোধন করতে বাশ ইতিহাস সম্প্রসারণও ব্যবহার করতে পারেন:

$ apt update; !#:s/date/grade
apt update; apt upgrade;
Reading package lists... Done
...
  • !# বর্তমান লাইন
  • :s/date/gradeএকটি পরিবর্তক যা প্রতিস্থাপন dateকরেgrade

6
আপনি এর !#:s/dat/gradপরিবর্তে আরও 2 টি অক্ষর সংরক্ষণ করতে পারেন
ড্যান

9

এর xargsপরিবর্তে আরও একটি সহজ বিকল্প for:

echo up{dat,grad}e | xargs -n1 apt

টেস্ট:

$ echo up{dat,grad}e | xargs -n1 echo apt
apt update
apt upgrade

তবে, আমি সেরগির মতো শেল ওরফেফকে পছন্দ করব কারণ এই "সহজ" উপায়গুলি আসলে কার্যকর হিসাবে যথেষ্ট সহজ নয়।


1
খুব সুন্দর. থিমে প্রকরণ হতে পারে printf "%s\n" {date,grade} | xargs -I% -n1 echo apt up%যদিও এই একটি বিট আর
Sergiy Kolodyazhnyy

printf '%s'সাধারণত এটি ভাল অভ্যাস যেহেতু আপনি এড়াতে পারবেন না, যেমন --helpবা এর সাথে -e
yyny

@YoYoYonnY হ্যাঁ সম্ভবত printf '%s\0'আরও ভাল হতে পারে, xargsনাল টার্মিনেটেড
আরোগুলি

2

এটির মতো একটি ফাংশন তৈরি করুন:

repeat() { 
    for suffix in "${@:2}";
    do
        eval "$1""$suffix";
    done
}

তাহলে আপনি চালাতে পারেন repeat 'apt up' {date,grade}। একেবারে পৃথক কমান্ডের জন্য পুনরায় ব্যবহারযোগ্য হওয়ার সুবিধা রয়েছে যদিও এটি আপনাকে এটির জন্য কোনও টাইপ সংরক্ষণ করে না।

আমি অবশ্যই অন্য কয়েকটি উত্তরের সাথে একমত হতে পারি যে এর মতো কিছু সম্ভবত আরও কার্যকর:

alias apt-up='apt update && apt upgrade'

0

@ মুড়ুর উত্তর আমাকে ইতিহাসের প্রসার সম্পর্কে পড়তে বাধ্য করেছিল এবং আমি আরও একটি বৈকল্পিক পেয়েছি

 $ sudo apt update
 $ ^dat^grad^

^string1^string2^এর সমান !!:s/string1/string2/, যা সর্বশেষ আদেশটি গ্রহণ করে এবং এর সাথে প্রতিস্থাপন string1করে string2


-2

আমি apt-get upনিম্নলিখিত কী সিকোয়েন্স ব্যবহার করে কমান্ডের অংশটি পুনরায় ব্যবহার করছি:

Up ArrowBackspaceBackspaceBackspaceBackspace

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