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.
Get Exploring Expect now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.