sh /path/to/script vytvoří nový shell a spustí skript nezávisle na vašem aktuálním shellu. source
(.) příkaz zavolá všechny příkazy ve skriptu v aktuálním shellu. Pokud skript náhodou zavolá exit
například pak ztratíte aktuální shell. Z tohoto důvodu je obvykle bezpečnější volat skripty v samostatném shellu pomocí sh nebo je spouštět jako binární soubory buď pomocí plné verze (počínaje /
) nebo relativní cesta (./
). Pokud jsou volány jako binární soubory, budou provedeny se zadaným interpretem (#!/bin/bash
, například).
Pokud jde o to, zda skript najde nebo nenajde soubory, které potřebuje, neexistuje žádná dobrá odpověď, kromě toho, že se podíváte na skript, abyste viděli, co dělá. Volitelně můžete vždy přejít do složky skriptu v dílčím procesu, aniž byste opustili aktuální složku:
(cd /wherever/ ; sh script.sh)
Určitě to můžete udělat (s úpravami, které ostatní zmínili jako sudo sh /pathto/script.sh
nebo ./script.sh
). Udělám však jednu z mála věcí, abych je provozoval v celém systému, abych se nestaral o adresáře a ušetřil si zbytečné psaní navíc.
1) Symbolický odkaz na /usr/bin
ln -s /home/username/Scripts/name.sh /usr/bin/name
(Ujistěte se, že tam není žádné překrývající se jméno, protože byste ho zjevně přepsali.) To mi také umožňuje ponechat je ve vývojových složkách, abych je mohl upravit podle potřeby.
2) Přidejte adresář Scripts do své cesty (pomocí .bash_profile - nebo čehokoli.profile, který máte na svém shellu)
PATH=/path/to/scripts/:$PATH
3) Vytvořte alias v .bash_profile
v ~/.bash_profile
přidejte něco jako:
alias l="ls -l"
Jak můžete říci, syntaxe je pouze alias, číslice, které chcete použít jako příkaz, příkaz. Takže zadání "l" kdekoli v terminálu by mělo za následek ls -l
Pokud chcete sudo, stačí alias sl="sudo ls -l"
poznamenat si l vs sl (jako zbytečný příklad).
V každém případě stačí zadat sudo nameofscript
a být na cestě. Není třeba si zahrávat s ./ nebo . nebo sh atd. Stačí je nejprve označit jako spustitelné :D
Obvykle dělám, jak říkáš
sh /path/to/script
A spustit jej jako root/superuser
sudo sh /path/to/script
Váš aktuální adresář je důležitý pouze v případě, že skripty předpokládají, že jste ve stejné složce jako on. Předpokládal bych, že většina skriptů to nedělá a vy se můžete uložit jako výše.