Que fait la set
commande sans arguments?
Comme je peux le voir, il imprime mes variables d'environnement comme une env
commande mais dans l'ordre alphabétique. Et en plus il imprime différentes informations (variables? Fonctions?) Comme:
__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
quote_readline ()
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
Qu'est-ce que c'est et d'où ça vient?
Je ne trouve pas d'informations sur la set
commande sans arguments. En fait, je n'ai pas du tout de man
page pour set
ma distribution Linux.
Réponses:
set
est un shell intégré qui affiche toutes les variables du shell, non seulement celles de l'environnement, mais aussi les fonctions du shell, ce que vous voyez à la fin de la liste.Les variables sont affichées avec une syntaxe qui permet de les définir lorsque les lignes sont exécutées ou sourcées.
Depuis
bash
la page de manuel :Sur différents obus, le comportement n'est pas nécessairement le même; par exemple,
ksh
set
n'affiche pas les fonctions shell.la source
ksh
, ne stockez pas la définition de fonction dans la variable shell.Parce qu'il
set
a une sortie etwhich set
ne renvoie rien, vous savez qu'il fait partie du shell que vous utilisez, probablement bash.man bash le mentionne plusieurs fois, mais il est plus facile d'y accéder dans la documentation en ligne .
set a la spécification d'appel de:
donc si vous voulez le trouver chez l'homme sur la ligne de commande, vous pouvez rechercher avec
la source
which set
dépend de votre coquille. Au moinszsh
le signalera pour vous. Vous pouvez également lire ceci pour plus de détails.set
est un shell intégré , utilisé pour définir et désactiver les options de shell et les paramètres de position.Sans arguments,
set
affichera toutes les variables shell (à la fois les variables d'environnement et les variables de la session en cours) triées dans les paramètres régionaux actuels .Vous pouvez également lire la documentation bash .
Il y a quelques mises en garde.
set "$var"
attribuera unevar
valeur à$1
. Si vous$var
commencez par-
ou+
, le$var
contenu a été traité comme des séquences d'options de shell. Si elles$var
contiennent des options non valides, la plupart des shells POSIX imprimeront l'erreur.yash
etzsh
danssh
, l'ksh
émulation imprime non seulement l'erreur, mais définit également des options valides. Lorsque vousyash
arrêtez de définir des options sur la première option non valide, vouszsh
les affecterez toutes. Dansyash
:f
etx
présentera dans$-
, tout en:uniquement
f
présent en$-
. Dans les deux cas,f
etx
présentera$-
aveczsh
insh
etksh
émulation.Pour vous protéger de cette situation, vous pouvez passer
--
comme premier argument pour définir le paramètre positionnel même s'il commence par-
ou+
:attribuera
$var
à$1
, quel que soit son contenu.set --
sans aucun autre argument annulera tous les paramètres de position.Si le premier argument est
-
, le comportement n'est pas spécifié. Tous les shells POSIX connus seront désactivésx
et lesv
options (saufposh
), et assigneront quoi que ce soit après-
aux paramètres de position:assignera
-f
à$1
.set -
n'a pas non plus effacé les paramètres de position. Schily osh se comporte aussi comme ça. Heirloom sh ne désélectionne pasv
et lesx
options.La seule exception du shell POSIX est
yash
, qui traite-
comme le premier paramètre positionnel:Schily sh ne fait même rien s'il est
-
présent dans les arguments:la source
set -- $unset
,set - $unset
,set $unset
et ,set "$unset"
et ainsi de suite - il est généralement ces écarts qui obtiennent les gens dans ce genre de problème en premier lieu.$unset
.set $unset
agira exactement de la même manière queset
pour une variable non définie. Maisset "$unset"
ne le fera pas, siunset
est en fait une variable non définie. Aset - $unset
supprime les options-v
et-x
set (en bash).unset_var
. Et notez également qu'ilset "$unset"
est en réalité défini$1
sur vide. Cela concerne l'expansion du shell, pas strictementset
, donc je ne le mentionne pas.posh
etyash
sont différents lorsqu'ils-
apparaissent. Vous pouvez lire ma mise à jour (et n'hésitez pas à l'améliorer).Si vous travaillez à l'intérieur d'un shell bash, tapez
help set
.À la fin de l'aide imprimée, lisez:
Ainsi, un argument no
set
affiche toutes les variables connues du shell.la source
set -x; set
serait utile