Difference between revisions of "Bash start up script"
From Wiki at Neela Nurseries
m (formatting correction.) |
m (updating .bashrc test for larger bookmarking bash amendments file.) |
||
Line 7: | Line 7: | ||
#!/bin/bash | #!/bin/bash | ||
+ | # This file test well-suited for Gitbash environment, where Windows desktop is often | ||
+ | # point from which an effective bash instance is started: | ||
if [ -e $HOME/Desktop/dot-bashrc-amendments.sh ]; then | if [ -e $HOME/Desktop/dot-bashrc-amendments.sh ]; then | ||
. $HOME/Desktop/dot-bashrc-amendments.sh | . $HOME/Desktop/dot-bashrc-amendments.sh | ||
+ | fi | ||
+ | |||
+ | # Alternately on most Linux systems bash amendments script may be installed in | ||
+ | # given user's ${HOME} directory, so test this way in such cases: | ||
+ | if [ -e $HOME/dot-bashrc-amendments.sh ]; then | ||
+ | . $HOME/dot-bashrc-amendments.sh | ||
fi | fi | ||
Revision as of 17:14, 27 September 2021
2020-11-02
On most Linux systems with bash
installed, a regular user home directory contains a .bashrc
start up script with some default configurations. Whether this is present or not, the following lines of code may / should be added to .bashrc to source the separate directory bookmarking script. Note if .bashrc already present then the first line of code excerpt 1 should not be added again nor in the middle of .bashrc:
Code excerpt 1:
#!/bin/bash # This file test well-suited for Gitbash environment, where Windows desktop is often # point from which an effective bash instance is started: if [ -e $HOME/Desktop/dot-bashrc-amendments.sh ]; then . $HOME/Desktop/dot-bashrc-amendments.sh fi # Alternately on most Linux systems bash amendments script may be installed in # given user's ${HOME} directory, so test this way in such cases: if [ -e $HOME/dot-bashrc-amendments.sh ]; then . $HOME/dot-bashrc-amendments.sh fi # --- EOF ---
Stash and copy point for recent script versions:
2021-08-04 directory bookmark script
For convenience of copy and paste, script from home with md5sum b2b6a2d2e6160e88b577bd6b06012bea dot-bashrc-amendments.sh
. This version adds two Zephyr project related environment variables:
#!/bin/bash ##---------------------------------------------------------------------- ## ## ## FILE: .bashrc-amendments, also named dot-bashrc-amendments.sh ## ## ## LAST TOUCHED: 2017-12-14 THU ## ## ## DESCRIPTION: short script to amend Debian and Ubuntu and or ## Bourne shell run-time config file, normally named '.bashrc'. ## Adds directory book-marking for up to thirty directories -- or ## file system paths -- making these accessible by means of ## three- and four- character aliases of the form 'gdnn' where ## nn is an integer in the range 1 to 30. ## ## ## HOW TO USE THIS SCRIPT: ## ## To enjoy directory bookmark aliases in this file, in a bash ## command line environment, the user may source this file by ## hand, ## ## $ . dot-bashrc-amendments.sh ## ## or alternately for convenience a given user may amend their ## .login or .bashrc start-up script to include a line which ## does the same sourcing of this file. ## ## ## ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## ## NOTES ON IMPLEMENTATION: ## ## (1) When this script is called with no arguments, it reads a run- ## time config file to determine which group of file-stored, ## bookmarked paths to read into shell variables and to make readily ## accessible via path navigation aliases. If the run-time config ## is not found the shell creates it and populates it with its ## identifier '1' for the first group among 1..9 supported groups ## of path (also referred to as directory) bookmarks. ## ## (2) When this script is called with a first argument in the range ## 1..9, a single character number representation, the script ## writes this number to its run-time config file, and uses this ## number to choose among groups of saved paths written to the ## given user's dot-bashrc-amendments stored path files. If not ## called with a valid bookmarks group id, this script falls back ## to doing the tasks in (1) ## ## ## ## ## TO DO: ## ## [ ] add to this script function which detects and shows ## the script's own aliases, and another function(s) to ## allow user to change aliases, e.g. in event that alias ## conflicts with a locally installed command, ## ## [ ] add to this script the ability to open arbitrary text ## file containing bookmarked paths, and to show it without ## replacing present bookmarks, ## ## [ ] add to this script a function to show bookmarks it ## holds and status of whether each given bookmark exists ## as a valid path on the local file system, ## ## [ ] 2017-12-02 - add parameters sanity check to routine 'read_bookmarks_file', ## ## [ ] 2017-12-02 - add settings file to store latest selected group of bookmarks, ## ## ## ## ## ## TO CONFIRM: ## ## [ ] 2017-12-02 - make sure that variable 'index' is visible in ## the scope of the script which sets the alias 'sp' which ## saves bookmarked paths, ## ## ## ## REFERENCES: ## ## See 'The Linux Documentation Project' at http://tldp.org/ ## ## * http://tldp.org/LDP/abs/html/testconstructs.html . . . [, [[ ]], (( )) - builtin test, ## extended test, arithmetic test in bash context ## ## * http://tldp.org/LDP/abs/html/testbranch.html . . . note shell 'shift' parameters operator ## ## * http://tldp.org/LDP/abs/html/complexfunct.html . . . $1 $2 are first parameters to shell functions ## ## * http://www.grymoire.com/Unix/Sed.html ## ## * https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ ## ## * http://www.linuxjournal.com/content/return-values-bash-functions ## ## ## ## AUTHORS AND MAINTAINERS: ## ## Ted Havelka, ted@cs.pdx.edu ## ## ## ##---------------------------------------------------------------------- ##---------------------------------------------------------------------- ## SECTION - script variables of directory-bookmarker project ##---------------------------------------------------------------------- # --- SCRIPT VARS BEGIN --- GREP=/bin/grep SED=/bin/sed SCRIPT_NAME=${0} # echo "\$SCRIPT_NAME assigned value of \${0} and holds ${SCRIPT_NAME}," SCRIPT_NAME="dot-bash-amendments.sh" ## 2018-07-13 - added by Ted: SCRIPT_NAME_ABBR="dbrca" DIRECTORY_OF_BOOKMARKS_FILES=".bookmarked-paths" FILENAME_FORM_OF_BOOKMARKED_PATHS="bookmarked-paths-nn.txt" FILENAME_OF_BOOKMARKS_RUNTIME_CONFIGURATION="bookmarked-paths.rc" BOOKMARKS_GROUPS_SUPPORTED="1..9" # Directory Book Marker watermark, for sane $PATH amendments: DBM_WATERMARK="${HOME}/path-amended-by-directory-bookmarker" # . . . bookmarks_group_id=1 # Shell variable used in 'sp' alias to save bookmarked paths: index=0 ## 2017-12-02 - How are these variables used? - TMH bash_settings_file="${HOME}/.bash_settings_local" # --- SCRIPT VARS END --- ##---------------------------------------------------------------------- ## SECTION - script functions ##---------------------------------------------------------------------- function show_aliases_in_this_script() { ## 2017-12-02 NEED - Contributor Ted noting that following command will ## show all script lines, including comments and commented out ## commands (which are also comments), which this function's name ## does not indicate. NEED to fix this or rename this function . . . $(GREP) -n alias $0 } function set_aliases() { ##---------------------------------------------------------------------- ## PURPOSE: . . . ##---------------------------------------------------------------------- # echo "setting some shell safety and shortcut aliases . . ." ## Some important shell safe-guarding aliases for Unix and Linux systems: alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # list files in long format starting from a cleared screen: alias lss='clear; ls -lF' # list directories only in long format: alias dls='ls -l | grep "^d"' # run custom Remote UPtime script: alias rup='${HOME}/bin/rup' # . . . alias cvs='cvs -d ${HOME}/cvs -e /usr/bin/vi' # Shell shortcuts to cd to local oft used directories: alias archive='cd ${HOME}/archive; echo "Now at `pwd`" ' alias bin='cd ${HOME}/bin; echo "Now at `pwd`" ' alias notes='cd ${HOME}/notes; echo "Now at `pwd`" ' # 2012-01-25 alias xterm='xterm -bg black -fg white -geometry 108x36' alias x='xterm -bg black -fg white -geometry 115x36 &' # NOTE 2017-12-02 - xlock command generally not available on last # three years' Debian and Ubuntu software package mirrors. Related # command 'xscreensaver-command -lock' is installable . . . alias xlock='/usr/bin/xlock -mode scooter -count 100' alias restore-path-var='. ${HOME}/dot-bashrc-amendments.sh restore-path-variable' } # end function set_aliases() function set_aliases_for_bookmarking() { # echo "setting aliases for bookmarking of paths . . ." alias cb='echo "active directory bookmarks group presently set to group ${bookmarks_group_id},"' #--------------------------------------------------------------------- # STEP: create aliases for saving paths and returning to paths #--------------------------------------------------------------------- # setting of bookmarks 1 through 10: alias sd1='export D1=`pwd`; echo "Set variable D1 to `pwd`" ' alias sd2='export D2=`pwd`; echo "Set variable D2 to `pwd`" ' alias sd3='export D3=`pwd`; echo "Set variable D3 to `pwd`" ' alias sd4='export D4=`pwd`; echo "Set variable D4 to `pwd`" ' alias sd5='export D5=`pwd`; echo "Set variable D5 to `pwd`" ' alias sd6='export D6=`pwd`; echo "Set variable D6 to `pwd`" ' alias sd7='export D7=`pwd`; echo "Set variable D7 to `pwd`" ' alias sd8='export D8=`pwd`; echo "Set variable D8 to `pwd`" ' alias sd9='export D9=`pwd`; echo "Set variable D9 to `pwd`" ' alias sd10='export D10=`pwd`; echo "Set variable D10 to `pwd`" ' # setting of bookmarks 11 through 20: alias sd11='export D11=`pwd`; echo "Set variable D11 to `pwd`" ' alias sd12='export D12=`pwd`; echo "Set variable D12 to `pwd`" ' alias sd13='export D13=`pwd`; echo "Set variable D13 to `pwd`" ' alias sd14='export D14=`pwd`; echo "Set variable D14 to `pwd`" ' alias sd15='export D15=`pwd`; echo "Set variable D15 to `pwd`" ' alias sd16='export D16=`pwd`; echo "Set variable D16 to `pwd`" ' alias sd17='export D17=`pwd`; echo "Set variable D17 to `pwd`" ' alias sd18='export D18=`pwd`; echo "Set variable D18 to `pwd`" ' alias sd19='export D19=`pwd`; echo "Set variable D19 to `pwd`" ' alias sd20='export D20=`pwd`; echo "Set variable D20 to `pwd`" ' # setting of bookmarks 21 through 30: alias sd21='export D21=`pwd`; echo "Set variable D21 to `pwd`" ' alias sd22='export D22=`pwd`; echo "Set variable D22 to `pwd`" ' alias sd23='export D23=`pwd`; echo "Set variable D23 to `pwd`" ' alias sd24='export D24=`pwd`; echo "Set variable D24 to `pwd`" ' alias sd25='export D25=`pwd`; echo "Set variable D25 to `pwd`" ' alias sd26='export D26=`pwd`; echo "Set variable D26 to `pwd`" ' alias sd27='export D27=`pwd`; echo "Set variable D27 to `pwd`" ' alias sd28='export D28=`pwd`; echo "Set variable D28 to `pwd`" ' alias sd29='export D29=`pwd`; echo "Set variable D29 to `pwd`" ' alias sd30='export D30=`pwd`; echo "Set variable D30 to `pwd`" ' # echo "- TEST - setting alias SD31 . . ." alias sd31='echo "Doh, thirty one bookmarks not supported!"' ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## 1024 cd foo; echo $? ## 1025 cd foo; echo $?; if (( $? && 1 )); then echo "dir not found!"; else echo "now at $PWD"; fi ## 1026 cd foo; if (( $? && 1 )); then echo "dir not found!"; else echo "now at $PWD"; fi ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## 2018-07-13 - added by Ted for improved notices when selected dir not found: alias announce_new_dir='if (( $? && 1 )); then echo "- ${SCRIPT_NAME_ABBR} - dir not found!"; else echo "now at $PWD"; fi' # navigation to bookmarked directories 1 through 10: # alias gd1='cd $D1; echo "Now at $D1" ' alias gd1='cd $D1; if (( $? && 1 )); then echo "- ${SCRIPT_NAME_ABBR} - dir not found!"; else echo "now at $PWD"; fi' alias gd2='cd $D2; announce_new_dir' alias gd3='cd $D3; announce_new_dir' alias gd4='cd $D4; announce_new_dir' alias gd5='cd $D5; announce_new_dir' alias gd6='cd $D6; announce_new_dir' alias gd7='cd $D7; announce_new_dir' alias gd8='cd $D8; announce_new_dir' alias gd9='cd $D9; announce_new_dir' alias gd10='cd $D10; announce_new_dir' # navigation to bookmarked directories 11 through 20: alias gd11='cd $D11; announce_new_dir' alias gd12='cd $D12; announce_new_dir' alias gd13='cd $D13; announce_new_dir' alias gd14='cd $D14; announce_new_dir' alias gd15='cd $D15; announce_new_dir' alias gd16='cd $D16; announce_new_dir' alias gd17='cd $D17; announce_new_dir' alias gd18='cd $D18; announce_new_dir' alias gd19='cd $D19; announce_new_dir' alias gd20='cd $D20; announce_new_dir' # navigation to bookmarked directories 21 through 30: alias gd21='cd $D21; announce_new_dir' alias gd22='cd $D22; announce_new_dir' alias gd23='cd $D23; announce_new_dir' alias gd24='cd $D24; announce_new_dir' alias gd25='cd $D25; announce_new_dir' alias gd26='cd $D26; announce_new_dir' alias gd27='cd $D27; if (( $? && 1 )); then echo "- ${SCRIPT_NAME_ABBR} - dir not found!"; else echo "now at $PWD"; fi' alias gd28='cd $D28; announce_new_dir' alias gd29='cd $D29; announce_new_dir' alias gd30='cd $D30; announce_new_dir' ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## 'show paths' alias ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - alias s='\ echo echo "Bookmarked paths in bookmarks group ${bookmarks_group_id} are:" echo \ echo "variable D1 points to $D1";\ echo variable D2 points to $D2; echo variable D3 points to $D3; echo variable D4 points to $D4; echo variable D5 points to $D5; echo variable D6 points to $D6; echo variable D7 points to $D7; echo variable D8 points to $D8; echo variable D9 points to $D9; echo variable D10 points to $D10;\ \ echo " - - - - -";\ \ echo variable D11 points to $D11; echo variable D12 points to $D12; echo variable D13 points to $D13; echo variable D14 points to $D14; echo variable D15 points to $D15; echo variable D16 points to $D16; echo variable D17 points to $D17; echo variable D18 points to $D18; echo variable D19 points to $D19; echo variable D20 points to $D20;\ \ echo " - - - - -";\ \ echo "variable D21 points to $D21";\ echo "variable D22 points to $D22";\ echo "variable D23 points to $D23";\ echo "variable D24 points to $D24";\ echo "variable D25 points to $D25";\ \ echo "variable D26 points to $D26";\ echo "variable D27 points to $D27";\ echo "variable D28 points to $D28";\ echo "variable D29 points to $D29";\ echo "variable D30 points to $D30";\ \ echo; \ echo "These paths from bookmarks group ${bookmarks_group_id}." echo EDITOR is set to: $EDITOR;\ echo "see file dot-bashrc-amendments.sh, typically in home directory of present user,";\ echo "for implementation of directory bookmarks and D1..D30 variables - TMH";\ echo "this shell script written by Ted Havelka and licensed under GNU Public License, 2005 - 2017";\ \ echo' ##------------------------------------------------------------------------------ alias sp='bookmarked_path[0]="zztop"; bookmarked_path[1]=$D1; bookmarked_path[2]=$D2; bookmarked_path[3]=$D3; bookmarked_path[4]=$D4; bookmarked_path[5]=$D5; bookmarked_path[6]=$D6; bookmarked_path[7]=$D7; bookmarked_path[8]=$D8; bookmarked_path[9]=$D9; bookmarked_path[10]=$D10; bookmarked_path[11]=$D11; bookmarked_path[12]=$D12; bookmarked_path[13]=$D13; bookmarked_path[14]=$D14; bookmarked_path[15]=$D15; bookmarked_path[16]=$D16; bookmarked_path[17]=$D17; bookmarked_path[18]=$D18; bookmarked_path[19]=$D19; bookmarked_path[20]=$D20; bookmarked_path[21]=$D21; bookmarked_path[22]=$D22; bookmarked_path[23]=$D23; bookmarked_path[24]=$D24; bookmarked_path[25]=$D25; bookmarked_path[26]=$D26; bookmarked_path[27]=$D27; bookmarked_path[28]=$D28; bookmarked_path[29]=$D29; bookmarked_path[30]=$D30; ## 2017-12-14 THU: echo "about to save bookmarked paths using old script code in alias," echo "in this code \$filename holds '$filename'," echo "to local file $filename saving bookmarked directories:"; echo -n > $filename; for index in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30; do echo "saving bookmarked path $index = ${bookmarked_path[$index]}"; echo ${bookmarked_path[$index]} >> $filename; done' # alias clearpaths='\ # echo "Clearing bookmarked paths in present shell . . ." \ # echo "Note: bookmarked paths in bookmarks group ${bookmarks_group_id} still stored in ${filename}" \ # export D1=""; export D2=""; export D3=""; export D4=""; export D5=""; \ # export D6=""; export D7=""; export D8=""; export D9=""; export D10=""; \ # \ # export D11=""; export D12=""; export D13=""; export D14=""; export D15=""; \ # export D16=""; export D17=""; export D18=""; export D19=""; export D20=""; \ # \ # export D21=""; export D22=""; export D23=""; export D24=""; export D25=""; \ # export D26=""; export D27=""; export D28=""; export D29=""; export D30="";' ## 2017-12-14 - unexpected new behavior observed when backslash characters ## appear in alias defining statement above, removing those: alias clearpaths=' echo "Clearing bookmarked paths in present shell . . ." echo "Note: bookmarked paths in bookmarks group ${bookmarks_group_id} still stored in ${filename}" echo "use \`lp${bookmarks_group_id}\` to reload those bookmarked paths." export D1=""; export D2=""; export D3=""; export D4=""; export D5=""; \ export D6=""; export D7=""; export D8=""; export D9=""; export D10=""; \ \ export D11=""; export D12=""; export D13=""; export D14=""; export D15=""; \ export D16=""; export D17=""; export D18=""; export D19=""; export D20=""; \ \ export D21=""; export D22=""; export D23=""; export D24=""; export D25=""; \ export D26=""; export D27=""; export D28=""; export D29=""; export D30="";' # 2017-12-02 - NEED TO ADDRESS INTENT AND ACTION OF load-paths: # This alias likely doesn't work as intended, to load one set # of bookmarked paths over others . . . - TMH alias load-paths=' \ export D1=${bookmarked_path[1]}; \ export D2=${bookmarked_path[2]}; \ export D3=${bookmarked_path[3]}; \ export D4=${bookmarked_path[4]}; \ export D5=${bookmarked_path[5]}; \ export D6=${bookmarked_path[6]}; \ export D7=${bookmarked_path[7]}; \ export D8=${bookmarked_path[8]}; \ export D9=${bookmarked_path[9]}; \ export D10=${bookmarked_path[10]}; \ \ export D11=${bookmarked_path[11]}; \ export D12=${bookmarked_path[12]}; \ export D13=${bookmarked_path[13]}; \ export D14=${bookmarked_path[14]}; \ export D15=${bookmarked_path[15]}; \ export D16=${bookmarked_path[16]}; \ export D17=${bookmarked_path[17]}; \ export D18=${bookmarked_path[18]}; \ export D19=${bookmarked_path[19]}; \ export D20=${bookmarked_path[20]}; \ \ export D21=${bookmarked_path[21]}; \ export D22=${bookmarked_path[22]}; \ export D23=${bookmarked_path[23]}; \ export D24=${bookmarked_path[24]}; \ export D25=${bookmarked_path[25]}; \ export D26=${bookmarked_path[26]}; \ export D27=${bookmarked_path[27]}; \ export D28=${bookmarked_path[28]}; \ export D29=${bookmarked_path[29]}; \ export D30=${bookmarked_path[30]}; \ echo "Loaded user-saved paths:"; s' # Aliases to load different groups of bookmarked paths: alias lp1='. ${HOME}/dot-bashrc-amendments.sh 1' alias lp2='. ${HOME}/dot-bashrc-amendments.sh 2' alias lp3='. ${HOME}/dot-bashrc-amendments.sh 3' alias lp4='. ${HOME}/dot-bashrc-amendments.sh 4' alias lp5='. ${HOME}/dot-bashrc-amendments.sh 5' alias lp6='. ${HOME}/dot-bashrc-amendments.sh 6' alias lp7='. ${HOME}/dot-bashrc-amendments.sh 7' alias lp8='. ${HOME}/dot-bashrc-amendments.sh 8' alias lp9='. ${HOME}/dot-bashrc-amendments.sh 9' alias lp10='. ${HOME}/dot-bashrc-amendments.sh 10' # 2017-12-14 - Alias 'show non-empty bookmarks' added by Ted: alias sne=' echo echo "Showing non-empty bookmarks in bookmarks group ${bookmarks_group_id}:" echo bookmarked_path[1]=$D1; bookmarked_path[2]=$D2; bookmarked_path[3]=$D3; bookmarked_path[4]=$D4; bookmarked_path[5]=$D5; bookmarked_path[6]=$D6; bookmarked_path[7]=$D7; bookmarked_path[8]=$D8; bookmarked_path[9]=$D9; bookmarked_path[10]=$D10; bookmarked_path[11]=$D11; bookmarked_path[12]=$D12; bookmarked_path[13]=$D13; bookmarked_path[14]=$D14; bookmarked_path[15]=$D15; bookmarked_path[16]=$D16; bookmarked_path[17]=$D17; bookmarked_path[18]=$D18; bookmarked_path[19]=$D19; bookmarked_path[20]=$D20; bookmarked_path[21]=$D21; bookmarked_path[22]=$D22; bookmarked_path[23]=$D23; bookmarked_path[24]=$D24; bookmarked_path[25]=$D25; bookmarked_path[26]=$D26; bookmarked_path[27]=$D27; bookmarked_path[28]=$D28; bookmarked_path[29]=$D29; bookmarked_path[30]=$D30; for index in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30; do if [ -z ${bookmarked_path[$index]} ]; then echo "bookmarked_path[$index] not set," >> /dev/null else echo "\$D${index} set to ${bookmarked_path[$index]}," fi done echo echo "Note: dot-bash-amendments script supports thirty (30) bookmarked paths per bookmarks group." echo' } # end function set_aliases_for_bookmarking() function read_bookmarks_runtime_config() { ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## VARS BEGIN local rname="read_bookmarks_runtime_config" local line="DEFAULT_LINE_TO_BE_READ_FROM_FILE" local bookmarks_group_id="" ## VARS END ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # echo "* * * SCRIPT FUNCTION ${rname}() IMPLEMENTATION UNDERWAY * * *" filename=${HOME}/${DIRECTORY_OF_BOOKMARKS_FILES}/${FILENAME_OF_BOOKMARKS_RUNTIME_CONFIGURATION} if [ -e ${filename} ]; then # read bookmarked paths runtime config file . . . # echo "${rname}: reading directory bookmarks runtime configuration file ${filename}," # cat ${filename} read -r line < ${filename} # echo "line 1 holds: ${line}" else touch ${filename} if [ -e ${filename} ]; then echo "1" >> ${filename} else echo "${SCRIPT_NAME}: - WARNING - unable to open and unable to create runtime config file!" echo "${SCRIPT_NAME}: - will start with bookmarks group set to 1," echo "${SCRIPT_NAME}: - presently bookmarks groups 1 through 9 supported." fi fi echo ${line} ## 2017-12-14 - Commented echo statement and variable for later time when ## this script able to parse several settings from rc file: # echo ${bookmarks_group_id} } # end function read_bookmarks_runtime_config() function write_bookmarks_runtime_config() { ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## 2017-12-14 - Script contributor Ted noting that this function to ## write the bookmarks run-time config file is nearly identical to ## the function to read this same file. Wondering if there's an ## elegant way to combine the two functions? - TMH ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "* * * Script function write_bookmarks_runtime_config() implementation underway * * *" echo "called with bookmarks group identifier '${1}'," filename=${HOME}/${DIRECTORY_OF_BOOKMARKS_FILES}/${FILENAME_OF_BOOKMARKS_RUNTIME_CONFIGURATION} if [ -e ${filename} ]; then # write one value bookmarked paths runtime config file, overwriting all data in this file: echo "${SCRIPT_NAME}: writing directory bookmarks runtime configuration file . . ." echo ${1} > ${filename} else touch ${filename} if [ -e ${filename} ]; then echo ${1} > ${filename} else echo "${SCRIPT_NAME}: - WARNING - unable to open and unable to create runtime config file!" echo "${SCRIPT_NAME}: - will start with bookmarks group set to 1," echo "${SCRIPT_NAME}: - presently bookmarks groups 1 through 9 supported." fi fi } function read_bookmarks_file() { # echo "*** Routine 'read_bookmarks_file' development in progress, ***" # echo "first two arguments from caller are '$1' and '$2'," # echo "variable \${SED} holds '${SED}'," local bookmarked_paths_group=${2} REGEX="[1-9]" # if [[ ${bookmarked_paths_group} =~ [1-5] ]] ; then if [[ ${bookmarked_paths_group} =~ ${REGEX} ]] ; then echo "caller requests valid bookmarks file identified by '${2}', which is in the range ${BOOKMARKS_GROUPS_SUPPORTED}" else echo "- NOTE - caller requests unsupported or unknown bookmarks file identified by '${2}'," echo "- NOTE - defaulting to read bookmarked directories in bookmarks group 1," bookmarked_paths_group=1 fi ## bookmarks_filename=$(echo ${FILENAME_FORM_OF_BOOKMARKED_PATHS} | ${SED} s/nn/0${2}/) bookmarks_filename=$(echo ${FILENAME_FORM_OF_BOOKMARKED_PATHS} | ${SED} s/nn/0${bookmarked_paths_group}/) echo "will read bookmarks from file named ${bookmarks_filename}," ## * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ## NOTE - had trouble getting these export statements to fly . . . ## ## Ahh finally makes sense now 2017 DEC, these export statements ## don't express explicit variable names. That is, bash must see ## a shell script declared array element as something other than a ## valid variable name: - TMH ## * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # export ${bookmarked_path[0]} # export ${bookmarked_path[1]} # export ${bookmarked_path[2]} # export ${bookmarked_path[3]} # export ${bookmarked_path[4]} # export ${bookmarked_path[5]} ##---------------------------------------------------------------------- ## STEP: retrieve saved paths from previous user session ##---------------------------------------------------------------------- # filename="${HOME}/.bash_paths_saved" # filename="${HOME}/bookmarked-paths.txt" . . . commmented 2017-12-02 SAT filename=${HOME}/${DIRECTORY_OF_BOOKMARKS_FILES}/${bookmarks_filename} ## 2017-02-09 THU - To be added, support for storing and perusing multiple directory bookmarks files: filename__list_of_bookmark_files="${HOME}/bookmarked-path-files.txt" # REFERENCE: http://tldp.org/LDP/abs/html/arrays.html declare -a bookmarked_path=() if [ -e ${filename} ]; then bookmarked_path=( $(cat "$filename") ) # Stores contents of this script #+ ($bash_settings_local) in an array. else # echo "$O: no local bash settings file named ${bash_settings_file} found," > /dev/null echo "${SCRIPT_NAME}: - WARNING - direcory bookmarks file named ${filename} not found!" echo "${SCRIPT_NAME}: - not able to read in bookmarked directories from this file," echo "${SCRIPT_NAME}: - but creating to hold paths going forward . . ." touch ${filename} return fi if [ ]; then echo "" echo "- DIAG START -" echo "after reading bookmarks file," echo "\${bookmarked_path[1]} holds '${bookmarked_path[1]}'" echo "\${bookmarked_path[2]} holds '${bookmarked_path[2]}'" echo "\${bookmarked_path[3]} holds '${bookmarked_path[3]}'" echo "- DIAG END -" echo "" fi # 2006-11-27 # Prior to storing user-saved paths in a local file, path # variables were assigned zero-length strings and exported like this: # # export D1="" # # Now these variables are exported the same way but assigned # differently . . . # echo "reading saved paths from file, skipping first place-holder token '${bookmarked_path[0]}' . . ." export D1=${bookmarked_path[1]} export D2=${bookmarked_path[2]} export D3=${bookmarked_path[3]} export D4=${bookmarked_path[4]} export D5=${bookmarked_path[5]} export D6=${bookmarked_path[6]} export D7=${bookmarked_path[7]} export D8=${bookmarked_path[8]} export D9=${bookmarked_path[9]} export D10=${bookmarked_path[10]} export D11=${bookmarked_path[11]} export D12=${bookmarked_path[12]} export D13=${bookmarked_path[13]} export D14=${bookmarked_path[14]} export D15=${bookmarked_path[15]} export D16=${bookmarked_path[16]} export D17=${bookmarked_path[17]} export D18=${bookmarked_path[18]} export D19=${bookmarked_path[19]} export D20=${bookmarked_path[20]} export D21=${bookmarked_path[21]} export D22=${bookmarked_path[22]} export D23=${bookmarked_path[23]} export D24=${bookmarked_path[24]} export D25=${bookmarked_path[25]} export D26=${bookmarked_path[26]} export D27=${bookmarked_path[27]} export D28=${bookmarked_path[28]} export D29=${bookmarked_path[29]} export D30=${bookmarked_path[30]} if [ ]; then echo "" echo "- DIAG START -" echo "after exporting \$D1..\$D30," echo "\$D1 holds '$D1'," echo "\$D2 holds '$D2'," echo "\$D3 holds '$D3'," echo "- DIAG END -" echo "" fi } # end function read_bookmarks_file() function clear_paths_function() { # echo "clear_paths_function: clearing bookmarked paths in current shell, setting \$D1..\$D30 to ''," export D1=""; export D2=""; export D3=""; export D4=""; export D5=""; export D6=""; export D7=""; export D8=""; export D9=""; export D10=""; export D11=""; export D12=""; export D13=""; export D14=""; export D15=""; export D16=""; export D17=""; export D18=""; export D19=""; export D20=""; export D21=""; export D22=""; export D23=""; export D24=""; export D25=""; export D26=""; export D27=""; export D28=""; export D29=""; export D30=""; } function amend_path_variable() { ##---------------------------------------------------------------------- ## PURPOSE: amend user's $PATH environment variable ## ## NEED: to add logic so that for a given shell session, when this ## script called a second or successive time it does not amend the ## $PATH variable with duplicate paths. Need a test . . . - TMH ## ## KEYWORDS: amend PATH ##---------------------------------------------------------------------- string=`echo $PATH | grep $DBM_WATERMARK` if [ -z "$string" ] then path_as_found=${PATH} # Amending the default path variable: # 2021-07-25 . . . PATH="${PATH}":${HOME}/.local/bin PATH="${PATH}":/opt/zephyr-sdk-0.12.4 PATH="${PATH}":/opt/zephyr-sdk-0.12.4/arm-zephyr-eabi PATH="${PATH}":/opt/zephyr-sdk-0.12.4/arm-zephyr-eabi/bin # PATH="/usr/bin:${PATH}" PATH="${PATH}":/sbin PATH="${PATH}":/usr/sbin PATH="${PATH}":/opt/bin PATH="${PATH}":/opt/cross/bin PATH="${PATH}":/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/bin PATH="${PATH}":/opt/nxp/lpcxpresso-8p2p2/lpcxpresso # PATH="${PATH}":/opt/cross/x-tools/arm-unknown-linux-gnueabi/bin # PATH="${PATH}":. PATH="${PATH}":${HOME}/bin PATH="${PATH}":/usr/local/mysql/bin PATH="${PATH}":/usr/lib/xscreensaver PATH="${PATH}":/etc/init.d # 2014-01-24 . . . PATH="${PATH}":/var/opt/sam-ba_cdc_cdc_linux # 2017-12-04 . . . PATH="${PATH}":~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin # 2021-01-31 . . . PATH="${PATH}":/opt/eagle-9.6.2 ## 2018-01-19 - add a pattern to the path to avoid multple path variable ## amendments per shell session: PATH="${PATH}:$DBM_WATERMARK" else echo "\$PATH variable already amended, directory book-marker leaving untouched." fi } function restore_path_variable_to_as_found() { PATH=$path_as_found } ##---------------------------------------------------------------------- ## ## SECTION - main-line code of dot-bash-amendments.sh ## ##---------------------------------------------------------------------- echo "starting," ## Following test fails when script passed an argument, should succeed . . . #if [[ "$ARGC" -eq "1" ]]; then # echo "called with first argument set to '$1'," #fi ## Following test succeeds: if [[ "$#" -eq "1" ]]; then echo "called with first argument set to '$1'," # echo "calling 'read directory bookmarks file' with no arguments . . ." # read_bookmarks_file fi ## Note: single brackets in the following test work, double brackets ## seem to evaulate differently, may be because we're using a shell ## file test . . . bookmarks_dir="${HOME}/${DIRECTORY_OF_BOOKMARKS_FILES}" # echo "- DEV - constructed bookmarked paths directory which holds '$bookmarks_dir'," ## 2017-12-03 - DISCOVERY: hey why does bash 'file exists' test return true when ## + the argument to the file test is a zero-length string? Or undefined variable? ## + Does Mendel Cooper's guide explain this behavior? There was a type ## + just below with 'bookmarks_dir' spelled 'booksmarks_dir' . . . - TMH if [ -e ${bookmarks_dir} ]; then # echo "found directory '${bookmarks_dir}' for bookmarked path files, not creating this directory." echo "found directory '${bookmarks_dir}' for bookmarked path files, not creating this directory." > /dev/null else # echo "creating directory ${bookmarks_dir} . . ." mkdir -pv ${bookmarks_dir} fi ##---------------------------------------------------------------------- ## STEP: set shell aliases . . . moved to two functions of this script ##---------------------------------------------------------------------- set_aliases set_aliases_for_bookmarking # echo "- DIAG BEGIN - calling builtin shell command 'alias' to check aliases just set:" # alias # echo "- DIAG END -" ##---------------------------------------------------------------------- ## STEP - read file holding bookmarked paths ##---------------------------------------------------------------------- # echo "- DIAG BEGIN - calling function (not alias) to clear any directory bookmarks . . ." clear_paths_function # echo "- DIAG END - \$D1 holds '$D1'" ## * https://stackoverflow.com/questions/806906/how-do-i-test-if-a-variable-is-a-number-in-bash re='^[0-9]+$' if [[ $1 =~ $re ]]; then if [ "$#" -gt 0 ]; then bookmarks_group_id=${1} else bookmarks_group_id=1 fi fi ##---------------------------------------------------------------------- ## STEP - check for valid bookmarks group identifier, should be ## an integer value between 1 and 9 for now, 2017 December: ##---------------------------------------------------------------------- bookmarked_paths_group_in_script_main_line=${1} if [[ ${bookmarked_paths_group_in_script_main_line} =~ [1-9] ]] ; then echo "script called with bookmarks group number ${bookmarked_paths_group_in_script_main_line}, in range ${BOOKMARKS_GROUPS_SUPPORTED}" echo "which we support as of 2017 December." write_bookmarks_runtime_config ${bookmarked_paths_group_in_script_main_line} else if [ -z ${bookmarked_paths_group_in_script_main_line} ]; then # echo "setting bookmarks group to default value of 1, first group of bookmarks among ${BOOKMARKS_GROUPS_SUPPORTED}" # bookmarked_paths_group_in_script_main_line=1 echo "script called without bookmarked paths group specified," echo "looking for last-used bookmarks group in dot-bash-amendments run-time config file . . ." bookmarks_group_id=$(read_bookmarks_runtime_config) echo "- DEV - from rc file read bookmarks group id '${bookmarks_group_id}'," else echo "- NOTE - script called with unsupported bookmarks group id," echo "- NOTE - id we got is '${bookmarked_paths_group_in_script_main_line}'," echo "- NOTE - setting bookmarks group to default value of 1, first group of bookmarks among ${BOOKMARKS_GROUPS_SUPPORTED}" bookmarked_paths_group_in_script_main_line=1 fi fi # echo "calling bash amendments function to read run-time config file . . ." # read_bookmarks_runtime_config echo "calling 'read directory bookmarks file' with arguments '$0 ${bookmarks_group_id}' . . ." read_bookmarks_file $0 ${bookmarks_group_id} ## See http://tldp.org/LDP/abs/html/testconstructs.html, example script 7-1: if [ ]; then echo "" echo "- DIAG START in main-line code of script -" echo "back from call to read_bookmarks_file() which exports \$D1..\$D30," echo "\$D1 holds '$D1'," echo "\$D2 holds '$D2'," echo "\$D3 holds '$D3'," echo "- DIAG END in main-line code of script -" echo "" fi ##---------------------------------------------------------------------- ## STEP - amend environment variables ##---------------------------------------------------------------------- # ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## NOTE - path environment variable amendments, mostly for ## work on Debian and Ubuntu Linux based systems ## ## NOTE - when $PATH variable includes present working directory, e.g. ## "." then buildroot 2.x complains and bails during project ## compilation. For smooth buildroot project builds, keep the ## current working directory commented out. Safer to run programs ## in cwd using ./[program_name] syntax anyway . . . - TMH ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Amending the default path variable: if [ "$1" == "restore-path-variable" ]; then echo "- dbm - RESTORING PATH VARIABLE . . ." restore_path_variable_to_as_found else amend_path_variable fi # Concurrent Versions System (CVS) variables: CVSROOT="/home/fulano/cvs" CVS_RSH="" # export EDITOR=/usr/bin/vim . . . commented out 2012-01-25 - TMH export EDITOR=/usr/bin/vi HISTSIZE=1000 HISTFILESIZE=1000 # Variables as shortcuts: archive=${HOME}/archive # Enable tsocks transparent proxy service by setting this environment # variable: ## Note - needed back in 2004, 2005 for to enable proxy server ## settings . . . # export LD_PRELOAD=/lib/libtsocks.so.1.8 # export LD_PRELOAD=/usr/lib/libtsocks.so.1.8 ##---------------------------------------------------------------------- ## 2014-02-19 - added by Ted . . . ## ## STEP - cross compile variables to export ## ## reference http://www.x.org/wiki/CrossCompilingXorg/ ##---------------------------------------------------------------------- export SESSION_MANAGER=lightdm # export CROSS_COMPILE=arm-none-linux-gnueabi- ## 2021-07-21 TUE - Ted commenting out this variable, it is causing `west` zephyr builds to fail: # export CROSS_COMPILE=arm-unknown-linux-gnueabi- export CROSS_COMPILE=arm-zephyr-eabi- export ZEPHYR_SDK_INSTALL_DIR=${HOME}/zephyrproject/zephyr export ZEPHYR_TOOLCHAIN_VARIANT=zephyr # . ~/.bookmarked-paths/set-proxies.sh echo "done." # EOF ( end of file )