{"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\/nl\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash","title":{"rendered":"Zeven onverwachte Bash-variabelen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Doorgaan met de serie aantekeningen over <noindex><a rel=\"nofollow\" href=\"https:\/\/zwischenzugs.com\/2019\/04\/03\/eight-obscure-bash-options-you-might-want-to-know-about\/\">minder bekende<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/zwischenzugs.com\/2019\/02\/27\/bash-startup-explained\/\">functies<\/a><\/noindex> van bash, laat ik je zeven variabelen zien waarvan je misschien niet wist dat ze bestonden.<\/p>\n<h4>1) <code>PROMPT_COMMAND<\/code><\/h4>\n<p>\nMisschien weet je al hoe je de prompt kunt manipuleren om verschillende nuttige informatie weer te geven, maar niet iedereen weet dat je elke keer dat de prompt wordt weergegeven een shell-commando kunt uitvoeren.<\/p>\n<p>In feite gebruiken veel complexe prompt-manipulators deze variabele om commando's uit te voeren voor het verzamelen van informatie die in de prompt wordt weergegeven.<\/p>\n<p>Probeer dit in een nieuwe shell uit te voeren en zie wat er met de sessie gebeurt:<\/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>\nAls je <code>history<\/code> in de console uitvoert, krijg je een lijst met commando's die eerder onder jouw account zijn uitgevoerd.<\/p>\n<pre><code class=\"bash\">$ HISTTIMEFORMAT='I ran this at: %d\/%m\/%y %T '<\/code><\/pre>\n<p>\nZodra deze variabele is ingesteld, worden nieuwe vermeldingen met tijdstempel en commando vastgelegd, zodat de output er zo uitziet:<\/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>\nDe opmaak komt overeen met de symbolen uit <code>man date<\/code>.<\/p>\n<h4>3) <code>CDPATH<\/code><\/h4>\n<p>\nOm tijd te besparen in de opdrachtregel, kun je deze variabele gebruiken om mappen net zo gemakkelijk te wijzigen als je commando's aanroept.<\/p>\n<p>Net als <code>PAD<\/code>, is de variabele <code>CDPATH<\/code> een lijst van paden, gescheiden door dubbele punt. Wanneer je een commando uitvoert <code>cd<\/code> met een relatief pad (dus zonder een slash aan het begin), zoekt de shell standaard in je lokale map naar overeenkomende namen. <code>CDPATH<\/code> Zoek het in de paden die je hebt opgegeven voor de map waarvan je wilt dat deze geopend wordt.<\/p>\n<p>Als je het instelt als: <code>CDPATH<\/code> $ CDPATH=\/:\/lib<\/p>\n<pre><code class=\"bash\">en vervolgens invoert:<\/code><\/pre>\n<p>\n$ cd \/home\n$ cd tmp<\/p>\n<pre><code class=\"bash\">kom je altijd terecht in<\/code><\/pre>\n<p>\nongeacht waar je bent. <code>\/tmp<\/code> Maar wees voorzichtig, want als je de lokale (<\/p>\n<p>) map niet in de lijst opneemt, kun je niet naar een andere map<code>.<\/code>tmp <code>gaan zoals je normaal zou doen:<\/code> $ cd \/home\n$ mkdir tmp\n$ cd tmp\n$ pwd\n\/tmp<\/p>\n<pre><code class=\"bash\">Oeps!<\/code><\/pre>\n<p>\nDit lijkt op de verwarring die ik voelde toen ik me gerealiseerd had dat de lokale map niet was opgenomen in de meer vertrouwde variabele<\/p>\n<p>\u2026 maar je moet dit in de variabele PATH doen, omdat je misleid zou kunnen worden door een valse opdracht die uit een of andere gedownloade code is uitgevoerd. <code>PAD<\/code>Mijn begint als:<\/p>\n<p>CDPATH=.:\/space:\/etc:\/var\/lib:\/usr\/share:\/opt<\/p>\n<pre><code class=\"bash\">SHLVL<\/code><\/pre>\n<p><\/p>\n<h4>4) <code>Heb je ooit nagedacht over het invoeren van<\/code><\/h4>\n<p>\nexit <code>exit<\/code> zal je je uit de huidige bash-shell naar een andere 'bovenliggende' shell brengen of het consolevenster gewoon volledig sluiten?<\/p>\n<p>Deze variabele houdt bij hoe diep je in de bash-shell bent genest. Wanneer je een nieuwe terminal opent, is deze ingesteld op 1:<\/p>\n<pre><code class=\"bash\">$ echo $SHLVL\n1<\/code><\/pre>\n<p>\nAls je vervolgens een ander shell-proces start, neemt het nummer toe:<\/p>\n<pre><code class=\"bash\">$ bash\n$ echo $SHLVL\n2<\/code><\/pre>\n<p>\nDit kan erg nuttig zijn in scripts, waar je niet zeker weet of je moet afsluiten of niet, of om bij te houden waar je bent in de nesting.<\/p>\n<h4>5) <code>LINENO<\/code><\/h4>\n<p>\nOok is de variabele <code>LINENO<\/code>handig voor het analyseren van de huidige status en debugging, die het aantal commando's meld dat in de sessie tot nu toe is uitgevoerd:<\/p>\n<pre><code class=\"bash\">$ bash\n$ echo $LINENO\n1\n$ echo $LINENO\n2<\/code><\/pre>\n<p>\nDit wordt meestal gebruikt bij het debuggen van scripts. Door dergelijke regels in te voegen, zoals <code>echo DEBUG:$LINENO<\/code>, kun je snel bepalen waar je in het script bent (of niet).<\/p>\n<h4>6) <code>REPLY<\/code><\/h4>\n<p>\nAls je, zoals ik, meestal zulke code schrijft:<\/p>\n<pre><code class=\"bash\">$ read input\necho doe iets met $input<\/code><\/pre>\n<p>\nkan het een verrassing zijn dat je helemaal geen variabele hoeft te cre\u00ebren:<\/p>\n<pre><code class=\"bash\">$ read\necho doe iets met $REPLY<\/code><\/pre>\n<p>\nDit doet hetzelfde.<\/p>\n<h4>7) <code>TMOUT<\/code><\/h4>\n<p>\nOm niet te lang op productieservers te blijven voor veiligheidsdoeleinden of per ongeluk iets gevaarlijks in de verkeerde terminal uit te voeren, fungeert het instellen van deze variabele als bescherming.<\/p>\n<p>Als er gedurende het ingestelde aantal seconden niets wordt ingevoerd, wordt de shell afgesloten.<\/p>\n<p>Dat wil zeggen, dit is een alternatief voor <code>sleep 1 &amp;&amp; exit<\/code>:<\/p>\n<pre><code class=\"bash\">$ TMOUT=1<\/code><\/pre>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Zeven onverwachte Bash-variabelen | ProHoster","description":"Voortzettend met de serie opmerkingen over minder bekende","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/sem-neozhidannyh-peremennyh-bash","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/33494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=33494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/33494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=33494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=33494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=33494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}