Điểm:0

Lỗi tập lệnh Shell do biến PATH không được đặt

lá cờ gg

Phiên bản Ubuntu: Ubuntu 20.04.2.0 LTS

vỏ: bash

Tôi có một tập lệnh shell sẽ được thực thi bởi nguồn gốc từ công việc định kỳ của root. Nhưng, ngay cả khi tôi thực thi tập lệnh theo cách thủ công, nó vẫn báo lỗi như sau

# ./fix_wifi.sh
./fix_wifi.sh: dòng 17: : lệnh không tìm thấy
./fix_wifi.sh: dòng 18: : lệnh không tìm thấy

Dòng 17 và 18 là dòng có tiếng vangkhởi động lại trình quản lý mạng dịch vụ

Việc cung cấp tên đường dẫn tuyệt đối (/ usr/bin, /usr/sbin) cho các tệp nhị phân này trong tập lệnh không giúp được gì. Vì vậy, tôi muốn lấy nguồn các tệp khởi động ở đầu tập lệnh để tập lệnh nhận biết biến PATH (và các biến có liên quan khác)

Tuy nhiên, đối với người dùng root trong Ubuntu, tôi nên lấy tệp khởi động nào? tôi có thể thấy .bashrc.Hồ sơ tập tin trong thư mục gốc của root /nguồn gốc.

#!/bin/bash

# Được viết bởi xyz
# Phải được chạy với quyền root

nếu [[ $EUID -ne 0 ]]; sau đó
  echo "Tập lệnh này phải được chạy với quyền root"
 thoát 1
fi

ConnectionStatus=$(kết nối mạng nmcli)

#echo "$ConnectionStatus"

nếu [ "$ConnectionStatus" != "full" ]
sau đó
  /usr/bin/echo "Wifi bị ngắt kết nối tại " `date` " do đó khởi động lại trình quản lý mạng..." | /usr/bin/tee -a /home/john/scripts/wifi_diagnostics.log
  /usr/sbin/service network-manager khởi động lại
fi

Ghi chú: Tôi đã quên cung cấp đường dẫn tuyệt đối cho ngày tháng lệnh trong Dòng 17. Tuy nhiên, nó không liên quan lắm ở đây vì dòng 18 chứa khởi động lại trình quản lý mạng dịch vụ vẫn bị lỗi mặc dù đã cung cấp đường dẫn đầy đủ (/usr/sbin)

pLumo avatar
lá cờ in
Vui lòng cung cấp tập lệnh `./fix_wifi.sh` của bạn.
bac0n avatar
lá cờ cn
không được cung cấp bất kỳ đường dẫn nào tới echo [1](https://askubuntu.com/a/960826/986805)
lá cờ hr
Thực tế là (dường như) không có gì giữa `: :` khiến tôi tự hỏi liệu đây có thực sự là trường hợp xuống dòng trong tập lệnh của bạn hay không - chứ không phải bất cứ điều gì liên quan đến biến đường dẫn của bạn
waltinator avatar
lá cờ it
Luôn dán tập lệnh của bạn vào `https://shellcheck.net`, trình kiểm tra cú pháp hoặc cài đặt `shellcheck` cục bộ. Hãy biến việc sử dụng `shellcheck` thành một phần trong quy trình phát triển của bạn.
Jarad Downing avatar
lá cờ sg
Trong khi lệnh `khởi động lại trình quản lý mạng dịch vụ` sẽ hoạt động, tại sao không sử dụng systemd và thay thế nó bằng `/usr/bin/systemctl khởi động lại trình quản lý mạng`?
Điểm:0
lá cờ gg

Như steeldriver đã đề xuất, lỗi là do 'không gian không phá vỡ unicode' trên dòng 17 và 18 trong mệnh đề IF (và dòng 7,8 kiểm tra xem tập lệnh có được người dùng root thực thi hay không). Tôi đã thụt lề để làm cho kịch bản dễ đọc hơn. Tôi chưa bao giờ nghĩ nó sẽ khiến tôi đau đầu. Nhưng, bài học kinh nghiệm.

ảnh chụp màn hình từ đầu ra shellcheck

Tôi nghĩ rằng đó là các ký tự trả về vận chuyển của Windows gây ra sự cố này.

Tôi đã xóa các ký tự này và nhập dấu cách khỏi trình chỉnh sửa vim và sự cố đã biến mất.

Cảm ơn mọi người.

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