{"id":33494,"date":"2019-10-31T21:52:52","date_gmt":"2019-10-31T18:52:52","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sem-neozhidannyh-peremennyh-bash\/"},"modified":"2019-10-31T21:52:52","modified_gmt":"2019-10-31T18:52:52","slug":"sem-neozhidannyh-peremennyh-bash","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash","title":{"rendered":"Siete variables inesperadas de Bash.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Continuando la serie de notas sobre <noindex><a rel=\"nofollow\" href=\"https:\/\/zwischenzugs.com\/2019\/04\/03\/eight-obscure-bash-options-you-might-want-to-know-about\/\">menos conocidos<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/zwischenzugs.com\/2019\/02\/27\/bash-startup-explained\/\">funciones<\/a><\/noindex> bash, les mostrar\u00e9 siete variables que tal vez no conoc\u00edan.<\/p>\n<h4>1) <code>PROMPT_COMMAND<\/code><\/h4>\n<p>\nPuede que ya sepas c\u00f3mo manipular el prompt para mostrar informaci\u00f3n \u00fatil, pero no todos saben que cada vez que se muestra el prompt se puede ejecutar un comando de shell.<\/p>\n<p>De hecho, muchos manipuladores complejos del prompt utilizan esta variable para ejecutar comandos que recopilan informaci\u00f3n que se muestra en el prompt.<\/p>\n<p>Intenta ejecutar esto en un nuevo shell y ver\u00e1s qu\u00e9 sucede con la sesi\u00f3n:<\/p>\n<pre><code class=\"bash\">$ PROMPT_COMMAND='echo -n \"writing the prompt at \" &amp;&amp; date'<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>2) <code>HISTTIMEFORMAT<\/code><\/h4>\n<p>\nSi ejecutas <code>history<\/code> en la consola, obtendr\u00e1s una lista de los comandos previamente ejecutados bajo tu cuenta.<\/p>\n<pre><code class=\"bash\">$ HISTTIMEFORMAT='I ran this at: %d\/%m\/%y %T '<\/code><\/pre>\n<p>\nUna vez que esta variable est\u00e1 configurada, nuevas entradas registran la hora junto con el comando, por lo que la salida se ver\u00e1 as\u00ed:<\/p>\n<pre>1871  I ran this at: 01\/05\/19 13:38:07 cat \/etc\/resolv.conf\n1872  I ran this at: 01\/05\/19 13:38:19 curl bbc.co.uk\n1873  I ran this at: 01\/05\/19 13:38:41 sudo vi \/etc\/resolv.conf\n1874  I ran this at: 01\/05\/19 13:39:18 curl -vvv bbc.co.uk\n1876  I ran this at: 01\/05\/19 13:39:25 sudo su -<\/pre>\n<p>\nEl formato corresponde a los s\u00edmbolos de <code>man date<\/code>.<\/p>\n<h4>3) <code>CDPATH<\/code><\/h4>\n<p>\nPara ahorrar tiempo en la l\u00ednea de comandos, puedes usar esta variable para cambiar de directorios tan f\u00e1cilmente como llamas a comandos.<\/p>\n<p>Al igual que <code>PATH<\/code>, la variable <code>CDPATH<\/code> es una lista de rutas separadas por dos puntos. Cuando ejecutas un comando <code>cd<\/code> con una ruta relativa (es decir, sin una barra al principio), por defecto el shell busca en tu carpeta local los nombres correspondientes. <code>CDPATH<\/code> buscar\u00e1 en las rutas que has dado para el directorio al que deseas acceder.<\/p>\n<p>Si configuraste <code>CDPATH<\/code> de esta manera:<\/p>\n<pre><code class=\"bash\">$ CDPATH=\/:\/lib<\/code><\/pre>\n<p>\ny luego escribes:<\/p>\n<pre><code class=\"bash\">$ cd \/home\n$ cd tmp<\/code><\/pre>\n<p>\nsiempre llegar\u00e1s a <code>\/tmp<\/code> sin importar d\u00f3nde est\u00e9s.<\/p>\n<p>Sin embargo, ten cuidado, porque si no incluyes en la lista la carpeta local (<code>.<\/code>) no podr\u00e1s crear ninguna otra carpeta <code>tmp<\/code> y acceder a ella como de costumbre:<\/p>\n<pre><code class=\"bash\">$ cd \/home\n$ mkdir tmp\n$ cd tmp\n$ pwd\n\/tmp<\/code><\/pre>\n<p>\n\u00a1Ups!<\/p>\n<p>Esto parece una confusi\u00f3n que sent\u00ed cuando me di cuenta de que la carpeta local no estaba incluida en la variable m\u00e1s familiar <code>PATH<\/code>\u2026 pero debes hacerlo en la variable PATH, porque podr\u00edas ser enga\u00f1ado al ejecutar un comando falso de alg\u00fan c\u00f3digo descargado.<\/p>\n<p>Mi variable establece el punto de partida:<\/p>\n<pre><code class=\"bash\">CDPATH=.:\/space:\/etc:\/var\/lib:\/usr\/share:\/opt<\/code><\/pre>\n<p><\/p>\n<h4>4) <code>SHLVL<\/code><\/h4>\n<p>\n\u00bfAlguna vez te has preguntado, al ingresar <code>exit<\/code> \u00bfLo sacar\u00e1 de la actual shell bash a otra shell 'padre' o simplemente cerrar\u00e1 completamente la ventana del terminal?<\/p>\n<p>Esta variable rastrea cu\u00e1n profundo est\u00e1s anidado en la shell bash. Si creas un nuevo terminal, se establece en 1:<\/p>\n<pre><code class=\"bash\">$ echo $SHLVL\n1<\/code><\/pre>\n<p>\nLuego, si inicias otro proceso de shell, el n\u00famero aumenta:<\/p>\n<pre><code class=\"bash\">$ bash\n$ echo $SHLVL\n2<\/code><\/pre>\n<p>\nEsto puede ser muy \u00fatil en scripts donde no est\u00e1s seguro si debes salir o no, o para rastrear d\u00f3nde te encuentras en la anidaci\u00f3n.<\/p>\n<h4>5) <code>LINENO<\/code><\/h4>\n<p>\nTambi\u00e9n es \u00fatil para analizar el estado actual y la depuraci\u00f3n la variable <code>LINENO<\/code>, que indica la cantidad de comandos ejecutados en la sesi\u00f3n hasta ahora:<\/p>\n<pre><code class=\"bash\">$ bash\n$ echo $LINENO\n1\n$ echo $LINENO\n2<\/code><\/pre>\n<p>\nEsto se utiliza con mayor frecuencia al depurar scripts. Insertando l\u00edneas como <code>echo DEBUG:$LINENO<\/code>, puedes determinar r\u00e1pidamente d\u00f3nde te encuentras en el script (o no).<\/p>\n<h4>6) <code>REPLY<\/code><\/h4>\n<p>\nSi, como yo, sueles escribir c\u00f3digo como este:<\/p>\n<pre><code class=\"bash\">$ read input\necho hacer algo con $input<\/code><\/pre>\n<p>\npuede ser una sorpresa que no necesitas preocuparte por crear una variable en absoluto:<\/p>\n<pre><code class=\"bash\">$ read\necho hacer algo con $REPLY<\/code><\/pre>\n<p>\nHace lo mismo.<\/p>\n<h4>7) <code>TMOUT<\/code><\/h4>\n<p>\nPara no permanecer demasiado tiempo en servidores de producci\u00f3n por razones de seguridad o no ejecutar accidentalmente algo peligroso en el terminal incorrecto, establecer esta variable act\u00faa como una protecci\u00f3n.<\/p>\n<p>Si no se introduce nada durante un n\u00famero establecido de segundos, se sale de la shell.<\/p>\n<p>Es decir, es una alternativa a <code>sleep 1 &amp;&amp; exit<\/code>:<\/p>\n<pre><code class=\"bash\">$ TMOUT=1<\/code><\/pre>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/451492\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0441\u0435\u0440\u0438\u044e \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e \u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 bash, \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0430\u043c \u0441\u0435\u043c\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u043d\u0435 \u0437\u043d\u0430\u0442\u044c. 1) PROMPT_COMMAND \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0443\u0436\u0435 \u0432 \u043a\u0443\u0440\u0441\u0435, \u043a\u0430\u043a \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435\u043c prompt, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u043e\u043a\u0430\u0437\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0442\u043e\u0440\u044b prompt [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33494","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0441\u0435\u0440\u0438\u044e \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e \u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0435\u043c\u044c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Bash | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0441\u0435\u0440\u0438\u044e \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e \u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:52:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:52:52+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Siete variables Bash inesperadas | ProHoster","description":"Continuando con la serie de notas sobre variables menos conocidas","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0435\u043c\u044c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Bash | ProHoster","og:description":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0441\u0435\u0440\u0438\u044e \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e \u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:52:52+00:00","article:modified_time":"2019-10-31T18:52:52+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33494","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 15:30:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:39:23","updated":"2026-01-21 15:30:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/33494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=33494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/33494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=33494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=33494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=33494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}