If your UNIX 
understands (
44.4
)
 executable files that start with 
#!
, you can use this nice trick to make executable files that display themselves (or part of themselves). I used this to make a program named 
help
 on a system that didn't have any online help. A program like 
cat
 (
25.2
)
 isn't what you want because it'll display the 
#!
 line as well as the message. Watch what happens:
%cat help#!/bin/cat For help with UNIX, call the ACS Consulting Hotline at 555-1212. man command shows the manual for a command ... %chmod +x help%help#!/bin/cat For help with UNIX, call the ACS Consulting Hotline at 555-1212. man command shows the manual for a command ...
The trick is to invoke an interpreter that shows all the lines except the line starting with 
#!
. For example, this file uses 
sed
 (
34.24
)
 and its 
d
 command to ignore ("delete") the first line:
%cat help#!/bin/sed 1d For help with UNIX, call the ACS Consulting Hotline at 555-1212. man command shows the manual for a command ... %helpFor help with UNIX, call the ACS Consulting Hotline at 555-1212. man command shows the manual for a command ...
For longer files, try using 
more +2
 (
25.3
)
; this file will show itself screenful-by-screenful, starting at line 2:
%cat help#!/usr/ucb/more +2 For help with UNIX, call the ACS Consulting Hotline at 555-1212. man command shows the manual for a command ...
You have to give the absolute pathname to the interpreter because the kernel doesn't use your 
search path (
8.7
)
.
 The kernel can pass just one argument to the interpreter.  More than one argument probably won't work.  In the next example, I try to pass two arguments to 
grep
-but the kernel passes the whole string 
-v #
 as just one argument.  That confuses 
grep
, which complains about every character from the space on:
%cat help#!/bin/grep -v # For help with UNIX, call the ACS Consulting Hotline at 555-1212. man command shows the manual for a command ... %helpgrep: illegal option -- grep: illegal option -- ^ grep: illegal option -- # Usage: grep -hblcnsvi pattern file . . .
(Remember, there's no shell interpreting the arguments here. The kernel does it.)
-