ฉันสามารถใช้ cd ../ .. เป็นชื่อแทนได้หรือไม่


11

ฉันใช้ Windows และ Ubuntu ในแบบคู่ขนานและทำสิ่งต่าง ๆ บนทั้งสองอย่าง

ใน Windows ฉันสามารถทำ

C:\Users\Thomas>cd..\..
C:\>

อย่างไรก็ตามบน Linux สิ่งนี้ไม่สามารถใช้งานได้ทั้งกับแบ็กสแลชหรือฟอร์เวิร์ดสแลช

21:17:10 $ cd../..
bash: cd../..: No such file or directory

เนื่องจากฉันทำผิดพลาดบ่อยครั้งฉันจึงพยายามกำหนดนามแฝงใน.bash_aliasesสถานการณ์นั้น:

alias cd../..='cd ../..'
alias cd..\..='cd ../..'

เมื่อฉันเริ่มทุบตีใหม่ฉันจะได้รับ

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name

ฉันจะตั้งค่านามแฝงสำหรับcd..\..และcd../..ถูกต้องหรือไม่

cd..\..ดูเหมือนว่าจะมีปัญหากับตัวหนี:

21:39:43 $ cd..\..
bash: cd....: command not found

cd....มันไม่ทำงานแม้ว่าฉันกำหนดนามแฝงอีก


2
คุณทำไม่ได้ คำสั่งนามแฝงหรือชื่อไฟล์ต้องไม่มี/อักขระ ในทางกลับกัน\ เวอร์ชันควรทำงานได้ดี
fkraiem

@fkraiem: ดูเหมือนว่าเวอร์ชันแบ็กสแลชมีปัญหาในฐานะตัวละครที่หลบหนี อัปเดตคำถาม
โทมัสเวลเลอร์

โอ้แน่นอน จากman bash: อักขระ /, $, `, และ = และอักขระเมตาอักขระหรือการอ้างอิงอักขระของรายการด้านบนอาจไม่ปรากฏในชื่อนามแฝง
fkraiem

ประณาม. ฉันพยายามman aliasแล้วและมันก็ไม่มีอยู่จริง หากคุณตอบว่าเป็นคำตอบฉันจะยอมรับมัน
โทมัสเวลเลอร์

นามแฝงเป็นอีกสิ่งหนึ่งฟังก์ชั่นของเปลือกก็เป็นอีกสิ่งหนึ่ง มีลักษณะอื่น
alexis

คำตอบ:


10

/และ\เป็นหนึ่งในตัวละครที่ไม่สามารถปรากฏในชื่อ Bash alias จากman bash:

อักขระ/,, $`, และตัวอักษร=ใด ๆ ของเชลล์ metacharacters หรืออ้างข้อความข้างต้นอาจไม่ปรากฏในชื่อนามแฝง

คุณสามารถเปลี่ยนไปใช้ Zsh ซึ่งอนุญาตทั้งสองวิธีดังนี้:

% grep 'alias.*cd' .zshrc 
alias cd../..='cd ../..'
alias cd..\\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/ 
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/

12

คุณไม่สามารถใช้เครื่องหมายทับในชื่อแทน อย่างไรก็ตาม Bash อนุญาตให้ใช้ชื่อฟังก์ชันได้ดังนั้นคุณสามารถสร้างฟังก์ชันได้:

cd../.. () { cd ../..; }

คุณไม่สามารถใช้แบ็กสแลชในชื่อแทนหรือชื่อฟังก์ชัน อักขระแบ็กสแลชอ้างอิงอักขระถัดไปดังนั้นcd..\..จะถูกแยกวิเคราะห์cd....ก่อนที่สตริงนั้นจะถูกค้นหาเป็นชื่อคำสั่ง หากคุณต้องการที่จะเรียกคำสั่งที่มีชื่อcd..\..คุณต้องพิมพ์cd..\\.., 'cd..\..'หรือสิ่งที่เทียบเท่า นอกจากนี้ชื่อคำสั่งที่อ้างถึงไม่ว่าด้วยวิธีใดก็ตามจะไม่ได้รับการพิจารณาสำหรับการค้นหานามแฝงดังนั้นคุณจึงไม่สามารถใช้ชื่อนามแฝงที่มีแบ็กสแลชได้ Bash ไม่อนุญาตแบ็กสแลชในชื่อฟังก์ชันเช่นกัน เนื่องจากcd..\..มีการแยกวิเคราะห์เป็นcd....คุณสามารถกำหนดฟังก์ชั่นที่เรียกว่าcd....(ดังกล่าวข้างต้น)

