ทุกครั้งที่ฉัน 'cd' ไปยังไดเรกทอรีอื่นบนเครื่องของฉัน (ในกรณีนี้ใช้ Mac OS X 10.6.7) ผ่านทางบรรทัดคำสั่ง (ซึ่งเป็น bash) ฉันพิมพ์ 'ls' ทันทีเพื่อรับรายการเนื้อหา ในไดเรกทอรีนั้น ฉันกำลังพยายามหาวิธีแทนที่ 'cd' เพื่อให้มันเปลี่ยนไปยังไดเรกทอรีที่ร้องขอจากนั้นให้รายการในภาพเดียว
ฉันสามารถรับฟังก์ชั่นพื้นฐานที่ฉันกำลังมองหาทำงานโดยเพิ่มบรรทัดต่อไปนี้ลงใน ~ / .bash_profile ของฉัน
function cl() { cd "$@"; ls -l; }
ทำงานได้ตามที่คาดไว้ เปลี่ยนเป็นไดเร็กทอรีที่ร้องขอจากนั้นแสดงเนื้อหาให้ฉัน ที่ฉันพบปัญหาพยายามแทนที่ "cd" ตัวเองแทนที่จะสร้างคำสั่ง "cl" ใหม่
สิ่งต่อไปนี้ไม่ได้ทำงาน
##### Attempt 1 #####
# Hangs the command line
function cd() { cd "$@"; ls -l; }
##### Attempt 2 #####
# Hangs the command line
function cd() { 'cd' "$@"; ls -l; }
##### Attempt 3 #####
# Does not change directory.
# Does list contents, but of the directory where you started.
function cd() { /usr/bin/cd "$@"; ls -l; }
#### Other attempts that fail in various ways #####
alias cd=cd "$@"; ls -la;
alias cd="cd '$@'; ls -la;"
alias cd='cd "$@"'; ls -la;
alias cd=/usr/bin/cd "$@"; ls -la;
ฉันยังลองทำซ้ำอีกหลายรายการที่ไม่ได้อยู่ในรายการรวมถึงสร้างนามแฝงที่ชี้ไปที่ฟังก์ชั่น 'cl' ไม่ทำงานเลย
สิ่งที่ฉันได้อ่านในเอกสารอธิบายเกี่ยวกับความจริงที่ว่า 'cd' ไม่สามารถเรียกใช้เป็นคำสั่งภายนอกได้ (ซึ่งเป็นสิ่งที่ฉันเข้าใจว่าเป็นวิธีที่ฟังก์ชั่นจะต้องใช้งาน)
ดังนั้นฉันสามารถใช้คำสั่ง "cl" ของฉันและรับสิ่งที่ต้องการได้ แต่คำถามคือ / ยังคงอยู่:
มีวิธีที่จะแทนที่พฤติกรรมของ 'cd' เพื่อให้มันเปลี่ยนไปยังไดเรกทอรีที่ร้องขอแล้วทำอย่างอื่นหลังจากนั้น?