trong Bash, làm thế nào để không bao gồm các đối số phụ trong một bí danh?


10

Tôi đang cố gắng làm một cái gì đó như

alias ftp='echo do not use ftp. Use sftp instead.'

chỉ để ftpkhông vô tình được sử dụng. Nhưng tôi nhận thấy rằng

ftp abcd.com

sẽ khiến lệnh lặp lại

do not use ftp. Use sftp instead. abcd.com

bởi vì abcd.comđược coi là một đối số cho echo.

Có cách nào để làm cho Bash không thêm abcd.comvào sự thay thế, hoặc làm cho echonó không được coi là đối số bổ sung? (Có giải pháp nào cho từng phương pháp không?)

Tôi nghĩ tôi có thể làm được

alias ftp='sftp'

nhưng tôi chỉ muốn làm cho lệnh dừng tất cả lại với nhau để nhắc nhở bản thân không sử dụng ftp.


3
Hầu hết bạn có thể cấm ftptheo nhiều cách khác nhau, nhưng nếu bạn muốn làm như vậy - hãy sử dụng printfthay vì echo:printf "Do not use ftp. Use sftp instead.\n\c"
Costas

Thêm echovào sftpbí danh? tức alias ftp='echo "Do not use ftp"; sftp'. Bạn sẽ nhận được lời nhắc, trong khi cũng bị buộc phải sử dụng sftp.
Josh Jolly

@JoshJolly Tôi muốn thực hiện lệnh dừng tất cả lại với nhau thay vì để nó "lướt qua" chỉ để tôi sẽ liên tục được nhắc nhở về việc không sử dụngftp
phân cực

1
Lưu ý rằng bí danh cực kỳ đơn giản; chúng không có gì khác hơn là thay thế chuỗi đơn giản (với các giới hạn bổ sung mà (1) sự thay thế chỉ xảy ra ở đầu chuỗi lệnh và (2) nó không được đệ quy). Không có cách nào để "cấu hình" cách một bí danh hoạt động ngoài định nghĩa của chính bí danh đó.
Kyle Strand

Er ... xin lỗi, bí danh đệ quy. Không chắc tôi đang nghĩ gì.
Kyle Strand

Câu trả lời:


18

Khi bạn xác định bí danh, lệnh bạn đặt sẽ chạy thay vì lệnh bạn đã viết. Điều này có nghĩa là khi bạn chạy ftp abc.com, những gì thực sự được thực thi là

echo do not use ftp. Use sftp instead abc.com

Một giải pháp đơn giản là sử dụng hàm thay vì bí danh:

ftp(){ echo 'do not use ftp. Use sftp instead'; }

Ngoài ra, bạn có thể sử dụng printftheo đề xuất của Costas:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"

16
alias ftp='echo do not use ftp. Use sftp instead. # '

7
+1. Tuy nhiên, bằng cách nào đó, điều này nhắc nhở tôi về việc tiêm SQL: ') Bí quyết ngọt ngào.
John WH Smith

9

Chỉ cần đặt một khoảng trắng và ký tự nhận xét #ở cuối chuỗi bí danh:

alias ftp='echo do not use ftp. Use sftp instead. #'
ftp abcd.com
do not use ftp. Use sftp instead.

Điều này sẽ khiến các tham số được coi là một nhận xét. Chỉ cần đừng quên thêm một khoảng trắng trước #nếu không nó sẽ không được hiểu là một mã thông báo riêng sau khi mở rộng bí danh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.