Điểm:0

Làm cách nào để viết một tập lệnh shell sẽ tải lại thiết bị đầu cuối ở giữa tập lệnh và sau đó bắt đầu sử dụng lại các lệnh?

lá cờ pk

Gần đây tôi đã biết về sdkman Trong gitpod.io và tôi muốn cài đặt các phiên bản java khác nhau bằng trình quản lý này. Nhưng tôi có một phiên bản sdkman rất cũ. Đó là tôi cần cập nhật nó, sau đó cài đặt java. Nhưng tôi không muốn gõ lệnh này trong mọi kho lưu trữ của mình trong gitpod. Đó là lý do tại sao tôi đã viết một shell script điều kiện tiên quyết.sh và tôi sẽ sử dụng tệp này trong mọi kho lưu trữ. Kịch bản là: -

cập nhật sdk
sdk cài đặt java 17-mở

# có rất nhiều lệnh bên dưới, nhưng chúng không cần thiết trong câu hỏi này.

Nhưng sau đó tôi biết rằng sau khi cập nhật sdkman, tôi cần khởi động lại thiết bị đầu cuối. tôi thấy rằng điều hành bash khởi động lại thiết bị đầu cuối. Nhưng khi tôi thêm điều hành bash trong tập lệnh shell của tôi, nó không thực thi các lệnh bên dưới điều hành bash chỉ huy. Ai đó có thể gợi ý cho tôi, làm thế nào để làm điều này?

cập nhật sdk
exec bash #được thêm gần đây, nhưng không thực thi các lệnh sau nó :(
sdk cài đặt java 17-mở
rajin100000 avatar
lá cờ pk
Nó có thể giúp tôi bằng cách nào??
Điểm:0
lá cờ cn

Vấn đề bạn gặp phải là khi bạn mở trình bao mới hoặc khởi động lại trình bao hiện tại, tập lệnh của bạn sẽ không còn được tải trong trình bao mới. Vì vậy, những gì bạn cần làm là:

  1. Mở vỏ cha mẹ
  2. Thực hiện lệnh đầu tiên
  3. Tạo một trình bao con trong tập lệnh gốc
  4. Shell con này sẽ được tải với các tham số môi trường mới
  5. Thực thi lệnh thứ hai trong trình bao con
  6. Thoát vỏ con
  7. Thoát vỏ mẹ

Đối với các lệnh được đề cập ở trên, bạn có thể sử dụng một cái gì đó như thế này.

#!/bin/bash
cập nhật sdk
sudo su - $USER -c 'sdk cài đặt java 17-open'

Lệnh đầu tiên sẽ chạy trong shell cha. Dòng thứ hai (với sudod su - $USER) sẽ mở một shell con mới trong cùng một tập lệnh và thực thi lệnh thứ hai.

Tái bút: Bạn sẽ được yêu cầu nhập mật khẩu nếu bạn chưa định cấu hình "NOPASSWD" cho sudo. Kiểm tra cái này để thiết lập điều đó.

Đă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.