GNU/Linux >> Znalost Linux >  >> Linux

Spouštění skriptů z jiného adresáře

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.


Linux
  1. Povolit skripty Setuid On Shell?

  2. Spouštět Bash skripty při vstupu do adresáře?

  3. Správné zamykání skriptů Shell?

  1. Možnosti Su – Spuštění příkazu jako jiný uživatel?

  2. Odkud se spouští skript Shell?

  3. Spouštějte příkazy Shell z programu spuštěného ve WINE

  1. Aktuální adresář skriptu Shell?

  2. CentOS:Zkopírujte adresář do jiného adresáře

  3. Jak odstranit jakýkoli řetězec ze souboru pomocí skriptů shellu?