Score:0

ข้อผิดพลาดของเชลล์สคริปต์เนื่องจากไม่ได้ตั้งค่าตัวแปร PATH

ธง gg

รุ่น Ubuntu: Ubuntu 20.04.2.0 LTS

เปลือก: ทุบตี

ฉันมีเชลล์สคริปต์ที่จะดำเนินการโดย ราก จากงาน cron ของ root แต่แม้ในขณะที่ฉันเรียกใช้สคริปต์ด้วยตนเอง มันก็เกิดข้อผิดพลาดขึ้นโดยระบุข้อความต่อไปนี้

# ./fix_wifi.sh
./fix_wifi.sh: บรรทัดที่ 17: : ไม่พบคำสั่ง
./fix_wifi.sh: บรรทัดที่ 18: : ไม่พบคำสั่ง

บรรทัดที่ 17 และ 18 คือบรรทัดที่มี เสียงสะท้อน และ รีสตาร์ทตัวจัดการเครือข่ายบริการ

การระบุชื่อพาธสัมบูรณ์ (/usr/bin, /usr/sbin) สำหรับไบนารีเหล่านี้ในสคริปต์ไม่ได้ช่วยอะไร ดังนั้นฉันต้องการให้แหล่งที่มาของไฟล์เริ่มต้นที่จุดเริ่มต้นของสคริปต์เพื่อให้สคริปต์ทราบตัวแปร PATH (และตัวแปรอื่น ๆ ที่เกี่ยวข้อง)

แต่สำหรับผู้ใช้รูทใน Ubuntu ฉันควรหาไฟล์เริ่มต้นใด ฉันสามารถเห็น .bashrc และ .ข้อมูลส่วนตัว ไฟล์ในโฮมไดเร็กทอรีของรูท /ราก.

#!/bin/bash

#เขียนโดย xyz
# ต้องเรียกใช้ในฐานะรูท

ถ้า [[ $EUID -ne 0 ]]; แล้ว
  echo "สคริปต์นี้ต้องรันในฐานะรูท"
ทางออก 1
ไฟ

ConnectionStatus=$(การเชื่อมต่อเครือข่าย nmcli)

#echo "สถานะการเชื่อมต่อ $"

ถ้า [ "$ConnectionStatus" != "เต็ม" ]
แล้ว
  /usr/bin/echo "Wifi พบว่าถูกตัดการเชื่อมต่อที่ " `date` " ดังนั้นการรีสตาร์ทตัวจัดการเครือข่าย..." | /usr/bin/tee -a /home/john/scripts/wifi_diagnostics.log
  /usr/sbin/service รีสตาร์ทตัวจัดการเครือข่าย
ไฟ

บันทึก: ฉันลืมระบุเส้นทางที่แน่นอนสำหรับ วันที่ คำสั่งในบรรทัดที่ 17 แต่ที่นี่ไม่เกี่ยวข้องมากนักเนื่องจากบรรทัดที่ 18 มี รีสตาร์ทตัวจัดการเครือข่ายบริการ ยังคงเกิดข้อผิดพลาดแม้ว่าจะระบุเส้นทางแบบเต็ม (/ usr / sbin)

pLumo avatar
in flag
โปรดระบุสคริปต์ `./fix_wifi.sh` ของคุณ
bac0n avatar
cn flag
ไม่ควรระบุเส้นทางใด ๆ เพื่อ echo [1](https://askubuntu.com/a/960826/986805)
hr flag
ความจริงที่ว่าไม่มีอะไร (เห็นได้ชัดว่า) ระหว่าง `: :` ทำให้ฉันสงสัยว่านี่เป็นกรณีของการขึ้นบรรทัดใหม่ในสคริปต์ของคุณหรือไม่ - แทนที่จะเกี่ยวข้องกับตัวแปรพา ธ ของคุณ
waltinator avatar
it flag
วางสคริปต์ของคุณใน `https://shellcheck.net` ซึ่งเป็นตัวตรวจสอบไวยากรณ์เสมอ หรือติดตั้ง `shellcheck` ในเครื่อง ใช้ 'shellcheck' เป็นส่วนหนึ่งของกระบวนการพัฒนาของคุณ
Jarad Downing avatar
sg flag
ในขณะที่คำสั่ง `service network-manager restart` ควรใช้งานได้ ทำไมไม่ใช้ systemd และแทนที่ด้วย `/usr/bin/systemctl restart network-manager`
Score:0
ธง gg

ตามที่ steeldriver ได้แนะนำไว้ ข้อผิดพลาดเกิดจาก 'unicode non-breaking space' ในบรรทัดที่ 17 และ 18 ภายใน IF clause (และบรรทัดที่ 7,8 ซึ่งจะตรวจสอบว่าสคริปต์ถูกเรียกใช้โดยผู้ใช้รูทหรือไม่) ฉันเยื้องเพื่อทำให้สคริปต์อ่านง่ายขึ้น ฉันไม่เคยคิดว่ามันจะทำให้ฉันปวดหัว แต่บทเรียนที่ได้รับ

สกรีนช็อตจากเอาต์พุต shellcheck

ฉันคิดว่ามันเป็นอักขระส่งคืนแคร่ของ Windows ซึ่งเป็นสาเหตุของปัญหานี้

ฉันลบอักขระเหล่านี้และพิมพ์ช่องว่างจากตัวแก้ไข vim และปัญหาก็หายไป

ขอบคุณทุกคน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา