lnstools

Linux namespace tools
git clone https://ccx.te2000.cz/git/lnstools
Log | Files | Refs | README

abspaths.awk (1481B)


      1 function die(msg) {
      2 	print msg >>"/dev/stderr"
      3 	exit 1
      4 }
      5 
      6 function s(re, t, str) {
      7 	gsub(re, t, str)
      8 	return str
      9 }
     10 
     11 function get(arg,    m, fmt, exe, exe_path) {
     12 	# print "get(\""arg"\")" >>"/dev/stderr"
     13 	m = match(arg, ":")
     14 	if(!m) {
     15 		die("invalid token in " FILENAME ":" FNR)
     16 	}
     17 	fmt = substr(arg, 1, m-1)
     18 	exe = substr(arg, m+1)
     19 	# k = "prog_" exe
     20 	# print "exe=\""exe"\" -> \""k"\" -> \"" ENVIRON[k] "\"" >>"/dev/stderr"
     21 	exe_path = ENVIRON["prog_" exe]
     22 	if(!length(exe_path)) {
     23 		die("program '"exe"' wan't specified, used by " FILENAME ":" FNR)
     24 	}
     25 	if(fmt == "shebang") {
     26 		return exe_path
     27 	} else if(fmt == "shquote") {
     28 		if(exe_path !~ "[^-+,_./:@0-9A-Za-z]") {
     29 			return exe_path
     30 		}
     31 		return "'" s("'", "'\\''", exe_path) "'"
     32 	} else if(fmt == "elquote") {
     33 		if(exe_path !~ "[^][!%&'()*+,_./:;<=>?@^|0-9A-Za-z-]") {
     34 			return exe_path
     35 		}
     36 		return "\"" s("\"", "\\\"", s("\\", "\\\\", exe_path)) "\""
     37 	} else {
     38 		die("unknown format '"exe"', used by " FILENAME ":" FNR)
     39 	}
     40 }
     41 
     42 function parse_line(line,    m, pre, tok) {
     43 	while(length(line)) {
     44 		m = match(line, /[ -~]*/)
     45 		if(!m) { break }
     46 		pre = substr(line, 1, m-1)
     47 		tok = substr(line, m+1, RLENGTH-2)
     48 		line = substr(line, m+RLENGTH)
     49 		printf("%s%s", pre, get(tok))
     50 	}
     51 	print line
     52 }
     53 { parse_line($0) }
     54 
     55 # BEGIN {
     56 # 	for(k in ENVIRON) {
     57 # 		printf "%s=\"%s\"\n", k, ENVIRON[k]
     58 # 	}
     59 # 	print "--- begin ---"
     60 # }
     61 # END {
     62 # 	print "--- end ---"
     63 # 	for(k in ENVIRON) {
     64 # 		printf "%s=\"%s\"\n", k, ENVIRON[k]
     65 # 	}
     66 # }