]>
zdv2.bktei.com Git - BK-2020-03.git/blob - unitproc/bkt-get_path_fork_level
   3 get_path_fork_level
() { 
   4     # Desc: Get fork level from two paths 
   7     # Output: stdout  int  fork level 
  12     # Squeeze multiple slashes and remove trailing slashes 
  13     path1
="$(echo "$path1" | tr -s '/' | sed 's:/*$::' )"; 
  14     path2
="$(echo "$path2" | tr -s '/' | sed 's:/*$::' )"; 
  16     # Check for mixed absolute/relative paths 
  17     if [[ "$path1" =~ ^
/ ]] && [[ "$path2" =~ ^
/ ]]; then 
  20         path1
="$(echo "$path1" | sed -e 's:^/::' )"; 
  21         path2
="$(echo "$path2" | sed -e 's:^/::' )"; 
  22     elif [[ ! "$path1" =~ ^
/ ]] && [[ ! "$path2" =~ ^
/ ]]; then 
  25         declare -p path1 path2 flag_root
; 
  26         echo "FATAL:Mixed relative and absolute paths not supported." 1>&2; 
  30     # Save path as arrays with `/` as element delimiter 
  32     read -ra parts1 
<<< "$path1"; 
  33     read -ra parts2 
<<< "$path2"; 
  35     # Get fork level by counting identical path elements from rootside 
  37     for (( i
=0; i
<${#parts1[@]} && i
<${#parts2[@]}; i
++ )); do 
  38         if [[ "${parts1[i]}" != "${parts2[i]}" ]]; then break; fi; 
  43     #declare -p path1 path2 flag_root parts1 parts2 fork_level; # debug 
  45 }; # Get fork level int from two paths 
  47 printf "========Test 1========\n";  # fork at 0 
  48 p1
="foo"; p2
="bee"; declare -p p1 p2
; 
  49 get_path_fork_level 
"$p1" "$p2"; 
  50 printf "========Test 2========\n";  # fork at 1 
  51 p1
="foo"; p2
="foo/bar"; declare -p p1 p2
; 
  52 get_path_fork_level 
"$p1" "$p2"; 
  53 printf "========Test 3========\n";  # fork at 1 
  54 p1
="foo"; p2
="foo/bar/"; declare -p p1 p2
; 
  55 get_path_fork_level 
"$p1" "$p2"; 
  56 printf "========Test 4========\n";  # fork at 2 
  57 p1
="foo/bar/baz"; p2
="foo/bar"; declare -p p1 p2
; 
  58 get_path_fork_level 
"$p1" "$p2"; 
  59 printf "========Test 5========\n";  # fork at 2 
  60 p1
="/foo/bar/baz"; p2
="/foo/bar"; declare -p p1 p2
; 
  61 get_path_fork_level 
"$p1" "$p2"; 
  62 printf "========Test 6========\n";  # ERROR: No mixed 
  63 p1
="foo/bar/baz"; p2
="/bee/boo/tax"; declare -p p1 p2
; 
  64 get_path_fork_level 
"$p1" "$p2"; 
  65 printf "========Test 7========\n";  # fork at 0 
  66 p1
="/foo/bar/baz"; p2
="/bee/boo/tax"; declare -p p1 p2
; 
  67 get_path_fork_level 
"$p1" "$p2"; 
  68 printf "========Test 8========\n";  # # ERROR: No mixed 
  69 p1
="/foo/bar/baz"; p2
="foo"; declare -p p1 p2
; 
  70 get_path_fork_level 
"$p1" "$p2"; 
  71 printf "========Test 9========\n";  # fork at 3 
  72 p1
="foo///////////bar////////baz//////"; p2
="foo/////////bar/////////baz///bee"; declare -p p1 p2
; 
  73 get_path_fork_level 
"$p1" "$p2";