Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

A simple framework for sharing Bash profiles, reusable shell libraries, and commands across hosts and teams. Contains builtin libraries for common functions like logging, error handling, and assertions. Built with SRE / DevOps teams in mind.

License

NotificationsYou must be signed in to change notification settings

codeforester/base

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

                Great things are done by a series of small things brought together.                                                                 - Vincent van Gogh

Base is a sharing platform for shell settings, libraries, and light-weight tools. It gives a structured way for Bash users to organize the following across multiple hosts:

  • .bash_profile
  • .bashrc
  • generic Bash libraries and commands
  • company specific Bash libraries, commands, and configuration
  • team specific Bash libraries, commands, and configuration
  • user specific settings (aliases, functions, Bash settings)
  • Bash libraries, commands, and configuration that are shared across teams

It can benefit anyone who engages with Mac/Linux command line to get their work done.

Requirements

Base needs Bash version 4.2 or above.

How can I get set up?

Set up is easy. Essentially, this is what you have to do:

  • Check out Base. The standard location for Base is $HOME/base. In case your git directory is elsewhere, symlink$HOME/git to it or specify the path by settingBASE_HOME in$HOME/.baserc file.
  • Consolidate your individual settings from your current.bash_profile and.bashrc into$USER.sh file. Place this file underbase/user directory and check it in to git.
  • Make a backup of your.bash_profile. Replace this file with a symlink tobase/lib/bash_profile.
  • Make a backup of your.bashrc. Replace this file with a symlink tobase/lib/bashrc.

Log out and log back in or just doexec bash and you are all set!

Here is an example:

cd $HOMEmkdir git && cd gitgit clone git@github.com:codeforester/base.gitcd $HOMEmv .bash_profile .bash_profile.safe && ln -sf $HOME/base/lib/bash_profile .bash_profilemv .bashrc       .bashrc.safe       && ln -sf $HOME/base/lib/bashrc       .bashrccp $USER.sh $HOME/base/usercd $HOME/basegit add user/$USER.shgit commit -m "Adding the initial version of $USER.sh"git push

If you don't want to disturb your.bash_profile and.bashrc, you can still use Base in a less full-fledged manner. See the FAQ section for details.

How does Base work?

In a typical setting,.bashrc sources in$BASE_HOME/base_init.sh which does the following:

  • source inlib/stdlib.sh
  • source incompany/lib/company.sh if it exists
  • source incompany/lib/bashrc if it exists, if the shell is interactive
  • source inuser/$USER.sh if it exists and if the shell is interactive
  • source in team specific bashrc fromteam/<team>/lib/bashrc for each team defined inBASE_TEAM andBASE_SHARED_TEAMS variables, if the shell is interactive. Note thatBASE_TEAM andBASE_SHARED_TEAMS should be ideally set inuser/$USER.sh.
  • source in team specific library fromteam/<team>/lib/<team>.sh for each team defined inBASE_TEAM andBASE_SHARED_TEAMS variables, if they exist
  • update$PATH to include the relevantbin directories
    • $BASE_HOME/bin is always added
    • $BASE_HOME/team/$BASE_TEAM/bin is added if$BASE_TEAM is set inuser/$USER.sh
    • $BASE_HOME/team/$BASE_TEAM/bin is added for each team defined in$BASE_SHARED_TEAMS (space-separated string), set inuser/$USER.sh
    • $BASE_HOME/company/bin is always added

Directory structure

Screenshot of directory structure

Environment variables

  • BASE_HOME
  • BASE_DEBUG
  • BASE_TEAM
  • BASE_SHARED_TEAMS
  • BASE_OS
  • BASE_HOST
  • BASE_SOURCES

Functions exported by base_init.sh

  • import - sources in libraries from any place underBASE_HOME directory
  • base_update - does agit pull on Base git directory; add it touser/<user>.sh to "auto update" Base

FAQ

My git location is not$HOME/base. What should I do?

You can either

  • specify your Base location in$HOME/.baserc, like

    BASE_HOME=/path/to/base

  • symlink$HOME/base to the right place

You need to do this on every host where you want Base.

I want to keep my personal settings private, and not in git. What should I do?

  • write a one-liner inuser/$USER.sh like this:

    source /path/to/your.settings

You would need to manage this file outside of Base.

I do want to use the default settings. What should I do?

Add this to youruser/$USER.sh file:

import lib/base_defaults.sh

I want to make sure I keep my Base repository updated always. How can I do it?

Add this to youruser/$USER.sh file:

base_update

I don't want to reorganize my.bash_profile or.bashrc. Can I still use Base?

Yes, you can, though you will lose the flexibility of keeping your.bash_profile and.bashrc synced across hosts in case you are working with multiple hosts.

To turn on Base upon login, add this to your.bash_profile:

export BASE_HOME=/path/to/basesource "$BASE_HOME/base_init.sh"

after making sure you have the base repo checked out under$BASE_HOME directory.

If you don't want to change your.bash_profile at all, you can still turn Base on and off as needed. First, make sure BASE_HOME is set appropriately, ideally in your.bash_profile.

Run this command to get a shell with Base turned on:

$BASE_HOME/base.sh shell

or$BASE_HOME/base.sh

Debugging

  • You can turn on debug mode by touching$HOME/.base_debug file. You can also do the same by setting environment variableBASE_DEBUG to 1.
  • You can addset -x to$HOME/.baserc file to trace the execution in detail.

About

A simple framework for sharing Bash profiles, reusable shell libraries, and commands across hosts and teams. Contains builtin libraries for common functions like logging, error handling, and assertions. Built with SRE / DevOps teams in mind.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp