ฉันสามารถสร้าง "นามแฝงไดเรกทอรี" ที่กำหนดเองเช่น '~' ใน bash ได้หรือไม่


12

ในทุบตีฉันสามารถไปยังไดเรกทอรีบ้านของฉันมีcd ~จริงและอ้างถึงไดเรกทอรีบ้านของฉันที่มีคำสั่งใด ๆ ~กับ

ฉันสามารถสร้าง "นามแฝงไดเรกทอรีใหม่" ที่กำหนดเองเพื่ออ้างอิงไปยังไดเรกทอรีอื่นได้หรือไม่ ตัวอย่างสมมุติ:

make_alias "~~" /mnt/photon/work/foo_project/

cp ~/home.png ~~/set_8/home_4.png

จะทำอย่างไรถ้าเป็นเช่นนั้น ถ้ามันไม่สามารถทำได้มันเป็นเพราะการออกแบบและทำไมเป็นเช่นนั้น?

ยินดีที่ได้: ที่ไหนและอย่างไร~มีการตั้งค่าและผูกพันกับ "~" นี้หรือไม่?


1
ไม่เป็นประโยชน์กับคุณโดยเฉพาะ แต่คุณสามารถทำได้ด้วยนามแฝงระดับโลกใน .... ZSH แต่ไม่ใช่ BASH : alias -g ~~ = '/ mnt / photon / work / foo_project /'
SuperMagic

1
@ SuperMagic: ฉันชอบนามแฝงทั่วโลกเช่นกัน แต่ในตัวอย่างที่สอง (cp ~~ / set ... ) พวกเขาจะล้มเหลว ไดเรกทอรีที่มีชื่อมีความเหมาะสมมากขึ้นแล้วn=/mnt/photon/work/foo_project cp foo ~n/bar(หมายเหตุสำหรับ OP: จำกัด เฉพาะ zsh ด้วย)
mpy

1
@OliverSalzburg: ฉันไม่คิดว่านี่เป็นสิ่งที่ซ้ำกัน คำถามอื่นถามเกี่ยวกับการรีเมคอักขระเดี่ยว ( @หรือ_) ซึ่งไม่สามารถทำได้ในการทุบตีในขณะที่~~แน่นอนคือ (แฮ็ก แต่เป็นไปได้) นอกจากนี้ยังไม่ตอบวิธีทำการแมปนี้อีกครั้ง
Dennis

คำถามที่เกี่ยวข้องคือ: superuser.com/questions/541767
n611x007

คำตอบ:


25

ตัวหนอนไม่ใช่นามแฝงมันเป็นส่วนหนึ่งของการขยายตัวของกระสุนทุบตี (เหมือน*.txtหรือ$((1 + 2)))

การขยาย Bash tildeรองรับ tilde-prefixes ต่อไปนี้:

~            The value of $HOME

~/foo        $HOME/foo

~fred/foo    The subdirectory foo of the home directory of the user fred

~+/foo       $PWD/foo

~-/foo       ${OLDPWD-'~-'}/foo

~N           The string that would be displayed by `dirs +N'

~+N          The string that would be displayed by `dirs +N'

~-N          The string that would be displayed by `dirs -N'

dirsใช้ไดเรกทอรีสแต็ค คุณสามารถใช้pushdเพื่อเพิ่มไดเรกทอรีไปยังมัน

เพื่อตอบคำถามเฉพาะของคุณเกี่ยวกับ~~ใช่เป็นไปได้ที่จะแมปไดเรกทอรีกับมัน เพียงแค่สร้างชื่อผู้ใช้~และตั้ง/mnt/photon/work/foo_project/เป็นไดเรกทอรีหลัก:

sudo useradd '~'
sudo sed -i 's#:/home/~:[^:]*$#:/mnt/photon/work/foo_project:/bin/false#' /etc/passwd

แน่นอนว่า "saner" เป็นวิธีการที่กำหนดเชลล์ตัวแปรที่ชี้ไปยังไดเรกทอรีของคุณ~/.bashrcด้วยคำสั่ง

foo=/mnt/photon/work/foo_project

ซึ่งสามารถเข้าถึงได้ผ่าน$fooตามปกติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.