Làm thế nào tôi có thể thay đổi ô chỉ cho một lệnh?


13

Làm cách nào tôi có thể tương tác thực thi một lệnh trong Linux (zsh, nếu có vấn đề) với một ô khác với mặc định, chỉ cho một lệnh? Có lẽ một sự kết hợp của các lệnh kết hợp trong một dòng duy nhất? Ô mới chỉ nên áp dụng cho lệnh đó và trở về giá trị mặc định của nó cho lệnh tiếp theo được nhập.

Lý tưởng nhất là lệnh sẽ không biết đến ô mặc định có hiệu lực trước khi được nhập (nói cách khác, ô mặc định không phải chỉ định).

Câu trả lời:


17

Bắt đầu một subshell :

(umask 22 && cmd)

Sau đó, cái mới umasksẽ chỉ thay đổi cái vỏ con đó.

Lưu ý rằng zshthực thi lệnh cuối cùng của lớp con trong quy trình của lớp con thay vì sử dụng lệnh khác, điều đó có nghĩa là nếu lệnh đó ở bên ngoài, bạn thậm chí không lãng phí một quy trình, chỉ là việc rẽ nhánh được thực hiện sớm hơn (vậy umasklà xong trong tiến trình con mà sau này sẽ thực thi lệnh của bạn).


2

Bạn có thể gói nó trong một kịch bản shell. umask kế thừa cho tất cả các quá trình con.

cmd.sh:

umask 0022
cmd

Hoặc, nếu bạn muốn thực hiện nó trong một dòng lệnh, bạn có thể gọi một shell như thế này, "$ (umask 0022; cmd)"
Rob Bos

1
Tôi bối rối $ (với $(nhận xét của bạn, bây giờ tôi hiểu : ( umask 0022; cmd ).
donothings thành công

Rất tiếc, ít nhất, có ai đó đã làm rõ điều đó ^^
Rob Bos
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.