ฉันต้องการ~~ชี้ไปที่ไดเรกทอรีอื่นเพื่อให้ฉันสามารถใช้เป็นทางลัด ~ฉันต้องการให้มีฟังก์ชันเดียวกันตรงตามที่ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการ~~ชี้ไปที่ไดเรกทอรีอื่นเพื่อให้ฉันสามารถใช้เป็นทางลัด ~ฉันต้องการให้มีฟังก์ชันเดียวกันตรงตามที่ ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
จริงๆแล้วมีวิธีมันไม่ใช่วิธีที่ดี แต่เป็นวิธีฮ่าฮ่า!
เพิ่มสิ่งต่อไปนี้ใน/etc/passwdไฟล์ของคุณ:
~:x:1111:99:special Character user:/test:/sbin/nologin
แทนที่1111เป็น UID ด้วยสิ่งที่สมเหตุสมผลแทนที่/testด้วยไดเรกทอรีที่คุณต้องการ ~~ เพื่อเลียนแบบ
99ในระบบของฉันคือnobodyกลุ่มที่ฉันแนะนำถ้าคุณทำเช่นนี้เพื่อให้แน่ใจว่าเป็นกลุ่มที่ไม่มีสิทธิ์ในไฟล์ใด ๆ ที่จะถูกใช้งาน ตามหลักเหตุผล/sbin/nologinในฐานะเชลล์มันไม่ควรใช้มันก็จะไม่มี/etc/shadowรายการดังนั้นมันจะไม่มีรหัสผ่าน ในทางทฤษฎีควรจะดี แต่ให้แน่ใจว่าจะไม่ให้คุณเข้าสู่ระบบเป็นบัญชี
ในฐานะที่เป็นหมายเหตุด้านข้าง: ฉันไม่มีทางที่จะบอกว่านี่เป็นความคิดที่ดี แต่มันจะทำให้การทำงานที่คุณต้องการสำเร็จ
แก้ไข: เพื่อประโยชน์ครบถ้วนนี้ได้รับการแนะนำโดย VarunAgw: คุณสามารถเพิ่มผู้ใช้เป็นปกติuseradd -s /sbin/nologin -N tmpแล้วปรับเปลี่ยน/etc/passwdและ/etc/shadowการเปลี่ยนแปลงการใช้tmpเพื่อ~และเปลี่ยนสถานที่ตั้งของhome directory
useradd 'tmp'แล้วแทนที่tmpด้วย~
shadowรายการ แต่ฉันคิดว่าตราบใดที่ไม่มีการตั้งรหัสผ่านจะไม่เป็นความเสี่ยงเพิ่มเติม
คุณสามารถใช้ประโยชน์จาก CDPATH และใส่ชื่อ~~ ไดเรกทอรีในส่วนประกอบ CDPATH ของคุณ
จากman bash(แต่ CDPATH สามารถใช้ได้แม้ในsh)
พา ธ การค้นหาสำหรับคำสั่ง cd นี่เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งเชลล์ค้นหาไดเร็กทอรีปลายทางที่ระบุโดยคำสั่ง cd ค่าตัวอย่างคือ ".: ~: / usr"
cd ~~ที่จะช่วยให้คุณทำ
ถ้าคุณต้องการทำสิ่งต่าง ๆ เช่นvi ~~/someFileจากที่ใด ๆ ในแผนผังไดเรกทอรีคุณก็จะโชคไม่ดีถ้าคุณยืนยันอย่าง~~แท้จริงยกเว้นว่าคุณแฮ็คเชลล์คุณสามารถใช้ตัวแปรหรือตัวแปรสภาพแวดล้อมเพื่อจัดเก็บไดเรคทอรีเวทของคุณเพื่อให้คุณสามารถทำได้ , เช่น,$tilda/someFile
ฉันมักจะใส่ไฟล์มักจะเข้าถึงได้ภายในไดเรกทอรีที่มีชื่อในไม่ช้าในไดเรกทอรีบ้านของฉันดังนั้นฉันสามารถเข้าถึงพวกเขาด้วยเช่นเส้นทางหรือ~/b~/l
โดยปกติคุณสามารถแทนที่ไดเรกทอรีด้วย symlink เป็นไดเรกทอรีได้มากเท่าที่คุณต้องการ
การ~ขยายตัวหนอนของเชลล์นั้นส่วนใหญ่สามารถตั้งโปรแกรมได้ มันจะขยายไปยังไดเรกทอรีผู้ใช้ของชื่อผู้ใช้ระบบประกาศในบริบทต่อท้ายของมัน(และโซลูชั่นที่ยอดเยี่ยมตามสายเหล่านี้ได้รับการเสนอแล้ว)ค่าของ$HOMEตัวแปรเชลล์หรือไม่เลย
ดังนั้น:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
ฉันเปลี่ยน$HOMEตลอดเวลาและฉันเก็บฟังก์ชั่นในไฟล์สภาพแวดล้อมของเชลล์เพื่อรีเซ็ต:
home(){
HOME=~$USER
cd ~; pwd
}
หากคุณต้องการใช้~เครื่องหมายตัวหนอนด้วยวิธีใดวิธีหนึ่งที่ไม่ได้อ้างถึงไดเรกทอรีบ้านของคุณให้ทำเช่นนั้น $HOMEเพียงแค่มอบหมาย อย่ากลัวมัน $HOMEเป็นเพียงตัวแปรเชลล์เหมือนอย่างอื่น
ข้อเสนอแนะก็ฉันมีเพียงการขยายตัวเล็กน้อย @ คำแนะนำที่ดี PSkocik $CDPATHเกี่ยวกับการใช้ สิ่งหนึ่งที่เขาไม่ได้กล่าวถึงคือคุณสามารถใช้และปรับเปลี่ยน$CDPATHinline ได้โดยไม่ต้องเปลี่ยนค่า shell ปัจจุบันสำหรับ$CDPATHเลย ตัวอย่างเช่น:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cdจำเป็นต้องเป็น shell builtin แต่ไม่ใช่ POSIX shell พิเศษในตัวดังนั้นการประกาศค่าสำหรับ$CDPATHจะไม่ส่งผลกระทบต่อค่า shell ปัจจุบัน หากคุณใช้ตามที่ฉันได้ทำไว้$CDPATHค่าของข้างต้นจะเปลี่ยนเฉพาะสำหรับสภาพแวดล้อมของcdคำสั่งเดียวและจะคืนค่าเป็นค่าก่อนหน้าหลังจากนั้น ฉันมักจะพบว่าเทคนิคดังกล่าวมีประโยชน์มากที่สุดเมื่อใช้ร่วมกับการทำให้ประวัติสมบูรณ์ ฉันจะทำสิ่งข้างต้นเปลี่ยนเป็นไดเรกทอรีเรียกใช้คำสั่งไม่กี่คำจากนั้นกดขึ้นจนกว่าฉันจะกลับมาที่cdคำสั่งของฉันและถอยกลับส่วนเส้นทางหรือสองเพื่อย้ายที่อื่น
ทีนี้ถ้าคุณรวมสองแนวคิดนี้เข้าด้วยกันคุณสามารถทำให้คำสั่งที่ใช้ก่อนหน้านี้มีความหมายแตกต่างกันโดยสิ้นเชิงในครั้งต่อไปที่คุณใช้
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
ทำงานได้อย่างสมบูรณ์เช่นเดียวกับฟังก์ชั่นทุบตี:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
นี่เป็นอีกวิธีหนึ่งที่ใกล้เข้ามาเล็กน้อย (ฉันรู้ว่าฉันไม่ได้ใกล้เคียงกับข้อกำหนด)
function ~~ { echo /test; }
จากนั้นมีตัวละครอีกสองสามตัว:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/barไม่ได้ไปทำงานให้ดีหรือvim ~~/foo.txtฯลฯ ...
CDPATHตัวแปรเพื่อจัดการcdกรณีและปัญหา
~ได้ และ~ไม่ได้ใช้เหมือนคำสั่ง
CDPATHมันคือมันไม่ทำงานสำหรับคำสั่งนอก .... ซีดี IE คุณทำได้cd ~~หรือcd ~~/testdir1ไม่เห็นด้วยvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '