-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbashfunctionextractor
More file actions
executable file
·48 lines (42 loc) · 1.58 KB
/
bashfunctionextractor
File metadata and controls
executable file
·48 lines (42 loc) · 1.58 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/bash
# Function to extract and write a single bash function to its own file
extract_and_write_function() {
local input_file="$1"
local function_name
local function_body
local in_function=0
rm -f ./output
while IFS= read -r line; do
# Check for the start of a function definition
if [[ "$line" =~ ^[[:space:]]*function[[:space:]]*([a-zA-Z_][a-zA-Z0-9_.]*)[[:space:]]*\(\)[[:space:]]*\{ ]]; then
function_name="${BASH_REMATCH[1]}"
signature="$line"
in_function=1
function_body=""
continue
fi
# If inside a function, append the line to the body
if [[ $in_function -eq 1 ]]; then
function_body+="$line"$'\n'
fi
# Check for the end of the function definition
if [[ $in_function -eq 1 ]] && [[ "$line" == "}" ]]; then
in_function=0
# Remove the opening and closing curly braces from the body
function_body=$(echo "$function_body" | sed -e '1d' -e '$d')
# Write the function to a file named after the function
echo "$signature" >> "./output"
echo "$signature" > "./files/$function_name.bash"
echo "$function_body" >> "./files/$function_name.bash"
#echo "Function '$function_name' written to './files/$function_name.bash'"
./codeTemplate "./files/$function_name.bash" "$function_name.bash" > "./files/$function_name.html"
fi
done < "$input_file"
}
# Example usage:
# Assuming your file of functions is named 'my_functions.sh'
#cp xx /tmp/xx
#cp bash.library /tmp/bash.library
#rm -rf ./files
#mkdir -p ./files
extract_and_write_function bash.library