কীভাবে একটি apt up
অংশে পুনরায় ব্যবহার করতে হবে apt update
এবং apt upgrade
একটি নাম ছাড়াই কেবল একটি লাইনে ক্রমানুসারে উভয় কমান্ড কার্যকর করতে আদেশগুলি।
ভালো কিছু: apt up{date,grade}
।
কীভাবে একটি apt up
অংশে পুনরায় ব্যবহার করতে হবে apt update
এবং apt upgrade
একটি নাম ছাড়াই কেবল একটি লাইনে ক্রমানুসারে উভয় কমান্ড কার্যকর করতে আদেশগুলি।
ভালো কিছু: apt up{date,grade}
।
উত্তর:
সরল উপায় (এবং আরও দক্ষ) লুপের মাধ্যমে হয় (এক লাইনে তবে এখানে এটি স্পষ্টতার জন্য একাধিক লাইনে দেখানো হয়েছে):
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
এবং $2
args:
$ 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
বাস্তব কমান্ড কার্যকর করার জন্য এটি চালিত না করে
for i in {date,grade}; do sudo apt up${i}; done
~/.bash_aliases
আপনিও এ্যালিয়াস রাখতে পারেন । এই ফাইলটি স্বয়ংক্রিয়ভাবে উত্স থেকে নেওয়া উচিত ~/.bashrc
।
apt
যুক্তি ( হ্যাঁ, এটি দুটি কমান্ড) বিভিন্ন যুক্তি (আপডেট এবং আপগ্রেড) দিয়ে চালাতে চান তখন এটি করার কোনও মানে নেই , তাই আমি এখনও লুপের
for i in date grade; do
upgrate
।
আপনি বর্তমান কমান্ড লাইনের অংশগুলি পেতে এবং এটি সংশোধন করতে বাশ ইতিহাস সম্প্রসারণও ব্যবহার করতে পারেন:
$ apt update; !#:s/date/grade
apt update; apt upgrade;
Reading package lists... Done
...
!#
বর্তমান লাইন:s/date/grade
একটি পরিবর্তক যা প্রতিস্থাপন date
করেgrade
!#:s/dat/grad
পরিবর্তে আরও 2 টি অক্ষর সংরক্ষণ করতে পারেন
এর xargs
পরিবর্তে আরও একটি সহজ বিকল্প for
:
echo up{dat,grad}e | xargs -n1 apt
টেস্ট:
$ echo up{dat,grad}e | xargs -n1 echo apt
apt update
apt upgrade
তবে, আমি সেরগির মতো শেল ওরফেফকে পছন্দ করব কারণ এই "সহজ" উপায়গুলি আসলে কার্যকর হিসাবে যথেষ্ট সহজ নয়।
printf "%s\n" {date,grade} | xargs -I% -n1 echo apt up%
যদিও এই একটি বিট আর
printf '%s'
সাধারণত এটি ভাল অভ্যাস যেহেতু আপনি এড়াতে পারবেন না, যেমন --help
বা এর সাথে -e
।
printf '%s\0'
আরও ভাল হতে পারে, xargs
নাল টার্মিনেটেড
এটির মতো একটি ফাংশন তৈরি করুন:
repeat() {
for suffix in "${@:2}";
do
eval "$1""$suffix";
done
}
তাহলে আপনি চালাতে পারেন repeat 'apt up' {date,grade}
। একেবারে পৃথক কমান্ডের জন্য পুনরায় ব্যবহারযোগ্য হওয়ার সুবিধা রয়েছে যদিও এটি আপনাকে এটির জন্য কোনও টাইপ সংরক্ষণ করে না।
আমি অবশ্যই অন্য কয়েকটি উত্তরের সাথে একমত হতে পারি যে এর মতো কিছু সম্ভবত আরও কার্যকর:
alias apt-up='apt update && apt upgrade'
@ মুড়ুর উত্তর আমাকে ইতিহাসের প্রসার সম্পর্কে পড়তে বাধ্য করেছিল এবং আমি আরও একটি বৈকল্পিক পেয়েছি
$ sudo apt update
$ ^dat^grad^
^string1^string2^
এর সমান !!:s/string1/string2/
, যা সর্বশেষ আদেশটি গ্রহণ করে এবং এর সাথে প্রতিস্থাপন string1
করে string2
।