\curl -L https://get.rvm.io | bash -s stable
ทำไมคำสั่งเริ่มต้นด้วย\
?
นี่คือเว็บไซต์ที่ฉันเห็น
\curl -L https://get.rvm.io | bash -s stable
ทำไมคำสั่งเริ่มต้นด้วย\
?
นี่คือเว็บไซต์ที่ฉันเห็น
คำตอบ:
alias curl='curl --some --default --options'
หากคุณมีนามแฝงอยู่curl
และคุณไม่ต้องการใช้งานการใส่แบ็กสแลชข้างหน้าจะเป็นการปิดใช้งานนามแฝงและรันไบนารี curl โดยตรง
โปรดทราบว่าสิ่งนี้ใช้ได้เฉพาะกับเชลล์แบบโต้ตอบเท่านั้น ชื่อแทนจะไม่มีผลในสคริปต์ดังนั้นจึงไม่จำเป็นต้องมี
\curl
ไม่บายพาสเปลือกใด ๆฟังก์ชั่นcurl
การตั้งชื่อ สำหรับสิ่งนั้นคุณสามารถใช้คำสั่งในตัวของ bash command
:command curl ...
\curl ...
คือcommand curl ...
dash
(และอาจเป็นหอยอื่น ๆ ถึงแม้ว่าคุณจะถูกต้องหากbash
ไม่มีexpand_aliases
) จะขยายนามแฝงในสคริปต์
ข้อมูลจำเพาะเชลล์ (Bourne / POSIX) ระบุว่าการแทนที่สมนามในเชลล์แบบโต้ตอบถูกระงับเมื่ออักขระใด ๆ ของคำสั่งถูกอ้างถึง แบ็กสแลชเป็นวิธีหนึ่งในการทำเช่นนั้น แต่ก็มีวิธีอื่น ๆ ที่รู้จักกันดีในการอ้างถึง: ราคาเดียวและสองครั้ง ทั้งหมดต่อไปนี้จะระงับการทดแทนนามแฝง:
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
การใช้\curl
เป็นวิธีที่พบได้บ่อยและอ่านง่ายที่สุด เนื่องจากนี่เป็นคุณสมบัติมาตรฐานคุณจึงสามารถคาดหวังได้ว่ามันจะทำงานได้ในทุกเชลล์ของ Bourne-Heritage
\curl
ดูเหมือนคำสั่ง TeX เล็กน้อยใช่ไหม? :-)
\curl
ข้ามนามแฝงที่มีชื่อเดียวกัน ทราบว่ามีเพียงนามแฝงจะข้ามวิธีนี้ไม่ได้เปลือกฟังก์ชั่น ; command curl ...
จะช่วยให้มั่นใจได้ว่าจะผ่านได้เช่นกัน
command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"
พิมพ์Not command, lol!
x 3
command
ตัวเองด้วยฟังก์ชั่นเปลือกคุณจะเอาชนะกลไก สิ่งที่แสดงให้เห็นตัวอย่างของคุณคือการที่\
ไม่บายพาสฟังก์ชั่นตามที่ระบุไว้ ตัวอย่างการไม่เอาชนะตนเอง: date() { echo 'not date'; }; date; command date
. หากคุณกำลังกังวลเกี่ยวกับอันตรายยุ่งเกี่ยวกับcommand
ดูstackoverflow.com/a/35931876/45375
command
ที่จะไม่ถูกแทนที่ จากลิงค์ของคุณเอง:Thus, with no control over the execution environment, you cannot write shell scripts that are fully immune to tampering, unless you know that your code will be executed by dash, ksh, or bash (with the workaround in place)
shopt -s expand_aliases
ก่อนใช้นามแฝง