GNU/Linux >> Znalost Linux >  >> Linux

Můžete umístit více spustitelných skriptů do jednoho adresáře a zajištěním tohoto adresáře zpřístupnit všechny tyto příkazy?

Chci vložit spoustu spustitelných skriptů do adresáře .command (který je také spustitelný) a pak musím pouze vytvořit tento adresář v mém .bash_profile. Je to možné? Dokážu to zprovoznit s jedním souborem. Ale když přidáváte druhý soubor, příkazy druhého souboru nejsou v shellu dostupné.

můj .bashprofile

source ~/.commands/*

moje složka .commands

-rwxr-xr-x   1 christopherreece  staff   108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x   1 christopherreece  staff    23 Dec 14 09:04 short

obsah zkratky

echo 'a short program'

soutěže server_utils.sh

function upfile {
  scp $1 [email protected]:~/
}

Vstup a výstup shellu.

$ hello
hello

$ short
-bash: short: command not found

Přijatá odpověď:

Nemůžete to udělat s jedním source . První argument se bere jako název souboru, ostatní se zobrazují jako poziční parametry $1 , $2 … ve zdrojovém skriptu.

$ cat test.src 
echo hello $1
$ source test.src there
hello there

Ale můžete to udělat pomocí smyčky:

for f in ~/commands/*.src; do
    source "$f"
done

(Mimochodem, mít takové věci, které obsahují pouze soubory s určitou příponou, je docela užitečné, pokud používáte editor, který ponechává záložní soubory s koncovým ~ . Záložní kopie se pak náhodně neaktivují.)

Všimněte si však, že pokud máte zdrojový skript, který obsahuje jednoduché příkazy (například echo výše nebo vaše short ), budou spuštěny, když je skript source d. Negenerují žádné funkce v zdrojovém prostředí.

$ cat test2.src 
echo "shows when sourced"
func() {
    echo "shows when function used"
} 
$ source test2.src 
shows when sourced
$ func
shows when function used

Pokud chcete mít místo toho spustitelné skripty, tedy druh, kde se skript spustí, když zadáte jeho název jako příkaz, vložte je někam do PATH (Doporučuji použít ~/bin za to), dejte jim oprávnění ke spuštění a vložte správné hashbangy na začátek skriptů (#!/bin/sh nebo #!/bin/bash nebo cokoliv)


Linux
  1. 9 Linuxových adresářů, které musíte zálohovat, a jeden, který byste neměli

  2. Mohu v Unixu spustit 'make' v adresáři, aniž bych do tohoto adresáře nejprve cd'oval?

  3. Jak najdete původního uživatele pomocí několika příkazů sudo a su?

  1. Jak mohu přimět bazel používat externí úložiště při stavbě?

  2. Jak mohu stisknout Ctrl-Z a bg jedním stisknutím klávesy, aby proces pokračoval na pozadí?

  3. bash příkazy, které se nevejdou na jednu stránku – umožňují rolování výstupu

  1. Když zadáte „ls -a“, jaký je význam „.“ A ".."?

  2. Kdy byste měli kompilovat a instalovat ze zdroje?

  3. Použijte Najít k nalezení určitého adresáře a odstranění všech souborů v něm kromě jednoho adresáře?