home

Code Library

#!/usr/bin/bash
Tmp=/tmp/$$
Tmp0=/tmp/$$_$$
Tmp1=/tmp/$$_$$_$$
Tmp2=/tmp/$$_$$_$$_$$
Tmp3=/tmp/$$_$$_$$_$$_$$
trap 'exit 0' INT HUP QUIT TERM ALRM USR1
trap 'rm -f "$Tmp" "$Tmp0" "$Tmp1" "$Tmp2" "$Tmp3"' EXIT
rm -f "$Tmp $Tmp0 $Tmp1 $Tmp2 $Tmp3"  >/dev/null 2>&1;
#   >/dev/null 2>&1;

# Script to generate a ctags file listing functions from a bash script

if [ -z "$1" ]; then
  echo "Usage: $0 "
  exit 1
fi

bash_script="$1"

if [ ! -f "$bash_script" ]; then
  echo "Error: File '$bash_script' not found."
  exit 1
fi
E="$/;\""
B="/^"
T="\t"
#
# print	Test.java	/^    public void print() {$/;"	m	class:Test
#
# Use grep to find lines defining functions
grep -n -E '^function[[:space:]]*[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*.*{$' "$bash_script" > $Tmp

cat $Tmp | while IFS= read -r line; do
  # Extract the function name
  source_line=$(echo "$line" | gawk -F: '{print $2}')
  function_name=$(echo "$line" | gawk '{print $2}')
  function_name=$(echo "$line" | gawk '{print $2}')
  function_name=$(echo "$function_name" | sed 's/[(]//')
  function_name=$(echo "$function_name" | sed 's/[)]//')
  #echo "Function Name: $function_name"

  # Find the line number of the function definition
  line_number=$(echo "$line" | cut -d':' -f1)

  # Construct the ctags entry
  #echo "::::::::    $function_name" "$bash_script" "$B$line$E" "$line_number;\"" f
  #printf "%s\t%s\t%s\t%s\n" "$function_name" "$bash_script" "$B$source_line$E" "$line_number"
  printf "%s\t%s\t%s\n" "$function_name" "$bash_script" "$B$source_line$E"
done