উত্তর:
থেকে ব্যাশ টিপস এবং ট্রিকস: শৈলী সঙ্গে 'সিডি' :
অবশেষে, আমি আপনাকে সিডি কমান্ডের নিজস্ব কাস্টম প্রতিস্থাপনটি কীভাবে লিখব তা আপনাকে দেখাতে চাই।
আপনি কি নিজেকে সর্বদা ডিরেক্টরিতে পরিবর্তন করার পরে একই জিনিস টাইপ করতে দেখেন? আপনি সম্ভবত প্রতিবার সেখানে ফাইলগুলি তালিকাভুক্ত করবেন, সম্ভবত এত বেশি যে আপনার হাতগুলি প্রতিটি 'সিডির পরে' ls 'টাইপ করে।
ঠিক আছে, আমি যেভাবে ভাবতে পারি সে চেষ্টা করেই এটি সন্ধান করে যে আমরা যে লক্ষ্যটি খুঁজছি তা সঠিকভাবে সম্পাদন করার একমাত্র উপায় আছে। আমাদের একটি শেল ফাংশন তৈরি করতে হবে।
শেল ফাংশনগুলি শেল প্রোগ্রামিংয়ের অংশ। সংকলিত প্রোগ্রামিং ভাষার মতো ফাংশনগুলি এক প্রকারের প্রক্রিয়াগত মডুলারিজেবিলিটি সরবরাহ করে। বিভিন্ন পরামিতিগুলির সাথে প্রায়শই ব্যবহৃত বিট বা গণনা সম্পাদনের জন্য কেউ জেনেরিক ফাংশন তৈরি করতে পারে। এই ক্ষেত্রে, প্যারামিটারটি বর্তমান কার্যক্ষম ডিরেক্টরি।
এখানে একটি সহজ:
function cs () { cd $1 ls }
@ গিরিহার কৃত্রিমভাবে দ্রষ্টব্য হিসাবে , আপনি যদি কোনও নামের সাথে কোনও ডিরেক্টরিতে ডিরেক্টরিতে স্যুইচ করার চেষ্টা করেন তবে উপরের ফাংশনটি ব্যর্থ হবে:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
পরিবর্তে আপনার নিম্নলিখিত ফাংশনটি ব্যবহার করা উচিত:
function cs () {
cd "$@" && ls
}
আপনি একবার সেই কোডটি আপনারটিতে যুক্ত করলে ~/.bashrc
, আপনার এটি করা উচিত:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
আপনি builtin
কমান্ডটি ব্যাশে ব্যবহার করতে পারেন :
function cd() {
new_directory="$*";
if [ $# -eq 0 ]; then
new_directory=${HOME};
fi;
builtin cd "${new_directory}" && ls
}
function ls() { /usr/bin/ls $* }
cd
কারণ rvm
আমার cd
সংজ্ঞাটিও পরিবর্তন করে। দেখুন stackoverflow.com/a/19941991/1601989
একটি উলের পরিবর্তে একটি ফাংশন ব্যবহার করুন:
cs() { cd "$1" && ls; }
ফাংশনটি ব্যবহারের পরামর্শের জন্য ফ্লোরিয়ান ডিয়েচকে ধন্যবাদ । আমি cs
নাম হিসাবে ব্যবহার করতে পারি না কারণ সাসাউন্ড প্যাকেজে একটি cs
কমান্ড রয়েছে , তাই আমি ব্যবহার করেছি ।lc
আমি এটি ~/.bash_aliases
( nano ~/.bash_aliases
) এ যুক্ত করেছি:
function lc () {
cd $1;
ls
}
এটি reset
কার্যকর হওয়ার জন্য টার্মিনালটি হওয়া দরকার ।
$1
শ্বেত স্পেস থাকলে এটির মতো অচিহ্নযুক্ত হওয়া এটি ব্যর্থ করে দেবে। এছাড়াও, আপনার ফেরতের মূল্য পরীক্ষা করা উচিত cd
; যদি এটি ব্যর্থ হয় (যেমন অনুমতি অস্বীকার), তবে এটি চালানোর কোনও মানে নেই ls
। lc() { cd "$@" && ls; }
এই ফাংশন একটি সম্প্রসারণ হিসাবে: cs() { cd "$1" && ls; }
, আপনি ফাংশনের এর সব আর্গুমেন্ট পাস করতে পারেন cd
ব্যবহার করে $@
পরিবর্তে "$1"
যেমন: cs() { cd $@ && ls; }
।
আমার নতুন সংজ্ঞা দিতে সমস্যা হয়েছিল cd
কারণ rvm
আমার cd
সংজ্ঞাটিও পরিবর্তন করে। Https://stackoverflow.com/a/19941991/1601989 দেখুন । আমি সত্যিই ব্যবহার করতে চাইনি builtin
কারণ যা rvm
কিছু করছে তা এড়িয়ে যাবে ।
আমি আমার সাথে নিম্নলিখিতগুলি যুক্ত করেছি .bashrc
:
# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
if [[ $# -eq 0 ]]; then
cd
elif [[ -d "$*" ]]; then
cd "$*"
elif [[ -f "$*" ]]; then
echo "WARNING: file given, cd to file's dirname" 1>&2
local dir=$(dirname "$*")
cd "$dir"
else
cd "$*"
fi
}
function cs()
{
cdd $* && ls
}
এবং তারপরে rmv
লাইনের পরে .bashrc
:
alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd