जवाबों:
आप इसे एक फ़ंक्शन के साथ कर सकते हैं:
$ 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; };
- MacOS (सिएरा 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 द्वारा बुलाया जाता है जब भी वर्तमान निर्देशिका बदलती है (cd, pushd, popd ... के माध्यम से)। tcsh में एक समान विशेषता है और संभवत: जहां zsh इसे मिला है।
अपने .bashrc फ़ाइल में कोई अन्य उपनाम क्यों न जोड़ें?
कुछ इस तरह:
alias cdls='cd "$@" && ls'
सीडी कमांड के लिए उपनाम बनाने का सामान्य समाधान सही नहीं है क्योंकि अन्य कमांड हैं जो आपकी वर्तमान निर्देशिका जैसे पॉप को बदल सकते हैं या यहां तक कि इसमें सीडी कमांड के साथ स्क्रिप्ट चला सकते हैं।
$ PROMPT_COMMAND बैश हुक का उपयोग करना बेहतर है जो एक प्रॉम्प्ट वापस करने से पहले एक कमांड निष्पादित करता है।
कमांड (हमारे मामले में एक फ़ंक्शन) केवल तभी एलएस निष्पादित करेगा जब स्क्रीन शोर को कम करने के लिए निर्देशिका बदल गई हो। कोड .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" }
:।
नीचे दिए गए कोड को .profile में रखें और यह काम करता है। एचपी-यूनिक्स बॉक्स पर परीक्षण किया गया।
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
आउटपुट। इतिहास में वापस जाने के लिए बस इस कमांड को पॉप करें 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'