Câu trả lời:
Chỉ ;
cần tách một lệnh từ một lệnh khác. Các &&
nói chỉ chạy lệnh sau nếu trước đó đã thành công
cd /home; ls -al
Điều này sẽ cd /home
và ngay cả khi cd
lệnh thất bại ( /home
không tồn tại, bạn không có quyền truy cập nó, v.v.), nó sẽ chạy ls -al
.
cd /home && ls -al
Điều này sẽ chỉ chạy ls -al
nếu cd /home
thành công.
a && b
nếu a trả về mã thoát không, thì b được thực thi.
a || b
nếu a trả về mã thoát khác không, thì b được thực thi.
a ; b
a được thực thi và sau đó b được thực thi.
cd /fakedir; ls -al
Chạy ls
trong thư mục hiện tại vì cd /fakedir
sẽ thất bại và shell sẽ bỏ qua trạng thái thoát không bằng không.
cd /fakedir && ls -al
Bởi vì &&
toán tử sẽ chỉ tiếp tục nếu lệnh trước đó thoát bình thường (trạng thái bằng 0), ls
sẽ không có thao tác nào được thực hiện.
Có các toán tử khác, chẳng hạn như &
sẽ tạo nền cho một quá trình. Mặc dù thường được đặt ở cuối lệnh, nó có thể được đặt ở giữa chuỗi.
;
là một thực sự nguy hiểm (ít nhất là với lệnh rm), ví dụcd /some/dir; rm -fr ./*
. Vì vậy, với hoạt động phá hoại như vậy, bạn phải chắc chắn rằng bạn đang ở đúng nơi trước khi thực hiện rm. Lệnh đúng làcd /some/dir && rm -fr ./*