#!/usr/bin/env ruby if ARGV[0].nil? $stderr.puts "Usage: #{File.basename $0} " exit 1 end if not system "which shellcheck >/dev/null 2>&1" $stderr.puts "Error: program shellcheck does not exist." exit 1 end file = ARGV[0] if not File.exists? file $stderr.puts "Error: file #{file} could not be read." exit 1 end # Make sure we're looking at sh code. mimetype = `file -b -i --keep-going #{file}`.gsub(/\n/,"") if not /.*x-shellscript/i.match(mimetype) $stderr.puts "File #{file} doesn't look like sh code [#{mimetype}]. Ignoring." exit 0 end output = %x{shellcheck --format=gcc #{file} 2>&1} num_lines = output.lines.count counter = 1 # output result in TAP format puts "1..#{num_lines}" output.each_line do |critic| puts "not ok #{counter} #{critic}" counter += 1 end