From 00626fe2703dbfc40f8b488af4d845521bc49ab8 Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Thu, 27 Feb 2014 11:20:31 -0500 Subject: Add quoting, remove backticks, use $PWD * http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03 * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08 Fixes #46. This does not handle quotes around `$@`. That is taken separately in #53. --- bin/lsrc | 106 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 53 insertions(+), 53 deletions(-) (limited to 'bin/lsrc') diff --git a/bin/lsrc b/bin/lsrc index ad16d40..2634e54 100755 --- a/bin/lsrc +++ b/bin/lsrc @@ -1,20 +1,20 @@ #!/bin/sh -: ${RCM_LIB:=`dirname $0`/../share/rcm} -. $RCM_LIB/rcm.sh +: ${RCM_LIB:=$(dirname "$0")/../share/rcm} +. "$RCM_LIB/rcm.sh" pushdir() { DIR_STACK="$DIR_STACK:$PWD/$1" - $DEBUG "cd'ing to $1 from `pwd` with stack $DIR_STACK" - cd $1 + $DEBUG "cd'ing to $1 from $PWD with stack $DIR_STACK" + cd "$1" } popdir() { - current=`echo $DIR_STACK | sed -e 's/.*://g'` - prior=`echo $DIR_STACK | sed -e "s|:$current$||" | sed -e 's/.*://g'` - DIR_STACK=`echo $DIR_STACK | sed -e 's/:[^:]*$//'` - $DEBUG "cd'ing to $prior from `pwd` with stack $DIR_STACK" - cd $prior + current="$(echo "$DIR_STACK" | sed -e 's/.*://g')" + prior="$(echo "$DIR_STACK" | sed -e "s|:$current$||" | sed -e 's/.*://g')" + DIR_STACK="$(echo "$DIR_STACK" | sed -e 's/:[^:]*$//')" + $DEBUG "cd'ing to $prior from $PWD with stack $DIR_STACK" + cd "$prior" } build_path() { @@ -46,15 +46,15 @@ file_join() { } show_dir() { - local dir=$1 - local dest_dir=$2 - local dotfiles_dir=$3 - local dotfiles_subdir=$4 + local dir="$1" + local dest_dir="$2" + local dotfiles_dir="$3" + local dotfiles_subdir="$4" local dotted=$5 local exclude_file_globs="$6" local include_file_globs="$7" local symlink_dirs_file_globs="$8" - local dest_path=`build_path "$dest_dir" "$dir" $dotted` + local dest_path="$(build_path "$dest_dir" "$dir" $dotted)" $DEBUG "show_dir $1 $2 $3 $4 $5 $6 $7 $8" @@ -63,15 +63,15 @@ show_dir() { pushdir "$dir" for f in *; do $DEBUG "handling the file $f" - next_dir=`file_join "$dotfiles_subdir" "$dir"` + next_dir="$(file_join "$dotfiles_subdir" "$dir")" handle_file "$f" "$dest_path" "$dotfiles_dir" "$next_dir" 1 "$exclude_file_globs" "$include_file_globs" "$symlink_dirs_file_globs" done popdir } sigil_for() { - local file=$1 - local symlink_dirs_file_globs=$2 + local file="$1" + local symlink_dirs_file_globs="$2" local copy_always=0 local symlink_dirs=0 @@ -79,7 +79,7 @@ sigil_for() { $DEBUG "copy_file: $copy_file" $DEBUG "file: $file" - case $file in + case "$file" in $copy_file) copy_always=1 break @@ -107,17 +107,17 @@ show_file() { local dotfiles_subdir="$4" local dotted=$5 local symlink_dirs_file_globs="$6" - local dest_file=`build_path "$dest_dir" "$file" $dotted` + local dest_file="$(build_path "$dest_dir" "$file" $dotted)" - if echo $DEST_STACK | grep -vq ":$dest_file"; then + if echo "$DEST_STACK" | grep -vq ":$dest_file"; then DEST_STACK="$DEST_STACK:$dest_file" - src_file=`file_join "$dotfiles_subdir" "$file"` - abs_src_file=`file_join "$dotfiles_dir" "$src_file"` + src_file="$(file_join "$dotfiles_subdir" "$file")" + abs_src_file="$(file_join "$dotfiles_dir" "$src_file")" output="$dest_file:$abs_src_file" if [ $SHOW_SIGILS -eq 1 ]; then - sigil=`sigil_for "$src_file" "$symlink_dirs_file_globs"` + sigil="$(sigil_for "$src_file" "$symlink_dirs_file_globs")" output="$output:$sigil" fi @@ -151,10 +151,10 @@ handle_file() { } is_metafile() { - host_portion=`echo $1 | sed -e 's/host-.*/host-/'` - tag_portion=`echo $1 | sed -e 's/tag-.*/tag-/'` + host_portion="$(echo "$1" | sed -e 's/host-.*/host-/')" + tag_portion="$(echo "$1" | sed -e 's/tag-.*/tag-/')" - [ x$host_portion = 'xhost-' -o x$tag_portion = 'xtag-' -o "x$1" = "xhooks" ] + [ "x$host_portion" = 'xhost-' -o "x$tag_portion" = 'xtag-' -o "x$1" = "xhooks" ] } dotfiles_dir_excludes() { @@ -165,19 +165,19 @@ dotfiles_dir_excludes() { $DEBUG " with excludes: $excludes" for exclude in $excludes; do - if echo $exclude | grep -q :; then - dotfiles_dir_pat=`echo $exclude | sed 's/:.*//'` - file_glob=`echo $exclude | sed 's/.*://'` + if echo "$exclude" | grep -q ':'; then + dotfiles_dir_pat="$(echo "$exclude" | sed 's/:.*//')" + file_glob="$(echo "$exclude" | sed 's/.*://')" - if [ "x$dotfiles_dir_pat" != "x*" ] && is_relative $dotfiles_dir_pat; then - dotfiles_dir_pat=$PWD/$dotfiles_dir_pat + if [ "x$dotfiles_dir_pat" != "x*" ] && is_relative "$dotfiles_dir_pat"; then + dotfiles_dir_pat="$PWD/$dotfiles_dir_pat" fi if [ "x$dotfiles_dir_pat" = "x*" -o "x$dotfiles_dir_pat" = "x$dotfiles_dir" ]; then - echo $file_glob + echo "$file_glob" fi else - echo $exclude + echo "$exclude" fi done } @@ -246,12 +246,12 @@ handle_command_line() { handle_common_flags lsrc $version $verbosity SHOW_SIGILS=$show_sigils - TAGS=${arg_tags:-$TAGS} - DOTFILES_DIRS=${dotfiles_dirs:-$DOTFILES_DIRS} - EXCLUDES=${excludes:-$EXCLUDES} - INCLUDES=${includes:-$INCLUDES} - SYMLINK_DIRS=${symlink_dirs:-$SYMLINK_DIRS} - FILES=$@ + TAGS="${arg_tags:-$TAGS}" + DOTFILES_DIRS="${dotfiles_dirs:-$DOTFILES_DIRS}" + EXCLUDES="${excludes:-$EXCLUDES}" + INCLUDES="${includes:-$INCLUDES}" + SYMLINK_DIRS="${symlink_dirs:-$SYMLINK_DIRS}" + FILES="$@" $DEBUG "TAGS: $TAGS" $DEBUG "DOTFILES_DIRS: $DOTFILES_DIRS" @@ -259,7 +259,7 @@ handle_command_line() { DEST_STACK= -handle_command_line $* +handle_command_line $@ : ${DOTFILES_DIRS:=$DOTFILES_DIRS $DEFAULT_DOTFILES_DIR} $DEBUG "DOTFILES_DIRS: $DOTFILES_DIRS" @@ -276,7 +276,7 @@ for DOTFILES_DIR in $DOTFILES_DIRS; do cd "$relative_root_dir" if is_relative $DOTFILES_DIR; then - DOTFILES_DIR=$PWD/$DOTFILES_DIR + DOTFILES_DIR="$PWD/$DOTFILES_DIR" fi if [ ! -d "$DOTFILES_DIR" ]; then @@ -284,30 +284,30 @@ for DOTFILES_DIR in $DOTFILES_DIRS; do continue fi - exclude_file_globs=`dotfiles_dir_excludes $DOTFILES_DIR "$EXCLUDES"` + exclude_file_globs="$(dotfiles_dir_excludes "$DOTFILES_DIR" "$EXCLUDES")" $DEBUG "exclude_file_globs: $exclude_file_globs" - include_file_globs=`dotfiles_dir_excludes $DOTFILES_DIR "$INCLUDES"` - symlink_dirs_file_globs=`dotfiles_dir_excludes $DOTFILES_DIR "$SYMLINK_DIRS"` + include_file_globs="$(dotfiles_dir_excludes "$DOTFILES_DIR" "$INCLUDES")" + symlink_dirs_file_globs="$(dotfiles_dir_excludes "$DOTFILES_DIR" "$SYMLINK_DIRS")" $DEBUG "symlink_dirs_file_globs: $symlink_dirs_file_globs" cd "$DOTFILES_DIR" DIR_STACK=":$DOTFILES_DIR" for file in ${FILES:-*}; do - if is_metafile $file; then + if is_metafile "$file"; then continue fi - handle_file $file $DEST_DIR $DOTFILES_DIR . 0 "$exclude_file_globs" "$include_file_globs" "$symlink_dirs_file_globs" + handle_file "$file" "$DEST_DIR" "$DOTFILES_DIR" . 0 "$exclude_file_globs" "$include_file_globs" "$symlink_dirs_file_globs" done cd "$DOTFILES_DIR" - host_files=$DOTFILES_DIR/host-$HOSTNAME - if [ -d $host_files ]; then - pushdir `basename $host_files` + host_files="$DOTFILES_DIR/host-$HOSTNAME" + if [ -d "$host_files" ]; then + pushdir "$(basename "$host_files")" for file in ${FILES:-*}; do - handle_file $file $DEST_DIR $host_files . 0 "$exclude_file_globs" "$include_file_globs" + handle_file "$file" "$DEST_DIR" "$host_files" . 0 "$exclude_file_globs" "$include_file_globs" done popdir fi @@ -315,11 +315,11 @@ for DOTFILES_DIR in $DOTFILES_DIRS; do cd "$DOTFILES_DIR" for tag in $TAGS; do - if [ -d tag-$tag ]; then - pushdir `basename tag-$tag` + if [ -d "tag-$tag" ]; then + pushdir "$(basename "tag-$tag")" for file in ${FILES:-*}; do $DEBUG "TAG: $tag, exclude_file_globs: $exclude_file_globs" - handle_file $file $DEST_DIR $DOTFILES_DIR/tag-$tag . 0 "$exclude_file_globs" "$include_file_globs" + handle_file "$file" "$DEST_DIR" "$DOTFILES_DIR/tag-$tag" . 0 "$exclude_file_globs" "$include_file_globs" done popdir fi -- cgit v1.2.3