mirror of
				https://github.com/TheLocehiliosan/yadm
				synced 2025-06-13 13:03:58 +00:00 
			
		
		
		
	
		
			
	
	
		
			27 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			27 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/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
							 |