Wat doet ‘set -x’?

Ik heb een shell-script met de volgende regel erin:

[ "$DEBUG" == 'true' ] && set -x

Antwoord 1, Autoriteit 100%

set -xMaakt een modus van de schaal in waar alle uitgevoerde opdrachten naar de terminal worden afgedrukt. In uw geval wordt het duidelijk gebruikt voor foutopsporing, wat een typisch gebruik is voor set -x: elke opdracht afdrukken zoals deze wordt uitgevoerd, kan u helpen de besturingsstroom van het script te visualiseren als deze niet functioneert zoals verwacht.

set +xSchakelt het uit.


Antwoord 2, Autoriteit 18%

set -x

Drukt een spoor van eenvoudige opdrachten, voor opdrachten, case-opdrachten, selecteer
opdrachten en rekenkundig voor opdrachten en hun argumenten of
bijbehorende woordlijsten nadat ze zijn uitgebreid en voordat ze zijn
uitgevoerd. De waarde van de PS4-variabele is uitgebreid en het resultaat
waarde wordt afgedrukt vóór de opdracht en de uitgebreide argumenten.

[bron ]

Voorbeeld

set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30

set +x
echo `expr 10 + 20 `
30

Hierbovenbeeld illustreert het gebruik van set -x. Wanneer het wordt gebruikt, is boven de rekenkundige expressie uitgebreid. We konden zien hoe een sing-lijn stap voor stap is geëvalueerd.

  • Eerste stap expris geëvalueerd.
  • Second Step echois geëvalueerd.

Meer informatie over Set → Bezoek deze link

Als het gaat om uw shell-script,

[ "$DEBUG" == 'true' ] && set -x

Uw script heeft mogelijk enkele aanvullende informatie afgedrukt wanneer de uitvoeringsmodus is geselecteerd als DEBUG. Traditioneel maakten mensen de foutopsporingsmodus mogelijk wanneer een script wordt gebeld met optioneel argument, zoals -d


Antwoord 3, Autoriteit 2%

-U: standaard uitgeschakeld. Wanneer geactiveerd wordt een foutmelding weergegeven bij het gebruik van een niet-geconfigureerde variabele.

-V: standaard inactief. Na activering wordt de oorspronkelijke inhoud van de informatie weergegeven (zonder variabele resolutie) vóór de
informatie wordt uitgevoerd.

-x: inactief standaard. Indien geactiveerd, wordt de opdrachtinhoud weergegeven voordat de opdracht wordt uitgevoerd (na variabele resolutie, daar
is een ++ symbool).

Vergelijk de volgende verschillen:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root
/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root
/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET

Other episodes