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:
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:
Bắt đầu với (
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
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!
Nếu bạn nhấn C-x C-e
lệ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 -nw
hoặc EDITOR=vi
bên trong của~/.bashrc
emacs
và vi
làm), và khi lưu và thoát các lệnh được thực thi ngay lập tức .
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.
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
)
(
, niềng răng {
sẽ cũng làm việc cùng trong ví dụ trên
Khả năng khác:
bash << EOF
echo "Hello"
echo "World"
EOF
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
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.
$ 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.