ฉันมักจะเรียกใช้ls
คำสั่งหลังจากใช้cd
คำสั่ง ฉันจะสร้างนามแฝง (เช่นcs
) สำหรับการดำเนินการนี้ได้อย่างไร
ฉันมักจะเรียกใช้ls
คำสั่งหลังจากใช้cd
คำสั่ง ฉันจะสร้างนามแฝง (เช่นcs
) สำหรับการดำเนินการนี้ได้อย่างไร
คำตอบ:
จากBash Tips and Tricks: 'cd' with style :
ในที่สุดฉันต้องการแสดงวิธีเขียนแทนแบบกำหนดเองของคุณสำหรับคำสั่ง 'cd'
คุณพบว่าตัวเองพิมพ์สิ่งเดียวกันเสมอเมื่อเปลี่ยนเป็นไดเรกทอรีหรือไม่? อย่างน้อยคุณอาจแสดงรายการไฟล์ที่นั่นทุกครั้งบางทีมือของคุณจะพิมพ์ 'ls' โดยอัตโนมัติหลังจาก 'cd' ทุกครั้ง
ด้วยการพยายามทุกวิถีทางที่ฉันสามารถนึกได้มันเป็นวิธีเดียวที่จะบรรลุเป้าหมายที่เรากำลังมองหา เราต้องสร้างฟังก์ชั่นเชลล์
ฟังก์ชั่นเชลล์เป็นส่วนหนึ่งของการเขียนโปรแกรมเชลล์ เช่นเดียวกับในการเขียนโปรแกรมภาษารวบรวมฟังก์ชั่นให้เรียงลำดับของ modularizability ขั้นตอน หนึ่งสามารถสร้างฟังก์ชั่นทั่วไปเพื่อดำเนินการตรรกะหรือการคำนวณที่ใช้บ่อยกับพารามิเตอร์ที่แตกต่างกัน ในกรณีนี้พารามิเตอร์เป็นไดเรกทอรีการทำงานปัจจุบัน
นี่คือตัวอย่างง่ายๆ:
function cs () { cd $1 ls }
ในฐานะที่เป็น@geirha corretly บันทึกฟังก์ชั่นดังกล่าวจะล้มเหลวถ้าคุณพยายามที่จะสลับไปยังไดเรกทอรีที่มีช่องว่างในชื่อ:
$ 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
คำสั่งใน bash:
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; }
ขอบคุณFlorian Dieschสำหรับเคล็ดลับการใช้ฟังก์ชั่น ฉันไม่สามารถใช้cs
เป็นชื่อที่เพราะมีcs
คำสั่งในcsoundlc
แพคเกจดังนั้นผมจึงใช้
ฉันเพิ่มลงใน~/.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