¿Qué hace el set
comando sin argumentos?
Como puedo ver, imprime mis variables de entorno al igual que el env
comando pero en orden alfabético. Y además imprime información diferente (¿variables? ¿Funciones?) Como:
__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é es y de dónde viene?
No puedo encontrar información sobre el set
comando sin argumentos. En realidad no tengo man
página para set
mi distribución de Linux en absoluto.
Respuestas:
set
es un shell incorporado que muestra todas las variables de shell, no solo las de entorno, y también las funciones de shell, que es lo que está viendo al final de la lista.Las variables se muestran con una sintaxis que les permite establecerse cuando las líneas se ejecutan o se obtienen.
De
bash
la página del manual :En diferentes capas, el comportamiento no es necesariamente el mismo; por ejemplo,
ksh
set
no muestra funciones de shell.fuente
ksh
que no almacena la definición de función en la variable de shell.Como
set
tiene salida ywhich set
no devuelve nada, sabes que es parte del shell que estás utilizando, probablemente bash.man bash lo menciona muchas veces, pero es más fácil vincularlo en la documentación en línea .
set tiene la especificación de llamada de:
así que si quieres encontrarlo en man en la línea de comando puedes buscar con
fuente
which set
Depende de tu caparazón. Al menoszsh
lo informará por usted. También puede leer esto para más detalles.set
es un intérprete de comandos de shell , utilizado para establecer y desarmar opciones de shell y parámetros posicionales.Sin argumentos,
set
imprimirá todas las variables de shell (tanto las variables de entorno como las variables en la sesión actual) ordenadas en el entorno local actual .También puedes leer la documentación de bash .
Hay algunas advertencias.
set "$var"
asignarávar
valor a$1
. Si$var
comienza con-
o+
, entonces el$var
contenido se trató como secuencias de opciones de shell. Si$var
contiene alguna opción no válida, la mayoría de los shells POSIX imprimirán el error.yash
y ,zsh
en la emulación, no solo se imprime el error, sino que también se configuran opciones válidas. Mientras deja de configurar las opciones en la primera opción no válida, las asignará todas. En :sh
ksh
yash
zsh
yash
f
yx
se presentará en$-
, mientras:solo
f
presente en$-
. En ambos casos,f
yx
se presentará$-
conzsh
insh
yksh
emulación.Para protegerte de esa situación, puedes pasar
--
como primer argumento para establecer el parámetro posicional incluso si comienza con-
o+
:asignará
$var
a$1
, independientemente de su contenido.set --
sin ningún otro argumento se desarmará todos los parámetros posicionales.Si el primer argumento es
-
, el comportamiento no está especificado. Todos los shells POSIX conocidos se desarmaránx
y lasv
opciones (exceptoposh
), y asignarán cualquier cosa después-
a los parámetros posicionales:asignará
-f
a$1
.set -
tampoco desarmó parámetros posicionales. Schily Osh también se comportó así. Heirloom sh no desarmav
yx
opciones.La única excepción de shell POSIX es
yash
, que se trata-
como el primer parámetro posicional:Schily incluso no hace nada si está
-
presente en los argumentos:fuente
set -- $unset
,set - $unset
,set $unset
y,set "$unset"
y así sucesivamente - por lo general aquellas discrepancias que conseguir que la gente en ese tipo de problemas en primer lugar.$unset
.set $unset
actuará exactamente igual queset
para una variable no establecida. Peroset "$unset"
lo hará notar, si enunset
realidad es una variable no establecida. Aset - $unset
elimina-v
y-x
establece las opciones (en bash).unset_var
. Y también tenga en cuenta que enset "$unset"
realidad está configurado$1
como vacío. Se trata de la expansión de shell, no estrictamenteset
, así que no lo menciono.posh
yyash
son diferentes cuando-
aparecen. Puedes leer mi actualización (y no dudes en mejorarla).Si está trabajando dentro de un shell bash, escriba
help set
.Al final de la ayuda impresa, lea:
Entonces, un no argumentos
set
imprime todas las variables conocidas por el shell.fuente
set -x; set
sería útil