mirror of
				https://github.com/TheLocehiliosan/yadm
				synced 2025-06-13 13:03:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			27 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
# yadm exposes all parameters of the command which triggers a hook. Those
 | 
						|
# parameters are exported as the environment variable YADM_HOOK_FULL_COMMAND.
 | 
						|
# Any spaces, tabs, or backslashes in those parameters are escaped with a
 | 
						|
# backslash. The function `parse_full_command()` is a demonstration of parsing
 | 
						|
# those values which may be escaped.
 | 
						|
 | 
						|
function parse_full_command() {
 | 
						|
  local delim=$'\x1e' # ASCII Record Separator
 | 
						|
  local space=$'\x1f' # ASCII Unit Separator
 | 
						|
  local tab=$'\t'     # ASCII TAB
 | 
						|
  local cmd
 | 
						|
  cmd="$YADM_HOOK_FULL_COMMAND"
 | 
						|
  cmd="${cmd//\\ /$space}"      # swap escaped spaces for `1f`
 | 
						|
  cmd="${cmd//\\\\/\\}"         # fix escaped backslashes
 | 
						|
  cmd="${cmd//\\$tab/$tab}"     # fix escaped tabs
 | 
						|
  cmd="${cmd// /$delim}"        # convert space delimiters to `1c`
 | 
						|
  cmd="${cmd//$space/ }"        # convert `1f` back to spaces
 | 
						|
  # parse data into an array
 | 
						|
  IFS=$delim read -r -a full_cmd <<< "$cmd"
 | 
						|
}
 | 
						|
parse_full_command
 | 
						|
for param in "${full_cmd[@]}"; do
 | 
						|
  echo "Parameter: '$param'"
 | 
						|
done
 |