Điểm:0

xuất thông số env mới mà không xuất ra thiết bị đầu cuối

lá cờ cn

Tôi đang cố chạy một tập lệnh và xuất bash đang xuất văn bản khi tôi không muốn vì nó đang phá vỡ đầu ra. Tôi cần chạy một tập lệnh trích xuất một số thông tin rồi chèn nó vào môi trường lệnh tiếp theo, giống như lấy bí mật AWS cho awscli và chuyển chúng vào môi trường aws một cách minh bạch. Tôi nhận được kết quả không nhất quán và tôi không chắc tại sao

$ ./bin/aws-creds mô phỏng
AWS_ACCESS_KEY_ID=mock1234
AWS_SECRET_ACCESS_KEY=mock1234
AWS_CREDS=thành công

$ ddt aws-creds giả
AWS_ACCESS_KEY_ID=mock1234
AWS_SECRET_ACCESS_KEY=mock1234
AWS_CREDS=thành công

Cả hai đều xuất ra như nhau, điều này thật tuyệt, vì vậy hãy thử chạy chúng và sử dụng xuất trên đầu ra

$ xuất $(./bin/aws-creds giả)
$ export $(ddt aws-creds giả)
AWS_ACCESS_KEY_ID=mock1234
AWS_SECRET_ACCESS_KEY=mock1234
AWS_CREDS=thành công
khai báo -x .... một loạt các thứ bổ sung từ môi trường của tôi

Đợi một chút? Cả hai lệnh, khi được đưa vào xuất bằng cách sử dụng lớp con $(...) dường như làm những việc khác nhau và đây là điều tôi muốn khắc phục. Tôi muốn giống như tập lệnh ./bin đầu tiên, không có đầu ra, nhưng tất cả các tham số mới được chèn vào môi trường trình bao. Có vẻ như tập lệnh tôi đã viết 'ddt', không hoạt động theo cách tương tự vì một số lý do.

Ai có thể giải thích tại sao và có thể đề xuất một số cách khắc phục không?

lá cờ ph
`ddt` có thể đang gửi đầu ra của nó tới thiết bị xuất chuẩn thay vì thiết bị xuất chuẩn; xem ["Đầu ra không được ghi trong biến bash" trên Stackoverflow](https://stackoverflow.com/questions/37115949/output-not-captured-in-bash-variable). Cảnh báo: sử dụng stderr của lệnh làm đối số cho `xuất` có thể dẫn đến việc cố gắng xuất các thông báo lỗi thực tế... điều này sẽ không có ý nghĩa gì cả.
lá cờ cn
Bạn hoàn toàn đúng Gordon, tôi thực sự không thấy lỗi đó, cảm ơn bạn rất nhiều vì đã giúp tôi! Vui lòng đặt câu trả lời này làm câu trả lời để tôi có thể đánh dấu nó là câu trả lời đúng! Lệnh 'ddt' đã bị định cấu hình sai để sử dụng thiết bị xuất chuẩn do lỗi sao chép/dán, xuất ra thiết bị xuất chuẩn đã hoạt động
Điểm:1
lá cờ ph

[Mở rộng từ nhận xét:] đt lệnh đang gửi đầu ra của nó tới lỗi tiêu chuẩn (stderr) thay vì đầu ra tiêu chuẩn (thiết bị xuất chuẩn) và $( ) chỉ chụp thiết bị xuất chuẩn. Về cơ bản có hai cách để khắc phục điều này:

  1. Lựa chọn tốt hơn là sửa chữa đt vì vậy nó sẽ gửi các giá trị biến đến thiết bị xuất chuẩn thay vì thiết bị xuất chuẩn.
  2. Nếu điều đó là không thể, bạn có thể thêm 2>&1 sau đt lệnh, để chuyển hướng thiết bị xuất chuẩn của nó sang thiết bị xuất chuẩn (và cho phép $( ) để nắm bắt nó). Nhưng điều này có nguy cơ là nếu đt in bất kỳ lỗi thực tế nào, nó sẽ tiếp tục và cố gắng xuất khẩu những thông báo đó, với kết quả không thể đoán trước (và có thể là không mong muốn).

Xem câu hỏi "Đầu ra không được ghi trong biến bash" trên Stackoverflow.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.