Làm cách nào để chuyển CTRL-D vào một dòng lệnh trong tập lệnh?


7

Tôi đang sử dụng dòng này

 ( cat bodyText.txt; uuencode backup.tar ) | mail -s "backup" myEmail@myserver.com

bên trong một tập lệnh bash sẽ được kích hoạt bởi cron.

Dòng này gần như hoàn hảo, nhưng nó chờ đợi Ctrl- Dđược gõ, vì vậy tin nhắn và tệp đính kèm có thể được gửi.

Làm cách nào để bao gồm một Ctrl- Dbên trong tập lệnh bash để làm cho dòng này hoạt động?


tại sao bạn không đơn giản sử dụngcat bodyText.txt | uuencode backup.tar| mail -s "backup" myEmail@myserver.com
Rahul Patil

bởi vì điều này sẽ tạo ra hai email, một email chứa văn bản và email kia chứa tar.
DuckDucking

Bạn đã thử ( cat bodyText.txt; uuencode backup.tar ; echo -e "\n.\n" ) | mail -s "backup" myEmail@myserver.comchưa?
ott--

@DigitalRobot bạn đã thử chưa? bởi vì tôi chỉ nhận được một thư
Rahul Patil

phương pháp \ n \ n này không hoạt động. Nó đang mong đợi một Control D. Gửi \ n sẽ không làm gì cả.
DuckDucking

Câu trả lời:


4
  • uuencode là: tên uuencode <sourcefile

  • có lẽ chỉ cần một dòng trống cuối cùng: thêm ; echo -e "\n\n" ;trước dấu ngoặc đơn đóng và thử lại? -

Vì vậy, trong trường hợp của bạn:

( cat bodyText.txt; uuencode backup.tar < backup.tar ; echo -e "\n\n" ; ) | mail -s "backup" myEmail@myserver.com

Một cách khác là sử dụng muttxử lý tệp đính kèm tốt hơn và biết về các loại mime, v.v .:

mutt -s "the subject" -a backup.tar -- myEmail@myserver.com < bodyText.txt

tiếng vang có lẽ là không cần thiết ... Tôi không thể thử nó ở đây, vì vậy hãy thử với nó và thử mà không có nó, và xem cái nào hoạt động ^^
Olivier Dulac

không làm việc cho tôi Vấn đề tương tự.
DuckDucking

thử: uuencode backup.tar backup.tar cho phần uuencode
Olivier Dulac

bạn có thể có bí danh? về nhận xét của bạn về câu trả lời @goodluck bên dưới, có vẻ như "uuencode của bạn" có uuencode tập tin "cái gì đó" không? xem type -all uuencodetrong bash và nếu đó là bí danh, hãy thử \uuencode backup.tar backup.tar(với "\" để bỏ qua bí danh)
Olivier Dulac

Tôi đã cập nhật câu trả lời của mình: thử cú pháp mới. Và thử muttthay thế quá.
Olivier Dulac

0

Như những người khác đã nói, Control-D là cách bạn bảo shell gửi kết thúc tập tin. Quá trình đọc từ các luồng sẽ nhận được kết thúc của tệp khi luồng đóng.

Nhưng có vẻ như bạn đang cố gắng thực hiện một cái gì đó đã tồn tại ở dạng hoàn thiện hơn. Tất nhiên bạn có thể có lý do cho điều đó, nhưng nếu bạn quan tâm đến các giải pháp hiện có, mpack / munpack là các chương trình dòng lệnh mã hóa tập tin và gửi qua thư. Bạn có thể đọc manpage để xem nó có làm những gì bạn muốn không.


-1

Ý bạn là:

uuencode backup.tar < bodyText.txt | mail -s "backup" myEmail@myserver.com

không làm việc cho tôi Tệp đính kèm đến mà không có văn bản cơ thể ....
DuckDucking

1
Mã của bạn uuencodekhông có ý nghĩa gì và việc thay đổi phần đó sẽ không giúp giải quyết vấn đề mailtrong mọi trường hợp. Bạn nên viết câu trả lời giải thích vấn đề, không chỉ bỏ một dòng mã: điều đó sẽ hữu ích hơn cho người đọc và sẽ giúp bạn tìm hiểu xem những gì bạn đề xuất có cơ hội giải quyết vấn đề hay không.
Gilles 'SO- ngừng trở nên xấu xa'

-1

Sử dụng chế độ dài dòng (-v) để tránh ctrl + d

echo -e 'Mail body'| mail -v -s 'Mail Subject' my@email.com
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.