Puncte:0

Erori de script Shell din cauza variabilei PATH nu este setată

drapel gg

Versiunea Ubuntu: Ubuntu 20.04.2.0 LTS

Shell: bash

Am un script shell care va fi executat de rădăcină din jobul cron de la root. Dar, chiar și atunci când execut scriptul manual, greșește spunând următoarele

# ./fix_wifi.sh
./fix_wifi.sh: linia 17:: comanda nu a fost găsită
./fix_wifi.sh: linia 18:: comanda nu a fost găsită

Liniile 17 și 18 sunt cele cu ecou și repornirea serviciului de gestionare a rețelei

Furnizarea numelor de căi absolute (/usr/bin, /usr/sbin) pentru aceste binare în script nu a ajutat. Deci, aș dori să obțin fișierele de pornire la începutul scriptului, astfel încât scriptul să fie conștient de variabila PATH (și alte variabile relevante)

Dar, pentru utilizatorul root în Ubuntu, ce fișier de pornire ar trebui să surprind? Pot vedea .bashrc și .profil fișierele din directorul principal al root-ului /rădăcină.

#!/bin/bash

# Scris de xyz
# Trebuie să fie rulat ca root

dacă [[ $EUID -ne 0 ]]; atunci
  echo „Acest script trebuie rulat ca root”
  ieșirea 1
fi

ConnectionStatus=$(conectivitate la rețea nmcli)

#echo „$ConnectionStatus”

if [ "$ConnectionStatus" != "full" ]
atunci
  /usr/bin/echo „Wi-ul a fost deconectat la „ `date` ” prin urmare repornind managerul de rețea...” | /usr/bin/tee -a /home/john/scripts/wifi_diagnostics.log
  Reporniți /usr/sbin/service network-manager
fi

Notă: Am uitat să ofer calea absolută pentru Data comandă în linia 17. Dar, nu este foarte relevantă aici, deoarece linia 18 conține repornirea serviciului de gestionare a rețelei încă a fost eroată, în ciuda faptului că a furnizat calea completă (/usr/sbin)

pLumo avatar
drapel in
Vă rugăm să furnizați scriptul dvs. `./fix_wifi.sh`.
bac0n avatar
drapel cn
nu ar trebui să furnizeze nicio cale către echo [1](https://askubuntu.com/a/960826/986805)
drapel hr
Faptul că nu există (aparent) nimic între `: :` mă face să mă întreb dacă acesta este de fapt un caz de întoarceri de căruță în scriptul tău - mai degrabă decât ceva de-a face cu variabila cale.
waltinator avatar
drapel it
Lipiți întotdeauna scriptul în `https://shellcheck.net`, un verificator de sintaxă sau instalați `shellcheck` local. Utilizarea „shellcheck” este parte a procesului de dezvoltare.
Jarad Downing avatar
drapel sg
În timp ce comanda `service network-manager restart` ar trebui să funcționeze, de ce să nu îmbrățișați systemd și să o înlocuiți cu `/usr/bin/systemctl restart network-manager`?
Puncte:0
drapel gg

După cum a sugerat Steeldriver, eroarea s-a datorat „spațiului care nu se întrerupe Unicode” pe rândurile 17 și 18 din clauza IF (și liniile 7,8 care verifică dacă scriptul este executat de utilizatorul root). Am făcut indentarea pentru a face scenariul mai lizibil. Nu m-am gândit niciodată că îmi va da bătăi de cap. Dar, lectie invatata.

captură de ecran de la ieșirea shellcheck

Cred că caracterele de returnare a carușului din Windows sunt cele care cauzează această problemă.

Am șters aceste caractere și am introdus spațiu din editorul vim și problema a dispărut.

Multumesc tuturor.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.