Tôi muốn một Bash-liner mà nguyên tử tạo ra một tệp nếu nó không tồn tại. Điều đó có nghĩa cơ bản là "nếu tệp không tồn tại, hãy tạo nó" nhưng đảm bảo rằng không ai khác quản lý để tạo tệp trong không gian nhỏ giữa thực hiện if và tạo tệp.
Tôi muốn một Bash-liner mà nguyên tử tạo ra một tệp nếu nó không tồn tại. Điều đó có nghĩa cơ bản là "nếu tệp không tồn tại, hãy tạo nó" nhưng đảm bảo rằng không ai khác quản lý để tạo tệp trong không gian nhỏ giữa thực hiện if và tạo tệp.
Câu trả lời:
Ăn cắp một câu trả lời từ nhiều bình luận và liên kết đến [SO]. Có vẻ như có một phương pháp tuân thủ POSIX không liên quan mkdir
như tôi đã đề cập trong câu trả lời ban đầu của mình bên dưới
set -o noclobber # or set -C
{ > file ; } &> /dev/null
Chuyển hướng này đến tệp trả về 0 hoặc không thành công và trả về khác không nếu tệp đã tồn tại.
Câu trả lời gốc
Bạn sẽ phải sử dụng mkdir
- đó là nguyên tử, hoặc thư mục được tạo và bạn có thể tiếp tục hoặc nó không được tạo để bạn có hành động thích hợp.
Tất nhiên, mkdir
không tạo tệp nhưng một khi bạn biết bạn có quyền truy cập độc quyền vào thư mục thì bạn có thể tạo tệp bạn muốn trong đó.
Như một lớp lót - tôi sẽ để nó cho bạn. Cá nhân tôi sẽ viết nó qua một vài dòng, vì điều đó sẽ dễ duy trì hơn.
Là tập tin hoặc thư mục? Nếu tệp, bạn có thể sử dụng lệnh chạm đơn giản - nếu tệp tồn tại, nó chỉ sửa đổi thời gian truy cập cuối cùng. Nếu tập tin không tồn tại, được tạo ra.
Nếu bạn không quan tâm đến tên tệp, bạn có thể ủy thác tác vụ này cho một tiện ích, ví dụ như mktemp
Create a temporary file or directory, safely, and print its name.
TEMPLATE must contain at least 3 consecutive `X's in last component.
If TEMPLATE is not spec‐ified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories u+rwx, minus umask
restrictions.
Cầu nguyện:
filename=$(mktemp)