Lợi thế của việc sử dụng bash -c so với sử dụng chuỗi ở đây là gì?


11

Có lợi ích thực sự nào khi sử dụng bash -c 'some command'hơn sử dụngbash <<< 'some command'

Họ dường như đạt được hiệu quả tương tự.



Xin chào @Patrick cảm ơn bạn đã thông báo. Tôi thực sự không chắc chắn về nơi tốt nhất để đăng. Vì, một mặt đây là một câu hỏi của Linux, nhưng mặt khác bash là một loại ngôn ngữ kịch bản và trang web khác có nhiều khách truy cập hơn. Trong trường hợp như thế này, nơi nào thích hợp hơn để đăng?
yosefrow

4
@yosefrow: Hoặc là trang web sẽ ổn IMHO; nhưng crossposting là đáng ghét (bạn đang yêu cầu mọi người trên cả hai trang web dành thời gian cho câu hỏi của bạn, mà không cho họ lợi ích của câu trả lời của nhau).
ruakh

Nó có thích hợp để xóa bài đăng từ một trong các trang web không?
yosefrow

2
Một sự khác biệt nhỏ nữa là nó bash -c '...'sẽ hoạt động trong các vỏ không có herestrings. Bạn đang giả định rằng bash sẽ được gọi trong shell bash nhưng điều này sẽ không luôn luôn như vậy.
Joel Cornett

Câu trả lời:


21

bash -c 'some command'giữ quyền truy cập vào đầu vào tiêu chuẩn của người gọi, vì vậy readhoặc các lệnh đọc từ đầu vào tiêu chuẩn sẽ hoạt động bình thường. bash <<< 'some command'thay thế đầu vào đó bằng dòng được truyền vào, bash -c catbash <<< catlàm những việc khác nhau.

$ bash -c cat
abc
abc
^D
$ bash <<< cat
$

Mặt khác, bạn có thể sử dụng tính năng đó để cung cấp đầu vào tiêu chuẩn của riêng bạn để sử dụng thông qua $'...', nếu bạn rất cẩn thận:

$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$

Tôi sẽ không muốn dựa vào điều đó, nhưng đôi khi nó có thể thuận tiện.


bash -ccũng cho phép các đối số được truyền vào tập lệnh và $0được đặt:

bash -c 'some command' sh abc def

sẽ thiết lập $1để abc$2để defbên trong some command.


3
Lỗi cú pháp cũng sẽ tạo ra từ ngữ hơi khác nhau. Chủ yếu là bash -cnhững người đề cập -c, AFAIK. Không hoàn toàn vô nghĩa, vì điều đó có thể giúp theo dõi chúng xuống. bash <<< 'script'lỗi trông giống như lỗi trong tập lệnh gốc; bash -c 'script'những người không. Bạn thậm chí có thể gắn nhãn cho họ : bash -c 'script' label.
derobert

Vâng, bash <<< 'echo $1' /dev/stdin foohoạt động quá, và in foo. Mặc dù thiết lập $0có phần hạn chế hơn.
ilkkachu

bash <<< 'echo "$1"' /dev/stdin fookhông phải lúc nào cũng làm việc Tôi đã bash <<< 'echo "$1"' -s foođi làm
G-Man nói 'Phục hồi Monica'
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.