Mit csinálnak -e egy bash shebangban?

Van egy bash szkriptem a következővel:

#!/bin/bash -e egrep "^username" /etc/passwd >/dev/null if[ $? -eq 0 ] then echo "doesn"t exist" fi 

Ez a szkript nem fog fut az -e nélkül. Mit csinál a -e ehhez a szkripthez? Ezenkívül mit csinál a $? ebben a kontextusban?

Megjegyzések

  • Páratlan. Nincs -e a man oldalon (nagyon szeretném, ha egy válasz ezzel foglalkozna). A $? tartalmazza az utolsó kilépési kódot (a fent keletkezett egrep folyamat kódját).
  • @pst: -e a set alatt van dokumentálva.
  • A szkriptet ezzel egyszerűsítheti: if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
  • ' hiányzik egy szóköz if és [. Ez a szkript ' nem fog működni -e vel, mert ha grep nem talál ' nem talál semmit, akkor a -e alatt a parancsfájl ott fog végződni. -e nélkül ' visszakapta az üzenetet: egy állapot ($?) A 0 azt jelenti, hogy a grep valóban megtalálta a felhasználót. Ne feledje, hogy ennek a következőnek kell lennie: grep ' ^ felhasználónév: ' (mi van, ha ott van

egy másik, hosszabb névvel rendelkező felhasználó?).

  • #/bin/bash -e ugyanaz a hatása lesz, mint #/bin/bash az 1. sorban és set -e a 2. sorban?
  • Válasz

    A bejegyzésed valójában 2 kérdést tartalmaz.

    1. A -e jelző utasítja a szkriptet, hogy hiba esetén lépjen ki. További jelölők

      Ha hiba történik, akkor azonnal kilép.

    2. A $? az utolsó parancs kilépési állapota. Linux alatt a 0 kilépési állapot azt jelenti, hogy a parancs sikeres volt. Bármely más állapot hibát jelent.

    Ezeknek a válaszoknak a szkriptjére történő alkalmazása:

    egrep "^username" /etc/passwd >/dev/null 

    a username fájlt keresi a /etc/passwd fájlban.

    • Ha megtalálja akkor a $? kilépési állapot egyenlő lesz 0.

    • Ha nem “Nem találom, hogy a kilépési állapot valami más lesz (nem 0). Itt végre kell hajtani a echo "doesn"t exist" részt kód.

    Sajnos hiba van a szkriptben, és végrehajtaná ezt a kódot: , ha a felhasználó létezik – módosítsa a sort

    if [ $? -ne 0 ] 

    a logika jobb megszerzése érdekében.

    Ha azonban a felhasználó nem, “t létezik, egrep egy c hibát ad vissza ode, és a -e opció miatt a shell azonnal kilép a sor után, így soha nem érné el a kód azon részét.

    Megjegyzések

    • Ezenkívül a szkriptet az -e nélkül is megfelelően működtetheti, ha az első két sort lecseréli a if egrep "^username" /etc/passwd >/dev/null szóra.
    • Miért nincs szükség set -re? : – /
    • @pst: Mivel a -e parancssori argumentumként van megadva a bash-nak. A set alatt felsorolt összes beállítást a bash is elfogadja a parancssorában – vegye figyelembe a kézikönyv Opciók szakaszának első mondatát oldal.

    Válasz

    Az összes bash parancssori kapcsolót a man bash.

     -e Exit immediately if a pipeline (which may consist of a single simple command), a subshell command enclosed in parentheses, or one of the commands executed as part of a command list enclosed by braces (see SHELL GRAMMAR above) exits with a non-zero status. The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test following the if or elif reserved words, part of any command executed in a && or || list except the command following the final && or ||, any command in a pipeline but the last, or if the command"s return value is being inverted with !. A trap on ERR, if set, is executed before the shell exits. This option applies to the shell environment and each subshell envi- ronment separately (see COMMAND EXECUTION ENVIRONMENT above), and may cause subshells to exit before executing all the commands in the subshell. 

    Megjegyzések

    • Ahh. Megkerestem a férfiban, de miután megtaláltam az -e fájlteszteket és a -e-t a főbb érvek alatt, feladtam. Szép részlet. Miért nem szükséges mégis set? : – /

    Válasz

    A szkripted helytelen, mert

    egrep "^username" /etc/passwd >/dev/null if[ $? -eq 0 ] then #echo "doesn"t exist" # WRONG echo "the USER EXISTS" fi 

    exit status 0 – jelentése – minden rendben van, a grep esetében pedig azt jelenti, hogy” OK, megtalálta a karakterláncot “. exit status! = 0 azt jelenti, hogy valami nincs rendben, a grep esetén az 1. jelentése: “nem található”, a 2. jelentése: “nem lehet megnyitni a bemenetet” …

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük