File: gawk.info, Node: Executable Scripts, Next: Comments, Prev: Long, Up: Running gawk 1.1.4 Executable 'awk' Programs ------------------------------- Once you have learned 'awk', you may want to write self-contained 'awk' scripts, using the '#!' script mechanism. You can do this on many systems.(1) For example, you could update the file 'advice' to look like this: #! /bin/awk -f BEGIN { print "Don't Panic!" } After making this file executable (with the 'chmod' utility), simply type 'advice' at the shell and the system arranges to run 'awk' as if you had typed 'awk -f advice': $ chmod +x advice $ ./advice -| Don't Panic! Self-contained 'awk' scripts are useful when you want to write a program that users can invoke without their having to know that the program is written in 'awk'. Understanding '#!' 'awk' is an "interpreted" language. This means that the 'awk' utility reads your program and then processes your data according to the instructions in your program. (This is different from a "compiled" language such as C, where your program is first compiled into machine code that is executed directly by your system's processor.) The 'awk' utility is thus termed an "interpreter". Many modern languages are interpreted. The line beginning with '#!' lists the full file name of an interpreter to run and a single optional initial command-line argument to pass to that interpreter. The operating system then runs the interpreter with the given argument and the full argument list of the executed program. The first argument in the list is the full file name of the 'awk' program. The rest of the argument list contains either options to 'awk', or data files, or both. (Note that on many systems 'awk' is found in '/usr/bin' instead of in '/bin'.) Some systems limit the length of the interpreter name to 32 characters. Often, this can be dealt with by using a symbolic link. You should not put more than one argument on the '#!' line after the path to 'awk'. It does not work. The operating system treats the rest of the line as a single argument and passes it to 'awk'. Doing this leads to confusing behavior--most likely a usage diagnostic of some sort from 'awk'. Finally, the value of 'ARGV[0]' (*note Built-in Variables::) varies depending upon your operating system. Some systems put 'awk' there, some put the full pathname of 'awk' (such as '/bin/awk'), and some put the name of your script ('advice'). (d.c.) Don't rely on the value of 'ARGV[0]' to provide your script name. ---------- Footnotes ---------- (1) The '#!' mechanism works on GNU/Linux systems, BSD-based systems, and commercial Unix systems.