Bộ >
chuyển hướng ghi đầu ra của lệnh ( stdout
chứ không phải stderr
- bạn sử dụng 2>
cho mục đích đó) vào tệp được chỉ định sau nó. Nếu nó đã tồn tại, tập tin sẽ bị ghi đè.
Hành vi này hữu ích cho các lệnh đầu tiên của bạn: nếu có tệp hiện có, nó sẽ bị xóa và được thay thế bằng tệp mới.
Tuy nhiên, vì bạn cần nối thêm tất cả các đầu ra tiếp theo thay vì thay thế các đầu ra trước đó, bạn cần sử dụng phụ lục chuyển hướng >>
. Điều này sẽ tạo một tệp nếu nó chưa tồn tại, nhưng nối thêm đầu ra được chuyển hướng vào tệp, nếu nó đã tồn tại.
Và xin vui lòng không sử dụng đường ống |
để viết nhiều lệnh trong một dòng, điều này sẽ chuyển hướng đầu ra của lệnh thứ nhất ( stdout
) sang đầu vào của lệnh thứ hai ( stdin
).
Bạn có thể sử dụng dấu chấm phẩy ( ;
) để chỉ bash thực thi một lệnh sau lệnh kia, như thể đó là một tệp script. Nếu một lệnh thất bại (mã trả về không phải là 0), các lệnh còn lại vẫn được thực thi.
Hoặc bạn có thể chọn các toán tử logic AND ( &&
) hoặc OR ( ||
):
Nếu bạn sử dụng &&
để kết nối hai lệnh, lệnh thứ hai sẽ chỉ được thực thi, nếu lệnh đầu tiên thành công (mã trả về là 0). Nếu thất bại, không có lệnh nào sau đây sẽ chạy.
Các ||
tuy nhiên chỉ chạy lệnh thứ hai nếu là người đầu tiên đã thất bại (mã trở lại không phải là 0)!
Vì vậy, trong trường hợp của bạn, tôi khuyên bạn nên sử dụng dấu chấm phẩy:
md5sum firefox.tar.gz > sha.txt ; sha1sum firefox.tar.gz >> sha.txt ; sha512sum firefox.tar.gz >> sha.txt
{}
hay()
? Cảm ơn bạn.