Câu trả lời:
Thử:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
hoặc là
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
trong .bashrc của bạn
Giải pháp thứ hai cho phép bạn sử dụng các đối số.
lock()
dấu ngoặc đơn đưa ra thông báo syntax error near unexpected token
lỗi'` ..
$1
, $2
... trong thân hàm.
Các câu trả lời khác trả lời câu hỏi đầy đủ, nhưng ví dụ của bạn có vẻ như lệnh thứ hai phụ thuộc vào câu thứ nhất đang thoát thành công. Bạn có thể muốn thử đánh giá ngắn mạch trong bí danh của mình:
alias lock='gnome-screensaver && gnome-screensaver-command --lock'
Bây giờ lệnh thứ hai thậm chí sẽ không được thử trừ khi lệnh đầu tiên thành công. Một mô tả tốt hơn về đánh giá ngắn mạch được mô tả trong câu hỏi SO này .
git fetch && git pull origin master
và không làm việc cho tôi cho đến khi tôi thay thế &&
với ;
.
Bí danh có nghĩa là cho các tên lệnh bí danh. Bất cứ điều gì ngoài đó nên được thực hiện với các chức năng.
alias ll='ls -l' # The ll command is an alias for ls -l
Bí danh là tên vẫn được liên kết với tên gốc. ll
chỉ là một loại hơi cụ thể ls
.
d() {
if exists colordiff; then
colordiff -ur "$@"
elif exists diff; then
diff -ur "$@"
elif exists comm; then
comm -3 "$1" "$2"
fi | less
}
Hàm là một lệnh mới có logic bên trong. Nó không chỉ đơn giản là đổi tên của một lệnh khác. Nó hoạt động nội bộ.
Về mặt kỹ thuật, các bí danh trong ngôn ngữ shell Bash bị hạn chế về khả năng đến mức chúng cực kỳ phù hợp với bất kỳ thứ gì liên quan đến nhiều hơn một lệnh . Sử dụng chúng để tạo một đột biến nhỏ của một lệnh, không có gì hơn.
Vì ý định là tạo một lệnh mới thực hiện một thao tác mà bên trong sẽ giải quyết trong các lệnh khác, nên câu trả lời đúng duy nhất là sử dụng một hàm ở đây:
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
Việc sử dụng các bí danh trong một kịch bản như thế này gặp rất nhiều vấn đề. Trái với các hàm được thực thi dưới dạng các lệnh, các bí danh được mở rộng thành lệnh hiện tại, điều này sẽ dẫn đến các vấn đề rất bất ngờ khi kết hợp "lệnh" bí danh này với các lệnh khác. Họ cũng không làm việc trong các kịch bản.
gps() { git commit -m 'init '; git push; git status; }
Như đã giải thích, bí danh là vô cùng hạn chế, mong manh và mục đích duy nhất của họ là đổi tên các lệnh. Lạm dụng chúng cho các mục đích không liên quan sẽ đưa bạn vào nước nóng, chẳng hạn như bạn vừa trải nghiệm.
Vì vậy, sử dụng một dấu chấm phẩy:
alias lock='gnome-screensaver; gnome-screen-saver-command --lock'
Điều này không hoạt động tốt nếu bạn muốn cung cấp đối số cho lệnh đầu tiên. Hoặc, tạo một tập lệnh tầm thường trong thư mục $ HOME / bin của bạn.
Thêm chức năng này vào ~/.bashrc
và khởi động lại thiết bị đầu cuối của bạn hoặc chạysource ~/.bashrc
function lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
Bằng cách này, hai lệnh này sẽ chạy bất cứ khi nào bạn nhập lock
vào thiết bị đầu cuối của bạn.
Trong trường hợp cụ thể của bạn, việc tạo một alias
có thể hoạt động, nhưng tôi không khuyên bạn nên làm điều đó. Theo trực giác, chúng tôi sẽ nghĩ rằng giá trị của một bí danh sẽ chạy giống như khi bạn nhập giá trị trong thiết bị đầu cuối. Tuy nhiên, đó không phải là trường hợp:
Các quy tắc liên quan đến định nghĩa và sử dụng bí danh có phần khó hiểu.
và
Đối với hầu hết mọi mục đích, các hàm shell được ưa thích hơn các bí danh.
Vì vậy, không sử dụng bí danh trừ khi bạn phải. https://ss64.com/bash/alias.html
Tôi gặp một vấn đề khi khai báo bí danh ~/.bashrc
. Thiết bị đầu cuối của tôi không nhận ra bí danh mà tôi đã khai báo ~/.bashrc
. Tôi đã học được từ bài viết (đính kèm ở phía dưới) rằng Mac OS X chạy login-shell
theo mặc định do đó nó gọi ~/.bash_profile
thay vì ~/.bashrc
.
Nếu bạn gặp vấn đề tương tự khi khai báo bí danh của mình, bạn có thể tham khảo liên kết sau để giải quyết vấn đề:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
source .bashrc
sau khi lưu các thay đổi vào tệp, để cho phép bí danh được nhận dạng mà không cần đăng xuất.