{"id":23357,"date":"2015-01-21T14:01:01","date_gmt":"2015-01-21T12:01:01","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=23357"},"modified":"2015-01-21T14:01:01","modified_gmt":"2015-01-21T12:01:01","slug":"shellfire-bash-sh-dash-function-libraries","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2015\/01\/21\/shellfire-bash-sh-dash-function-libraries\/","title":{"rendered":"shellfire &#8211; namespaced, composable shell (bash, sh and dash) function libraries"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p><a href=\"https:\/\/github.com\/shellfire-dev\/shellfire\">shellfire<\/a> &#8211; namespaced, composable shell (bash, sh and dash) function libraries<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>shellfire &#8211; namespaced, composable shell (bash, sh and dash) function libraries<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"link","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"shellfire - namespaced, composable shell (bash, sh and dash) function libraries #SysAdmin #shell #bash #linux","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,6,18,133,62],"tags":[3098,1960,1586],"keyring_services":[],"class_list":["post-23357","post","type-post","status-publish","format-link","hentry","category-general","category-linux","category-programming","category-sysadmin","category-technology","tag-bash","tag-command-line","tag-deployment","post_format-post-format-link"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":27448,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/03\/22\/pushdpopd-vs-cd\/","url_meta":{"origin":23357,"position":0},"title":"pushd\/popd vs. cd","author":"Leonid Mamchenkov","date":"March 22, 2017","format":false,"excerpt":"My shell of choice and circumstance for most of my Linux life was Bash. \u00a0So, naturally, in my head, shell pretty much equals Bash, and I rarely think or get into situations when this is not true. \u00a0Recently, I was surprised by a script failure, which left me scratching my\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":42765,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/07\/02\/bash-trick-repeat-last-command-until-success\/","url_meta":{"origin":23357,"position":1},"title":"Bash trick: Repeat last command until success","author":"Leonid Mamchenkov","date":"July 2, 2019","format":false,"excerpt":"More and more often I come across a scenario where I need to repeat the shell command until it succeeds. Here are a couple of examples: Reboot a server. Try to remotely login to it via ssh. This fails until the server actually boots up. Keep trying until connected.Start an\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":8473,"url":"https:\/\/mamchenkov.net\/wordpress\/2005\/01\/13\/working-more-productively-with-bash-2x3x\/","url_meta":{"origin":23357,"position":2},"title":"Working more productively with bash 2.x\/3.x","author":"Leonid Mamchenkov","date":"January 13, 2005","format":false,"excerpt":"This article is a must read for anyone who is using Bash shell. There are still probably a thing or two that you didn't know.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28609,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/06\/07\/shell-style-guide-from-google\/","url_meta":{"origin":23357,"position":3},"title":"Shell Style Guide from Google","author":"Leonid Mamchenkov","date":"June 7, 2018","format":false,"excerpt":"For all of you out there writing millions and millions of shell scripts to glue the world together, here's a useful Shell Style Guide from Google.\u00a0 It is very Bash-centric and covers all the usual bits and pieces: comments, formatting, naming conventions, allowed features and recommended best practices. \u00a0","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":26923,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/21\/shell-parameter-expansion-default-values-for-shell-script-parameters\/","url_meta":{"origin":23357,"position":4},"title":"Shell parameter expansion : default values for shell script parameters","author":"Leonid Mamchenkov","date":"November 21, 2016","format":false,"excerpt":"When writing shell scripts, it's often useful to accept some command line parameters. \u00a0It's even more useful to have some defaults for those parameters. \u00a0Until now I've been using if statements to check if the parameter was empty, and if it was, to set it to the default value. \u00a0Something\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27508,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/04\/10\/bashing-up\/","url_meta":{"origin":23357,"position":5},"title":"Bashing up","author":"Leonid Mamchenkov","date":"April 10, 2017","format":false,"excerpt":"Here are a couple of useful Bash resources that came upon my radar recently. First one is Julia Evans' blog post \"Bash scripting quirks & safety tips\". \u00a0It's quite introductory, but is has a few useful tips. \u00a0The one in particular I either didn't know about or completely forgot\u00a0 mentioned\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/23357","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=23357"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/23357\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=23357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=23357"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=23357"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=23357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}