Dat werkt inderdaad niet.
Maar zet er eens een ./ voor (in de dir waar het bestand staat)
./backup.sh sabnzbd
Dan moet het wel werken
Klopt, dat werkt wel idd. En ./ wil toch alleen maar zeggen voer uit op huidige locatie? Zoals ../ dus een map lager is... Waarom werkt het niet zonder ./?
Dat komt doordat je dan aangeeft dat je het script inderdaad vanaf de huidige directory wilt starten.
Ook al zit je als gebruiker in /home/Matr1x is het bij Unix niet zo dat je de commando's in de huidige dir start.
Unix gebruikt hiervoor het $PATH varable in het profiel van de gebruiker.
In je profiel staat bijvoorbeeld dat het commando dat je uitvoerd gestart moet worden door applicatie X die op locatie Y staat.
Bijvoorbeeld:
Als je sh voor je script zet, snapt unix dat je het script wil uitvoeren met de shell app (om het zo maar even te noemen)
Met het commando "which"kun je achterhalen waar de applicatie zich bevind volgens jouw profiel.
RapOlogy> which bash
/opt/bin/bash
RapOlogy> which cat
/bin/cat
RapOlogy> which sh
/bin/sh
etc.
Als je dus "sh scriptnaam.sh" start zeg je eigenlijk "/bin/sh scriptnaam.sh"
Dus, voer script "scriptnaam.sh"uit met applicatie sh
Je krijgt de foutmelding "backup.sh: not found" dus omdat de shell denkt dat je iets wilt starten met applicatie backup.sh. En die staat niet in je profiel gedefineerd, staat ook niet in de standaard applicatie folder(s) zoals /bin/ en daarom komt hij met de foutmelding dat APPLICATIE backup.sh niet gevonden kan worden.
Doordat je ./ gebruikt snapt unix dat je iets wilt doen in de huidige directory.
In backup.sh staat in de eerste regel "#!/bin/sh"
In de eerste regel wordt altijd gecontroleerd waarmee je een script wilt openen.
Hij ignored de hash tag # op de eerste regel omdat de shell weet dat deze eerste regel puur voor hem bedoeld is. (om het zo maar even te zeggen)
Als je twee varianten van sh geinstalleerd hebt staan, kun je in het script laten weten dat hij gebruik moet maken van sh versie 1 of sh versie 2.
Zet je deze regel er niet in, bestaat de kans dat het script gewoon niet draait.
Ik denk dan ook dat het probleem van BZwart hierin te zoeken is.
als hij het commando "sh backup.sh" gebruikt, en dat gaat fout, zal er gekeken worden (met "which sh") of sh ook daadwerkelijk in de directory staat die staat opgegeven voor sh.
(ash is een andere versie/variant van sh of een ander benaming voor sh zo ver mij bekend is. ze verwijzen beiden naar Busybox. je script zal dus door busybox worden afgehandeld als een bash script. (maar ik kan er naast zitten))
Volgens mij is het so dat SH gewoon voor SHell script staat en (BASH) ASH ook, maar dan de nieuwere variant.
Ze komen beiden uit de Bourne familie.
SH was er eerst (ontwikkeld door Stephen bourne) en toen kwam BASH (BOURNE AGAIN shell, ontwikkeld door Brian FOX)) en volgens mij is dat nu ash. (Almquist SHell, ontwikkeld door Kennith Almquist.)
In het script staat dat er gebruik gemaakt moet worden van "/bin/sh" en ik vraag mij af of "sh" wel in de "/bin" dir staat als Symlink (een soort van snelkoppeling) die verwijst naar Busybox.
cd /bin
ls -latr | grep sh
en de uitkomst moet zijn
sh -> busybox
ash -> busybox
Ik hoop dat ik het een beetje duidelijk uit heb kunnen leggen.
mocht het onduidelijk zijn of er andere vragen naar boven zijn gekomen hoor ik dat graag.