blob: 38fabf98a4548c2e1d7dbf85ce003b5b58cc9482 (
plain)
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
|
#!/usr/bin/env ruby
#!DESCRIBE: Describe the purpose of an executable
require 'ptools'
def fatal(filename, msg)
$stderr.puts("[ERR] #{filename}: #{msg}")
exit 1
end
filename = ARGV.shift
fatal("???", "File name not given.") if filename.nil?
unless File.exist?(filename)
ENV["PATH"].split(?:).each do |path|
test = File.join(path, filename)
if File.exist?(test)
filename = test
break
end
end
end
basename = File.basename(filename)
fatal(basename, "File does not exist.") unless File.exist?(filename)
fatal(basename, "File is not executable.") unless File.executable?(filename)
fatal(basename, "File is binary.") if File.binary?(filename)
file = File.readlines(filename)
describelines = file.select { |line|
line =~ /\A[#\/]*!DESCRIBE:/
}.map { |line|
line.split("!DESCRIBE:")[1].strip
}
fatal(basename, "File is indescribable!") if describelines.empty?
puts "#{basename}: #{describelines[0]}"
describelines[1..-1].each { |line|
puts "#{" " * (basename.length + 2)}#{line}"
}
#!DESCRIBE: Usage: describe FILE
|