หากคุณใช้cdคำสั่งคุณจะต้องพิมพ์ช่องว่างหลังคำสั่งเช่นเดียวกับคำสั่งอื่น ๆ แต่คุณสามารถบันทึกการพิมพ์โดยไม่พิมพ์cdเลย ตั้งค่าautocdตัวเลือกด้วยบรรทัดต่อไปนี้ใน~/.bashrc:

shopt -s autocd

จากนั้นคุณสามารถพิมพ์ชื่อไดเรกทอรีบนบรรทัดคำสั่งและ“ ดำเนินการ” ไดเรกทอรีนั้นจะเปลี่ยนไป

~/some/sub/directory$ ../..
~/some$ 

ถ้าฉันทำshoptสิ่งนี้ฉันอาจจะพลาดฟังก์ชั่นนั้นใน Windows เร็ว ๆ นี้ :-)
Thomas Weller

อืมนั่นไม่ใช่ความจริง เครื่องหมายทับได้รับการยอมรับในชื่อฟังก์ชั่นทุบตี
alexis

@alexis Ah ใช่คุณสามารถใช้เครื่องหมายทับใน bash คงที่ขอบคุณ
Gilles 'หยุดชั่วร้าย'

@ThomasW แน่นอนคุณจะ autocdเป็นหนึ่งในเหตุผลที่ฉันเปลี่ยนไปใช้ zsh ย้อนกลับไปเมื่อ bash ไม่มี วิธีเดียวที่ดีในการใช้ Windows คือติดตั้ง Cygwin อยู่แล้วพร้อมด้วย zsh
Gilles 'หยุดชั่วร้าย'

5

"คุณไม่สามารถใช้เครื่องหมายทับในชื่อแทนหรือชื่อฟังก์ชัน " ได้? นั่นคือข่าวสำหรับฉัน ฉันใช้ฟังก์ชันเชลล์ต่อไปนี้เป็นเวลาหลายปีบน Linux และ OS X bash และไม่เคยมีปัญหาใด ๆ :

function ../.. { cd ../..; echo "$PWD"; }

โดยธรรมชาติแล้วcd../..เป็นชื่อฟังก์ชั่นที่ดีเช่นกัน เครื่องหมายทับสามารถใช้ในชื่อฟังก์ชันเชลล์

ในฐานะที่เป็นรุ่นทับขวาคุณจะไม่สามารถฝังไว้ในนามแฝงหรือฟังก์ชั่นชื่อ แต่คุณไม่จำเป็นต้อง: เมื่อคุณพิมพ์ตำทุบตีทับขวาเป็นหนีและพยายามที่จะดำเนินการที่เกิดขึ้นcd..\.. cd....ดังนั้นกำหนดสิ่งนั้นและคุณสามารถทำทุกอย่างที่คุณเป็น ยินดี.

function cd.... { cd ../..; } 

2

หากคุณต้องการเก็บชื่อแทนไว้ทำไมไม่ทำเพียง:

alias   ..='cd ..'
alias  ...='cd ../../' 
alias ....='cd ../../../'

หรือถ้าคุณจะต้องไปทางด้านหลัง:

alias   .3='cd ../../../' 
alias   .4='cd ../../../../'
alias   .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?

ไม่มีความคิดว่าจะช่วยให้คุณซิงค์กับสมอง Windows ของคุณได้ดีเพียงใด แต่นี่ก็ดูเหมือนจะเป็นวิธีที่ง่าย (อย่างน้อยสำหรับพวกเราโชคดีพอที่ไม่ต้องกังวลว่าจะทำสิ่งต่าง ๆ บน Windows ได้อย่างไร)

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