เรียกใช้คำสั่งที่มีเงาโดยนามแฝง


163

สมมติว่าฉันมีนามแฝงต่อไปนี้ในทุบตี - alias ls='ls --color=auto'- และฉันต้องการโทรธรรมดาlsโดยไม่มีตัวเลือก เป็นวิธีเดียวที่จะทำเช่นนั้นคือ unalias ทำคำสั่งแล้วนามแฝงอีกครั้ง? หรือมีเคล็ดลับหรือวิธีแก้ปัญหาที่ดี?


2
เพียงแค่ทราบเกี่ยวกับคำตอบบางส่วนด้านล่าง: "command" เป็นวิธีที่ปลอดภัยเพียงอย่างเดียวในการทำสิ่งนี้ให้สำเร็จ ตัวอย่างเช่น "." หรือในตัว "แหล่งที่มา" อาจถูกแทนที่โดยฟังก์ชันที่กำหนดโดยสคริปต์ "คำสั่ง" หรือ "คำสั่งแหล่งที่มา" เป็นวิธีเดียวที่จะเรียกใช้แหล่งที่มาอย่างปลอดภัยโดยไม่ต้องใช้ฟังก์ชันที่กำหนดโดยสคริปต์แทน ไม่มีตัวเลือกอื่นใดรวมถึงวิธีการแบ็กสแลช "\." การทำงานและแน่นอนว่าไม่มีตัวเลือก "/ bin / แหล่งที่มา" ที่คุณสามารถเรียกใช้ได้โดยการระบุเส้นทางแบบเต็ม
Dejay Clayton

คำตอบ:


209

นอกจากนี้คุณยังสามารถใส่เครื่องหมายทับกลับเพื่อปิดใช้งานนามแฝง: \ls

แก้ไข: วิธีอื่นในการทำเช่นเดียวกันรวมถึง:

ใช้ "คำสั่ง": command lsเป็นต่อมิเกล

ใช้เส้นทางแบบเต็ม: /bin/lsตามแต่ที่สุด

อ้างอิงคำสั่ง: "ls"หรือ'ls'ตามความคิดเห็นของ Mikel

unalias command_nameคุณสามารถลบนามแฝงชั่วคราวสำหรับเซสชันขั้วกับ


นี่เป็นวิธีมาตรฐานในการทำสิ่งนี้
ncmathsadist

ดีมากใช้งานได้ดีกับ tcsh ด้วย
Levon

10
วิธีนี้มีประโยชน์มาก มันทะลุนามแฝงไม่ได้ฟังก์ชั่นซึ่งจะทำให้มันแตกต่างจากหรือcommand builtin
มิเคล

1
ดูเหมือนว่าl\sจะทำในสิ่งเดียวกัน พฤติกรรมนี้เป็นข้อบกพร่องหรือคุณสมบัติหรือไม่?
Niklas B.

4
มันเป็น "คุณสมบัติ" เฉพาะนามแฝงที่ไม่ได้กล่าวถึงเท่านั้นที่จะถูกขยาย ดังนั้นคุณสามารถใส่ไว้ในเครื่องหมายคำพูดหรือใช้แบ็กสแลชได้ทุกที่ที่คุณต้องการ ดูนามแฝงทุบตีอ้างอิง
มิเคล

79

นั่นคือสิ่งที่commandคำสั่งมีไว้สำหรับ

ลอง

command ls

สิ่งนี้บอกเชลล์ให้เลี่ยงการใช้นามแฝงและฟังก์ชั่น

วิธีนี้รองรับโดยbash , zshและash / dash


2
คำตอบที่ดีที่สุดทำไมมันไม่ upvoted ที่สุดแม้ว่า :) +1
0xC0000022L

11
เพราะมันเพิ่มจำนวนตัวอักษรเป็นวิธีแบ็กสแลช 8 เท่า
JoelFan

