Làm cách nào để dán mã bash nhiều dòng vào thiết bị đầu cuối và chạy tất cả cùng một lúc?


104

Tôi cần dán mã bash nhiều dòng vào thiết bị đầu cuối, nhưng bất cứ khi nào tôi làm vậy, mỗi dòng sẽ được chạy dưới dạng một lệnh riêng biệt ngay sau khi nó được dán.

Câu trả lời:


107

Hãy thử đặt \ở cuối mỗi dòng trước khi sao chép nó.


19
Lưu ý: dấu cách ở cuối sẽ phá vỡ nó!
Max Reeder

55

Tôi thực sự ngạc nhiên khi câu trả lời này không được đưa ra ở đây, tôi đang tìm kiếm giải pháp cho câu hỏi này và tôi nghĩ đây là cách tiếp cận dễ dàng nhất và linh hoạt hơn / dễ tha thứ hơn ...

Nếu bạn muốn dán nhiều dòng từ một trang web / trình soạn thảo văn bản / v.v., vào bash, bất kể đó là lệnh trên mỗi dòng hay hàm hoặc toàn bộ tập lệnh ... chỉ cần bắt đầu bằng dấu (và kết thúc bằng dấu )và Enter, như trong ví dụ sau:

Nếu tôi có đốm màu sau

function hello {
    echo Hello!
}
hello

Bạn có thể dán và xác minh trong một thiết bị đầu cuối bằng cách sử dụng bash bằng cách:

  1. Bắt đầu với (

  2. Dán văn bản của bạn và nhấn Enter (để làm cho nó đẹp hơn) ... hoặc không

  3. Kết thúc bằng a )và nhấn Enter

Thí dụ:

imac:~ home$ ( function hello {
>     echo Hello!
> }
> hello
> )
Hello!
imac:~ home$ 

Văn bản đã dán sẽ tự động được tiếp tục với phần viết trước >cho mỗi dòng. Tôi đã thử nghiệm với nhiều dòng với các lệnh trên mỗi dòng, các chức năng và toàn bộ tập lệnh. Hy vọng điều này sẽ giúp những người khác tiết kiệm thời gian!


4
Phương pháp dễ nhất IMO
Hobroker

1
@Toolkit cho những điều đơn giản, nó sẽ làm việc như bạn mô tả, nhưng giải pháp tôi đã cung cấp sẽ làm việc cho các tình huống phức tạp hơn (ngắt dòng, nhiều chức năng, toàn bộ kịch bản, vv)
TryTryAgain

1
Điều này chạy các lệnh được dán trong một vỏ con, vì vậy nó thường không thực sự làm những gì bạn muốn. Bạn có thể sử dụng dấu ngoặc nhọn thay vì dấu ngoặc đơn để buộc nó chạy trong shell hiện tại; nhưng thực sự, chỉ cần không làm một trong hai. Vỏ có thể đối phó.
tripleee

33

Nếu bạn nhấn C-x C-elệnh sẽ mở trình chỉnh sửa mặc định được xác định .bashrc, sau đó bạn có thể sử dụng tất cả các tính năng mạnh mẽ của trình chỉnh sửa của mình. Khi bạn lưu và thoát, các dòng sẽ chờ bạn nhập.

Nếu bạn muốn xác định trình soạn thảo của mình, chỉ cần viết cho Ex. EDITOR=emacs -nwhoặc EDITOR=vibên trong của~/.bashrc


2
Kỹ thuật này rất hữu ích, nhưng lưu ý rằng trình soạn thảo phải chạy đồng bộ (như emacsvilàm), và khi lưu và thoát các lệnh được thực thi ngay lập tức .
mklement0

16

Ngoài dấu gạch chéo ngược, nếu một dòng kết thúc bằng |hoặc &&hoặc ||, nó sẽ được tiếp tục ở dòng tiếp theo.


13

Thêm dấu ngoặc đơn quanh các dòng. Thí dụ:

$ (
sudo apt-get update
dokku apps
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
)

2
Đỗ lưu ý, như ngoặc (, niềng răng {sẽ cũng làm việc cùng trong ví dụ trên
GypsyCosmonaut

2
Điều này dường như trùng lặp với một câu trả lời trước đó trên trang này
tripleee


4

Để ngăn một dòng lệnh dài trong tệp văn bản, tôi giữ các đoạn mã copy-pase của mình như sau:

echo a;\
echo b;\
echo c


0

iTerm xử lý lệnh nhiều dòng một cách hoàn hảo, nó lưu lệnh nhiều dòng dưới dạng một lệnh, sau đó chúng ta có thể sử dụng Cmd+ Shift+ ;để điều hướng lịch sử.

Xem thêm các mẹo iTerm tại Làm việc hiệu quả với iTerm


-1

Thử

out=$(cat)

Sau đó, dán các dòng của bạn và nhấn Ctrl-D (chèn ký tự EOF). Tất cả các đầu vào cho đến khi Ctrl-D sẽ được chuyển hướng đến stdout của mèo.


thử này: $ out=$(cat) && eval "$out". nhấn enter sau dòng cuối cùng rồi nhấn CTRL + D như đề xuất ở trên.
Mohamed Bana
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.