\curl -L https://get.rvm.io | bash -s stable
Tại sao lệnh bắt đầu bằng \
?
Đây là trang web nơi tôi nhìn thấy nó.
\curl -L https://get.rvm.io | bash -s stable
Tại sao lệnh bắt đầu bằng \
?
Đây là trang web nơi tôi nhìn thấy nó.
Câu trả lời:
alias curl='curl --some --default --options'
Nếu bạn có bí danh curl
và bạn không muốn sử dụng nó, đặt dấu gạch chéo ngược ở phía trước sẽ vô hiệu hóa bí danh và chạy trực tiếp nhị phân curl.
Lưu ý rằng điều này chỉ áp dụng tại một vỏ tương tác. Các bí danh không có hiệu lực trong các kịch bản vì vậy nó sẽ không cần thiết ở đó.
\curl
không bỏ qua bất kỳ hàm shell nào được đặt tên curl
. Vì thế, bạn có thể sử dụng lệnh bash tích hợp command
:command curl ...
\curl ...
làcommand curl ...
dash
(và có thể các shell khác, mặc dù bạn đúng bash
mà không có expand_aliases
) sẽ mở rộng bí danh trong các tập lệnh.
Đặc tả vỏ (Bourne / POSIX) nói rằng sự thay thế bí danh trong một vỏ tương tác bị triệt tiêu khi bất kỳ ký tự nào của từ lệnh được trích dẫn. Dấu gạch chéo ngược là một cách để làm điều đó, nhưng cũng có những cách khác để biết: trích dẫn đơn và kép. Tất cả những điều sau đây sẽ ngăn chặn sự thay thế bí danh:
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
Sử dụng \curl
chỉ là cách phổ biến nhất và dễ đọc. Vì đây là một tính năng được tiêu chuẩn hóa, bạn có thể mong đợi nó hoạt động trong tất cả các vỏ di sản Bourne.
\curl
trông hơi giống lệnh TeX, phải không? :-)
\curl
bỏ qua một bí danh cùng tên; lưu ý rằng chỉ các bí danh được bỏ qua theo cách này, không phải các hàm shell ; command curl ...
sẽ đảm bảo bỏ qua một trong hai .
command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"
bản in Not command, lol!
x 3.
command
tự thay thế bằng chức năng shell, bạn đang đánh bại cơ chế. Những gì ví dụ của bạn cho thấy là \
không bỏ qua các chức năng , như đã nêu. Một ví dụ không tự đánh bại : date() { echo 'not date'; }; date; command date
. Nếu bạn đang lo lắng về nguy hiểm giả mạo với command
, xem stackoverflow.com/a/35931876/45375
command
để không bị ghi đè. Từ liên kết của riêng bạn: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
trước khi sử dụng bí danh