1
@STATUS_ACCESS_DENIED สิ่งนี้ยังใช้ไม่ได้กับ tcsh (ดังนั้นจึงไม่ใช่ csh เช่นกัน) วิธีการ `` `ทำ
Levon

3
คุณลักษณะแบ็กสแลชไม่ปลอดภัย แม้ว่าจะมีการป้องกันนามแฝงที่มีชื่อคล้ายกัน แต่ก็ไม่ได้ให้ความคุ้มครองกับฟังก์ชันที่มีชื่อคล้ายกัน
Dejay Clayton

2
@JoelFan ฉันอยากมีตัวละครเพิ่มขึ้นเล็กน้อยและสคริปต์ของฉันนั้นง่ายต่อการติดตามและทำงานให้กับทุกคน แทนที่จะเป็นเครื่องหมายลับซึ่งไม่ง่ายใช้งานง่ายพลาดไม่ได้บันทึกไว้อย่างดีและไม่สามารถใช้งานข้ามฟังก์ชันได้
เดนนิส

19

นามแฝงเป็นเพียงทางลัดที่กำหนดไว้ ในตัวอย่างนี้นามแฝงที่กำหนดไว้เป็นสตริงซึ่งดำเนินการls ls --color=autoหากคุณไม่ต้องการพฤติกรรมนั้นคุณสามารถเรียกเลขฐานสองlsโดยใช้พา ธ สัมบูรณ์

ดังนั้นการดำเนินการ/bin/lsจะสร้างเอาต์พุตโดยไม่มีสีเนื่องจากไม่ใช่นามแฝงที่คุณกำหนด

คุณสามารถเปลี่ยนนามแฝงเป็นอะไรที่แตกต่างกันหรือเพิ่มนามแฝงใหม่ที่ดำเนินการlsโดยไม่มีพารามิเตอร์สี


2
คุณต้องรู้ว่าคำสั่งนั้นอยู่ที่ไหน ในบางระบบการแบ่งระหว่าง/binและ/usr/binโดยพลการ
Keith Thompson

@KeithThompson เพื่อที่คุณจะสามารถใช้คำสั่งบางอย่างwhich which ls
cst1992

@ cst1992: ถ้าคุณจะใช้which(หรือtype) มันจะทำการค้นหาผ่าน$PATH; คุณอาจใช้lsหรือ\lsแทนที่จะระบุเส้นทางก็ได้เช่นกัน
Keith Thompson

10

อีกวิธีหนึ่งการสร้างตามคำตอบของ @ uther คือการใช้$(which ...)หรือ`which ...`(ใช้ backticks ``) เพื่อค้นหาเส้นทางของไฟล์ที่เรียกใช้โดยอัตโนมัติ สิ่งนี้จะทำงานในbash:

$(which ls)

`which ls`

ไม่ต้องสงสัยเพียงแค่นำหน้าคำสั่งด้วย a \จะสั้นกว่ามาก

อัปเดต : ตามวิธีการใช้ `ซึ่ง` กับคำสั่ง aliased? ดูเหมือนจะไม่น่าเชื่อถือเลย


วงเล็บคืออะไร ฉันเดาว่าคุณหมายถึง`which ls`รันไบนารีโดยตรง
amyassin

2
@amyassin: ไวยากรณ์ทั้งสองมีค่าเท่ากัน (BTW คุณได้ backticks ในการจัดรูปแบบรหัสได้อย่างไร)
krlmlr

ที่จริงแล้วใช้(which ls)ไม่ได้ผลกับฉัน (บน Ubuntu 12.04 LTS) และ backticks นั้นยากฉันก็หนีพวกเขาไปได้: \ 'ซึ่ง ls \' ต้องใช้การแก้ไขมากมายเพื่อไปที่นั่น :)
amyassin

1
@ user946850 "ในการรวมอักขระ backtick ตามตัวอักษรในช่วงรหัสคุณสามารถใช้ backticks หลาย ๆ ตัวเป็นตัวคั่นการเปิดและปิด" ที่มา: Markdown อ้างอิง
มิเคล

@amyassin: คุณเพิ่ม$หรือไม่
krlmlr

2

โดยส่วนตัวแล้วฉันแค่หลีกเลี่ยงการกำหนดนามแฝงด้วยชื่อเดียวกันกับคำสั่งดังนั้นlsจะเรียกใช้คำสั่งจริงเสมอ ฉันมีนามแฝงหรือฟังก์ชั่นสำหรับชุดต่างๆของตัวเลือกเช่นl, และll lg(ซึ่งหมายความว่าฉันต้องการunalias lsใน.bashrcหรือของฉัน.cshrc)

ฉันพบว่าสมมติฐานของระบบปฏิบัติการเกี่ยวกับตัวเลือกที่ฉันอาจชอบ (การแทนที่ข้อสมมติของผู้ออกแบบlsคำสั่งเอง) ไม่ค่อยตรงกับรสนิยมส่วนตัวของฉัน ฉันไม่ชอบหน้าตาของls --color=autoมันและความชัดเจนของมันสามารถแตกต่างกันอย่างมากระหว่างสีดำกับสีขาวและสีขาวบนสีดำ

แน่นอนว่า YMMV และวิธีแก้ปัญหาอื่น ๆ ยังดีอยู่


1

การพิมพ์คำสั่งเป็นตัวพิมพ์ใหญ่ดูเหมือนว่าจะทำงานLSได้ แต่ฉันไม่แน่ใจว่าทำไม


4
เชลล์ตัวไหนระบบปฏิบัติการตัวไหนเทอร์มินอลอะไร?
มิเคล

@Mikel มีแพ็คเกจ "sl" ที่ให้ "sl" เป็น "ls" เคล็ดลับทุบตีให้ใน Ubuntu ยังบอกว่า "LS" มีให้โดย "sl"
Izkata

1
นี่คือทุบตี 4 (ติดตั้งด้วย Fink) ใน Mac OS X 10.7 นอกจากนี้ยังใช้งานได้กับคำสั่งอื่น ๆ ที่ฉันใช้แทนเช่น rm และ grep
asmeurer

3
มันเป็นแค่เรื่องตลก :) จากหน้า mn:LS - display animations aimed to correct users who accidentally enter LS instead of ls.
amyassin

7
ฉันคิดว่ามันใช้งานได้กับ Mac OS X เพราะระบบไฟล์ของมันไม่ตรงตามตัวพิมพ์ใหญ่ - ใหญ่ มันจะไม่ทำงานกับยูนิกซ์อื่น ๆ
Jander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.