chmod + chế độ im lặng + cách thoát mã 0 mặc dù có lỗi


37

Có thể thực thi chmod và bỏ qua lỗi từ lệnh

Ví dụ (chú thích file.txt không tồn tại để hiển thị ví dụ)

Khi tôi gõ

chmod 777 file.txt

Tôi gặp lỗi về đầu ra

  chmod: cannot access file.txt : no such file or directory

Vì vậy, tôi thêm cờ-f vào lệnh như sau: (file.txt không tồn tại để hiển thị trường hợp)

  chmod -f 777 file.txt
  echo $?
  1

Nhưng từ ví dụ chmod return 1

Xin tư vấn cách buộc lệnh chmod cung cấp mã thoát 0 mặc dù có lỗi


Tại sao điều đó được nâng cao? Bỏ qua mọi đầu ra không mong muốn với 2>/dev/nullvà sử dụng set -etrong các tập lệnh.
ott--

Câu trả lời:


47

Xin tư vấn cách buộc lệnh chmod cung cấp mã thoát 0 mặc dù có lỗi

chmod -f 777 file.txt || :

Điều này sẽ thực thi :, tức là lệnh null, nếu chmodthất bại. Vì lệnh null không làm gì nhưng luôn thành công, bạn sẽ thấy mã thoát là 0.


25
Tương đương, nhưng dễ đọc hơn đối với người dùng thông thường là sử dụngchmod -f 777 file.txt || true
orion

2
@orion Phụ thuộc. Nếu một người quen thuộc, thì :dường như có thể đọc được như nhau.
devnull

2
Nhưng nếu chúng ta viết mã dễ đọc hơn mà các noobs có thể đọc, chúng ta sẽ giữ công việc của mình như thế nào?
Nick T

1
nhà phát triển đầu bếp ở đây, chỉ cần bỏ một số từ khóa để giúp đỡ những người khác đã gặp phải vấn đề tương tự tôi có. shellDef! (cmd + '| | true') là cứu cánh khi bạn đang cố gắng bình tĩnh với các cài đặt và cần bỏ qua shell thừng! biên dịch lỗi.
JackChance

53

chmod -f 777 file.txt || true

Vì đó là OR, nếu một trong các câu trả lời là true, thì kết quả trả về là true. Điều này dẫn đến trạng thái thoát bằng không.


3
Tôi đã thêm câu trả lời này như một cách thay thế để thúc đẩy việc thực hành viết mã có thể đọc được.
Gerry

2
Nhánh bên phải ||sẽ không được thực thi nếu chmodthành công ... không phải là nó tạo ra nhiều sự khác biệt về tính toán ở đây.
dhag

Cảm ơn vì điều đó. Tôi không thể tin rằng tôi đã làm hỏng điều đó. :) Chỉnh sửa với sự điều chỉnh.
Gerry

5

Tôi luôn luôn yêu

 chmod -f 777 file.txt || exit 0

3
Điều này làm cho kịch bản dừng lại khi chmod không thành công. Câu hỏi là làm cho tập lệnh tiếp tục chạy khi có vấn đề với nó (bỏ qua lỗi).
Veda
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.