Rewriting The #! Line
If you need to move your scripts to another system which has Expect installed in a different place, you may need to rewrite the first line of many scripts. For instance, the Expect installation does this when installing the sample scripts that accompany it. The installation accomplishes this by running a script called fixline1 on each Expect script. Here is fixline1:
#!/usr/local/bin/expect — regsub "^#!(.*/)*(.*)" [gets stdin] "#!$argv/\\2" line1 puts -nonewline "$line1\n[read stdin]"
The script works by reading the first line and looking for #! followed by a slash. This is replaced with the new path and then the remainder of the file is rewritten as well. This rewrites scripts that have first lines such as the following:
#!expect #!expect — #!../expectk — #!/usr/local/bin/expectk anyoldargs
The script is called (usually from a Makefile) as follows:
expect fixline1 newpath < oldscript > newscript
where oldscript is the original script and newscript is the new version with the path set to newpath. This script can be used to rewrite any file that uses the #! in the first line. Of course, the literal "expect" is needed only before fixline1 has rewritten its own first line.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access