Làm thế nào để thực thi một số lệnh sau khi có một yêu cầu đến thiết bị đầu cuối (mà không sử dụng tệp)?


22

Tôi có thể (1) chuẩn bị một tệp với các lệnh được phân tách bằng dòng cuối, (2) làm cho nó có thể thực thi được, (3) chạy nó từ trình quản lý hệ thống tệp hoặc thiết bị đầu cuối.

Nhưng điều này là vô lý cho các bộ lệnh không lặp lại và mọi lúc.

Tôi có thể gõ các lệnh đó đến thiết bị đầu cuối trong một yêu cầu thay thế không?

Tôi không biết ký tự dòng cuối cho thiết bị đầu cuối - Ctrl, Shift hoặc Alt với Enter không hoạt động.  


1
Trên một dòng lệnh, các lệnh có thể được phân tách bằng dấu chấm phẩy.
John1024

Câu trả lời:


27

Bạn có thể tách các lệnh bằng &&hoặc ;.

  • && chỉ chạy lệnh tiếp theo nếu lệnh trước đó thoát với trạng thái 0 (đã thành công):

    command1 && command2 && command3
    
  • ; chạy mọi lệnh, ngay cả khi lệnh trước thoát ra với trạng thái khác không:

    command1; command2; command3
    

Bạn có thể kết hợp các dải phân cách như bạn muốn.


6
cho command1 && command2lệnh2 sẽ chỉ được thực thi nếu lệnh1 thành công.
souravc

Thảo luận thoải mái, phù hợp / bài viết tương tự: askubuntu.com/questions/334994/... stackoverflow.com/questions/13077241/...
gevang

@souravc: Tôi đã chỉnh sửa, cảm ơn, tôi đã học được điều gì đó.
MrVaykadji

nếu kết hợp sudo apt upgradesudo systemctl reboot, bạn sẽ cần thêm 'sudo' hai lần, hay nó sẽ 'nhớ' sudo cho lệnh thứ hai?
Koen

9

Nếu bạn muốn nhập từng lệnh trên một dòng riêng trong một yêu cầu duy nhất, bạn có thể sử dụng phương pháp sau:

  • Bắt đầu yêu cầu của bạn (dòng đầu tiên) với if :; then(điều này có nghĩa là: nếu đúng, sau đó làm) và nhấn Enter; nhắc nhở của bạn sẽ thay đổi ngay bây giờ >và không có gì sẽ được thực hiện.

  • Nhập lệnh của bạn, mỗi lệnh theo sau Enter

  • Kết thúc yêu cầu của bạn với fi(kết thúc ifđiều kiện trên ) và nhấn Enter. Bây giờ tất cả các lệnh của bạn sẽ được thực hiện theo thứ tự nhất định.

Thí dụ:

radu@Radu: ~ $ if :; then
> echo 'something'
> echo 'something else'
> echo 'List current directory contents:'
> ls
> echo 'Change current directory with root directory:'
> cd
> #finish
> fi
something
something else
List current directory contents:
Backups            Desktop           forma3d  Public      Untitled txt.txt~
bin                Documente         Music    Templates   Videos
configuration.php  examples.desktop  passwd~  tmp~
Downloads          file~             Poze     Ubuntu One
Change current directory with root directory:
radu@Radu: / $

if true; thencó thể rõ ràng hơn để đọc nếu muốn. :có thể bị nhầm lẫn với ;cái nhìn đầu tiên.
kiri

4

Đầu tiên, đặt một {dòng trên chính nó.
Sau đó, chèn các lệnh của bạn.
Sau đó, đặt một }dòng mới và nhấn Enter. Các lệnh của bạn sẽ được thực thi.

Thí dụ:

{
echo list
echo of
echo commands
echo to run at once
}

sẽ in (tất cả cùng một lúc, không có dấu nhắc ở giữa):

list
of
commands
to run at once

Như một lưu ý phụ, { .. }là cú pháp nhóm lệnh Bash. Nó thường hữu ích khi kết hợp với &&hoặc ||('và', và 'hoặc' tương ứng)


Có phải đó là cùng if :; thenđã được đề cập? Hay là hơi khác nhau?
MrVaykadji

1
@MrVaykadji Đó là kết quả tương tự, nhưng một phương pháp khác. if :chạy thử nghiệm trên lệnh null, nó sẽ luôn trả về true. { .. }chỉ nhóm các lệnh với nhau. Cá nhân tôi thấy { .. }dễ nhớ hơn.
kiri
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.