Где я могу разместить пользовательскую функцию оболочки?

Я планирую создать функцию, которая упростит мне вещи. Функция будет выглядеть примерно так:

function lazymode()
{
echo "Hello World!";
}

, поэтому, когда я использую команду lazymode в оболочке , она выдаст Hello World!.

В какой файл следует поместить пользовательскую функцию?

15
задан 1 February 2016 в 12:20

3 ответа

Atkarīgs no funkcijas. Ja tas ir tikai ļoti vienkāršs viena līnijpārvadātājs, piemēram, jūs varat izveidot aizstājvārdu vai ielīmēt funkciju mapē ~ / .bashrc (failā, kuru ielādē, kad tas sākas).

Ja esat izveidojot kaut ko nedaudz gaumīgāku, varētu būt lietderīgāk izveidot savu izpildāmo skriptu mapē ~ / bin / , kas pēc noklusējuma nepastāv (tas ir tikai direktorijs), bet tam jābūt jūsu ceļā. Atcerieties, ka failam būs jābūt izpildāmam ( chmod + x faila nosaukums ) un jāsākas ar pareizu #! / Bin / bash strofu.

Otrajā maršrutā ir dažas skaidras iezīmes. priekšrocības:

  • Vieglāk redzēt, kas ir pieejams
  • Sintakses kļūda neuzpildīs jūsu profilu
  • Ja maināt skriptu, jums nav jāturpina atkārtoti iegūt savu bash konfigurāciju
  • Tas ir pieejams jebkurš apvalks, kamēr tiek izmantots pilns ceļš vai ~ / bin / atrodas arī šīs čaulas ceļā (kam tam vajadzētu būt lielākajā daļā gadījumu AFAIK).
15
ответ дан 1 February 2016 в 12:20

Labākā izvēle būtu fails ~ / .bashrc .

Jūs varat vai nu ierakstīt čaulas funkciju definīcijas tieši failā ~ / .bashrc vai, ja jums to ir daudz un jūs nevēlaties pārblīvēt savu ~ / .bashrc failu, varat tos visus ievietot citā izvēlētajā failā - vienkārši pārliecinieties, ka avots ir šo failu jūsu failā ~ / .bashrc . Piemēram, ja failam ar jūsu funkcijām ir nosaukums bash_functions , vienkārši failā ~ / .bashrc pievienojiet rindiņas:

if [[ -f /path/to/bash_functions ]]; then
    source /path/to/bash_functions
fi

vai, līdzvērtīgi:

if [[ -f /path/to/bash_functions ]]; then
    . /path/to/bash_functions
fi

, kur . ir tikai avota simbolisks attēlojums. Pārbaudot , ja , pirms mēģināt to iegūt, pārliecinieties, vai fails / path / to / bash_functions pastāv.

Šī metode ir ļoti līdzīga aizstājvārdu izveidošanai mapē ~ / .bashrc , izveidojot failu ar nosaukumu ~ / .bash_aliases un izmantojot līdzīgu sintaksi kā iepriekš aprakstītajā ~ / .bashrc , lai pārbaudītu tā esamību un pēc tam iegūtu avotu.

5
ответ дан 1 February 2016 в 12:20

Itt van egy alapvető eljárás az állandó funkció deklarálásához:

  1. Nyissa meg a ~ / .bashrc fájlt egy szövegszerkesztőben. Nem számít, melyik szövegszerkesztő, mindaddig, amíg tudod, hogyan kell használni, és amíg megnyitod a / home / /.bashrc

  2. A ~ / végén. bashrc deklarálja saját függvényét, például:

     find_dirs () {
      keresse meg a "$ 1" -típust d
     }
     
  3. Mentse és zárja be a fájlt.

Az ~ / .bashrc fájlt az interaktív héj minden egyes megnyitásakor elolvassák (ez egy új terminál fül, bejelentkezés az ssh segítségével, vagy nyissa meg a TTY1 vagy más virtuális konzolt). Ez nem lesz elérhető szkriptfájlokban, mert a ~ / .bashrc nem olvasható be nem interaktív héjak esetén. Ez akkor sem érhető el, ha a bash fájlt a - norc opcióval futtatja.

Ha azt szeretné, hogy a funkció azonnal elérhető legyen az éppen megnyitott fülön,használja a source ~ / .bashrc parancsot.


A függvények ugyanúgy vesznek fel argumentumokat, mint a normál parancsok. Például $ 1 - $ 9 jelzi a helyzetparamétereket, amikor meghív egy függvényt. A fenti példában a find_dirs csak egy pozícióparamétert vesz fel, és find_dirs / etc néven hívnák. A $ @ paranccsal hivatkozhat az összes helyzeti paraméterre. A függvények elfogadják az átirányítást is. Meghívhat egy függvényt az find_dirs $ 1> / dev / null paranccsal; ezt a következőképpen is kijelenthetnénk:

find_dirs(){
    find "$1" -type d
}

Man bash megjegyzése: "A függvényeket az aktuális héj kontextusában hajtják végre; értelmezésükre nem jön létre új folyamat". Ez azt jelenti, hogy ismernie kell azokat a funkciókat is, amelyek képesek megváltoztatni a shell végrehajtási környezetét - változtatni a változókat és a terminál beállításait.

1
ответ дан 1 February 2016 в 12:20

Другие вопросы по тегам:

Похожие вопросы: