উত্তর:
আপনি একটি ফাংশন দিয়ে এটি করতে পারেন:
$ cdls() { cd "$@" && ls; }
&&
মানে ' cd
একটি ডিরেক্টরি, এবং সফল (যেমন ডিরেক্টরি উপস্থিত রয়েছে) যদি, রান ls
'। &&
অপারেটরটি ব্যবহার করার পরে ;
দুটি কমান্ডের মধ্যে সেমিকোলন অপারেটর ব্যবহার করা আরও ভাল { cd "$@" ; ls; }
। এই দ্বিতীয় কমান্ডটি কাজ না ls
করে নির্বিশেষে চলবে cd
। যদি cd
ব্যর্থ ls
হয় তবে আপনার বর্তমান ডিরেক্টরিতে থাকা সামগ্রীগুলি মুদ্রণ করবে, যা ব্যবহারকারীর জন্য বিভ্রান্তিকর হবে। সেরা অনুশীলন হিসাবে, ব্যবহার করুন &&
এবং না ;
।
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
সাধারণভাবে, একটি কমান্ডের নাম পরিবর্তন করা একটি খারাপ অভ্যাস যা ইতিমধ্যে বিদ্যমান, বিশেষত একটি সাধারণ কমান্ডের মতো cd
। পরিবর্তে, একটি পৃথক নাম সহ একটি নতুন কমান্ড তৈরি করুন। আপনি যদি cd
এমন কোনও ফাংশন বা উপনামের নামে ওভাররাইট করে থাকেন, তবে আপনি যদি cd
100,000 ফাইল সহ ডিরেক্টরিতে প্রবেশ করবেন তখন কী হবে? অনেকগুলি ইউটিলিটি রয়েছে যা ব্যবহার করে cd
এবং তারা এই অস্বাভাবিক আচরণে বিভ্রান্ত হতে পারে। আপনি যদি একটি ভাগ করা অ্যাকাউন্ট ব্যবহার করেন (যেমন root
আপনি যখন অন্য সিস্টেম প্রশাসকদের সাথে কাজ করছেন), বিদ্যমান কমান্ডটি প্রতিস্থাপন করা খুব বিপজ্জনক হতে পারে কারণ পরিবেশ প্রত্যাশার চেয়ে আলাদা।
pwd
। এটি সর্বোত্তম অনুশীলন কিনা তা নিশ্চিত নন তবে এটি সাধারণত করা হয়। কিছু উদাহরণের জন্য tldp.org/LDP/abs/html/aliases.html দেখুন ।
cd() { builtin cd "$@" && pwd; };
- ম্যাকোজে স্ট্যান্ডার্ড বোর্ন শেল ব্যবহার করে (সিয়েরা 10.12.6)
আমার .bashrc এ এটি আছে এবং এটি ভাল কাজ করে।
function cd {
builtin cd "$@" && ls -F
}
আমার .bashrc এর আগে আমার কাছে: [ -z "$PS1" ] && return
এবং এই লাইনের পরে থাকা সমস্ত কিছুই কেবল ইন্টারেক্টিভ সেশনগুলিতে প্রযোজ্য, সুতরাং এটি cd
স্ক্রিপ্টগুলিতে কীভাবে আচরণ করে তা প্রভাবিত করে না ।
[ -z "$PS1" ] && return
কি করে?
[ -z "$PS1" ]
$PS
(ইন্টারেক্টিভ প্রম্পট ভেরিয়েবল) "শূন্য দৈর্ঘ্য" (-z) হয় কিনা তা পরীক্ষা করে । যদি এটি শূন্য দৈর্ঘ্য হয়, এর অর্থ এটি সেট করা হয়নি, সুতরাং বাশ অবশ্যই ইন্টারেক্টিভ মোডে চলবে না। && return
অংশ গুন থেকে প্রস্থান করে .bashrc
এমন অবস্থায়, এই সময়ে।
i
মধ্যে "$-"
: case "$-" in *i*) ;; *) return ;; esac
।
PS1
ভেরিয়েবলটি আনসেট বা খালি হতে পারে এবং শেলটি এখনও ইন্টারেক্টিভ হতে পারে (তবে প্রম্পট ছাড়াই)। আমি $-
নিশ্চিত করতে চেক করব।
অফ-টপিক, যেহেতু প্রশ্নটি ট্যাগ / বাশ, কিন্তু কিছু প্রশ্ন যেমন এইটির সদৃশ হিসাবে বন্ধ করা হয়েছে যা ব্যাশের উল্লেখ নেই:
Zsh সহ:
chpwd() ls
Chpwd () ফাংশনটি zsh দ্বারা ডেকে আনা হয় যখনই বর্তমান ডিরেক্টরি পরিবর্তিত হয় (সিডি, পুশড, পপডি দ্বারা ...)। tcsh এর অনুরূপ বৈশিষ্ট্য রয়েছে এবং সম্ভবত zsh এখান থেকে পেয়েছিল।
আপনার .bashrc ফাইলে একটি উপন্যাস যুক্ত করবেন না কেন?
কিছুটা এইরকম:
alias cdls='cd "$@" && ls'
সিডি কমান্ডের জন্য উপকরণ তৈরির সাধারণ সমাধানটি সঠিক নয় কারণ এমন অন্যান্য কমান্ড রয়েছে যা আপনার বর্তমান ডিরেক্টরিকে পপড বা এমনকি সিডি কমান্ড সহ স্ক্রিপ্ট চালাতে পারে running
Pt PROMPT_COMMAND বাশ হুক ব্যবহার করা ভাল যা কোনও প্রম্পট ফেরানোর আগে একটি আদেশ কার্যকর করে।
কমান্ডটি (আমাদের ক্ষেত্রে একটি ফাংশন) কেবলমাত্র স্ক্রিনের গোলমাল হ্রাস করতে ডিরেক্টরি পরিবর্তিত হলে ls কার্যকর করবে। .Bashrc এর জন্য কোড:
#each console has its own file to save PWD
PrevDir=$(tty)
PrevDir=/tmp/prev-dir${PrevDir////-}
#don't ls when shell launched
echo $PWD > $PrevDir
LsAfterCd() {
[[ "$(< $PrevDir)" == "$PWD" ]] && return 0
ll --color=always | sed 1d
echo $PWD > $PrevDir
}
PROMPT_COMMAND=LsAfterCd
এই কপি:
altercd(){ cd(){ unset -f cd ; cd $*; ls ; altercd; } } ; altercd
এখন আপনি কেবল সহজ সিডি করতে পারেন:
cd /
(files listed)
cd /home
(files listed)
etc...
বাশ-এ আপনি প্যারামিটারের প্রয়োজন হয় এমন ক্রিয়াকলাপের জন্য উপাধিতে পুনরাবৃত্তি করতে পারবেন না। এর জন্য ফাংশন রয়েছে। সুতরাং আপনার ~/.bashrc
নিম্নলিখিত লিখুন
mycd() {
cd "$1"
ls
}
function mycd { builtin cd "$1" && ls "$2" }
।
প্রোফাইলে নীচের কোডটি রাখুন এবং এটি কাজ করে। এইচপি-ইউনিক্স বাক্সে পরীক্ষিত।
cdl()
{
if [ "$#" = 0 ]; then
cd ~ && ls -ltr
elif [ -d "$@" ]; then
cd "$@" && ls -ltr
else
echo "$@" directory not found!!!
fi
}
#SET YOUR ALIAS TO CD
alias cd="cdl"
আরও সহজ - ইতিহাসে ফিরে যাওয়ার ক্ষমতা সহ :
function cd() {
if [ -d "$@" ]; then
echo -n "Stack: "
pushd "$@"
ls
else
builtin cd "$@"
fi
}
function popd() {
builtin popd "$@" && ls
}
আপনি যখন ডিরেক্টরিটি পরিবর্তন করেন এর সাথে একটি লাইন: Stack: (current_dir) (previous_dir) ...
প্রদর্শিত হবে, তারপরে ls
আউটপুট। Dirs ফিরে যেতে ইতিহাস শুধু এই কমান্ড পপ: popd
।
আমি যুক্ত করেছি else
যাতে কোনও ভুল ডিরেক্টরিতে যাওয়ার চেষ্টা করার সময় আপনি একটি ত্রুটি দেখতে পাবেন।
আমি মনে করি যে কোনও বিকল্প গ্রহণ না ls
করায় বিকল্পগুলির বিকল্পগুলি সক্ষম করা ভাল cd
।
cdls() {
cd ${$#} && ls ${@:0:$#-1}
}
cd
অপশন নেয়।
এখানে আমি দরকারী (ডিবিয়ান 9 এ) যা পাই তা এখানে:
c() {
cd "${@}" \
&& ls --color=always -C \
| sed '
# on line 5, print the line,
5 {
# append an ellipsis
a[...]
# and quit
q
}
# print lines 1-4 verbatim
'
}
ডিরেক্টরিতে খুব বেশি আইটেম থাকে যাতে কনসোলটি পরিষ্কার থাকে: এটি আমাকে একটি উপবৃত্তের সাহায্যে ছাঁটাই আউটপুট দেয়:
$ c data/git/buildroot/package/
4th lua-markdown
a10disp lua-messagepack
acl lua-msgpack-native
acpica luaossl
acpid lua-periphery
[...]
$ ls -1 | wc --lines
1977
alias cd='builtin cd $1 && ls -l && builtin cd $1'