{"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\/pt\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash","title":{"rendered":"Sete vari\u00e1veis Bash inesperadas","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Continuando a s\u00e9rie 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 conhecidas<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/zwischenzugs.com\/2019\/02\/27\/bash-startup-explained\/\">fun\u00e7\u00f5es<\/a><\/noindex> do bash, vou mostrar a voc\u00eas sete vari\u00e1veis que voc\u00ea pode n\u00e3o conhecer.<\/p>\n<h4>1) <code>PROMPT_COMMAND<\/code><\/h4>\n<p>\nVoc\u00ea pode j\u00e1 saber como manipular o prompt para mostrar v\u00e1rias informa\u00e7\u00f5es \u00fateis, mas nem todos sabem que a cada vez que o prompt \u00e9 exibido, um comando de shell pode ser executado.<\/p>\n<p>Na verdade, muitos manipuladores de prompt complexos usam essa vari\u00e1vel para executar comandos que coletam informa\u00e7\u00f5es a serem exibidas no prompt.<\/p>\n<p>Tente rodar isso em um novo shell e veja o que acontece com a sess\u00e3o:<\/p>\n<pre><code class=\"bash\">$ PROMPT_COMMAND='echo -n \"escrevendo o prompt em \" &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>\nSe voc\u00ea executar <code>hist\u00f3rico<\/code> no console, voc\u00ea receber\u00e1 uma lista de comandos que foram executados anteriormente em sua conta.<\/p>\n<pre><code class=\"bash\">$ HISTTIMEFORMAT='Eu executei isso em: %d\/%m\/%y %T '<\/code><\/pre>\n<p>\nAssim que essa vari\u00e1vel for definida, novas entradas registrar\u00e3o o hor\u00e1rio junto com o comando, ent\u00e3o a sa\u00edda ficar\u00e1 assim:<\/p>\n<pre>1871  Eu executei isso em: 01\/05\/19 13:38:07 cat \/etc\/resolv.conf\n1872  Eu executei isso em: 01\/05\/19 13:38:19 curl bbc.co.uk\n1873  Eu executei isso em: 01\/05\/19 13:38:41 sudo vi \/etc\/resolv.conf\n1874  Eu executei isso em: 01\/05\/19 13:39:18 curl -vvv bbc.co.uk\n1876  Eu executei isso em: 01\/05\/19 13:39:25 sudo su -<\/pre>\n<p>\nA formata\u00e7\u00e3o corresponde aos caracteres de <code>man date<\/code>.<\/p>\n<h4>3) <code>CDPATH<\/code><\/h4>\n<p>\nPara economizar tempo na linha de comando, voc\u00ea pode usar essa vari\u00e1vel para mudar de diret\u00f3rios t\u00e3o facilmente quanto voc\u00ea chama comandos.<\/p>\n<p>Como <code>caminhos<\/code>, a vari\u00e1vel <code>CDPATH<\/code> \u00e9 uma lista de caminhos, separadas por dois pontos. Quando voc\u00ea executa um comando <code>cd<\/code> com um caminho relativo (ou seja, sem uma barra no in\u00edcio), por padr\u00e3o, o shell procura na sua pasta local os nomes correspondentes. <code>CDPATH<\/code> ele buscar\u00e1 nos caminhos que voc\u00ea deu para o diret\u00f3rio ao qual deseja ir.<\/p>\n<p>Se voc\u00ea definir <code>CDPATH<\/code> dessa forma:<\/p>\n<pre><code class=\"bash\">$ CDPATH=\/:\/lib<\/code><\/pre>\n<p>\ne ent\u00e3o digitar:<\/p>\n<pre><code class=\"bash\">$ cd \/home\n$ cd tmp<\/code><\/pre>\n<p>\nent\u00e3o voc\u00ea sempre chegar\u00e1 a <code>\/tmp<\/code> n\u00e3o importa onde voc\u00ea esteja.<\/p>\n<p>No entanto, cuidado, pois se n\u00e3o incluir no lista a pasta local (<code>.<\/code>) voc\u00ea n\u00e3o conseguir\u00e1 criar qualquer outra pasta <code>tmp<\/code> e acess\u00e1-la geralmente:<\/p>\n<pre><code class=\"bash\">$ cd \/home\n$ mkdir tmp\n$ cd tmp\n$ pwd\n\/tmp<\/code><\/pre>\n<p>\nOps!<\/p>\n<p>Isso parece confuso, como eu me senti ao perceber que a pasta local n\u00e3o foi inclu\u00edda na vari\u00e1vel mais familiar <code>caminhos<\/code>\u2026 mas voc\u00ea deve fazer isso na vari\u00e1vel PATH, porque pode ser enganado ao executar um comando falso a partir de algum c\u00f3digo baixado.<\/p>\n<p>Minha configura\u00e7\u00e3o como ponto de partida est\u00e1:<\/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>\nVoc\u00ea j\u00e1 se perguntou, digitando <code>sigreturn<\/code> te tirar\u00e1 do shell bash atual para outro shell 'pai' ou simplesmente fechar\u00e1 completamente a janela do console?<\/p>\n<p>Essa vari\u00e1vel rastreia qu\u00e3o profundamente voc\u00ea est\u00e1 aninhado no shell bash. Se voc\u00ea abrir um novo terminal, ela \u00e9 definida como 1:<\/p>\n<pre><code class=\"bash\">$ echo $SHLVL\n1<\/code><\/pre>\n<p>\nEnt\u00e3o, se voc\u00ea iniciar outro processo de shell, o n\u00famero aumenta:<\/p>\n<pre><code class=\"bash\">$ bash\n$ echo $SHLVL\n2<\/code><\/pre>\n<p>\nIsso pode ser muito \u00fatil em scripts, onde voc\u00ea n\u00e3o tem certeza se deve sair ou n\u00e3o, ou para rastrear onde voc\u00ea est\u00e1 em rela\u00e7\u00e3o ao aninhamento.<\/p>\n<h4>5) <code>LINENO<\/code><\/h4>\n<p>\nA vari\u00e1vel tamb\u00e9m \u00e9 \u00fatil para analisar o estado atual e para depura\u00e7\u00e3o, <code>LINENO<\/code>, que informa o n\u00famero de comandos executados na sess\u00e3o at\u00e9 o momento:<\/p>\n<pre><code class=\"bash\">$ bash\n$ echo $LINENO\n1\n$ echo $LINENO\n2<\/code><\/pre>\n<p>\nIsso \u00e9 mais comum durante a depura\u00e7\u00e3o de scripts. Inserindo linhas como <code>echo DEBUG:$LINENO<\/code>, voc\u00ea pode rapidamente determinar onde voc\u00ea est\u00e1 no script (ou n\u00e3o).<\/p>\n<h4>6) <code>REPLY<\/code><\/h4>\n<p>\nSe, como eu, voc\u00ea costuma escrever esse tipo de c\u00f3digo:<\/p>\n<pre><code class=\"bash\">$ read input\necho faz algo com $input<\/code><\/pre>\n<p>\npode ser uma surpresa que voc\u00ea n\u00e3o precise se preocupar em criar uma vari\u00e1vel:<\/p>\n<pre><code class=\"bash\">$ read\necho faz algo com $REPLY<\/code><\/pre>\n<p>\nIsso faz a mesma coisa.<\/p>\n<h4>7) <code>TMOUT<\/code><\/h4>\n<p>\nPara n\u00e3o ficar em servidores de produ\u00e7\u00e3o por muito tempo por motivos de seguran\u00e7a ou para n\u00e3o acidentalmente executar algo perigoso em um terminal errado, definir esta vari\u00e1vel age como uma prote\u00e7\u00e3o.<\/p>\n<p>Se nada for inserido durante o n\u00famero de segundos estabelecido, o shell ser\u00e1 encerrado.<\/p>\n<p>Ou seja, essa \u00e9 uma alternativa a <code>sleep 1 &amp;&amp; exit<\/code>:<\/p>\n<pre><code class=\"bash\">$ TMOUT=1<\/code><\/pre>\n<p>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Sete vari\u00e1veis inesperadas do Bash | ProHoster","description":"Continuando a s\u00e9rie de notas sobre vari\u00e1veis menos conhecidas","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/33494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=33494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/33494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=33494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=33494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=33494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}