diff --git a/ShellB3/sbin/re-l b/ShellB3/sbin/re-l
index 17ed5c7d9359f834f0c5cc1e277d383e298c2c4a..9033c9f218131511143fe466d48437a819c498ed 100755
--- a/ShellB3/sbin/re-l
+++ b/ShellB3/sbin/re-l
@@ -51,9 +51,11 @@ def getLine(f,linenumber=1):#returns native string (ascii or unicode)
v=''
return v
+#deterimine if the script is a single-parameter env-based script file
def isRelScript(filepath):
return getLine(filepath,linenumber=1)=='#!/usr/bin/env re-l'
+#extract the interpreter from a scriptfile
def extractRelInterpreter(filepath):
if not isRelScript(filepath):
raise RuntimeError("Not a re-l script!")
@@ -63,11 +65,12 @@ def extractRelInterpreter(filepath):
return l.split(':',1)[1].strip()
raise RuntimeError("Couldn't find re-lative interpreter line (starts with '#re-l:')")
-def relexec(interpreter,scriptfile,*_args):
+#executes a scriptfile using a relative interpreter with given commandline args
+def relexec(scriptrelativeinterpreter,scriptfile,*_args):
args=[None,None]+list(_args)
- LOG('%s %s' % (interpreter,scriptfile))
+ LOG('%s %s' % (scriptrelativeinterpreter,scriptfile))
scriptpath=os.path.dirname(os.path.realpath(scriptfile))
- interpreter=os.path.normpath(os.path.join(scriptpath,interpreter))
+ interpreter=os.path.normpath(os.path.join(scriptpath,scriptrelativeinterpreter))
LOG('%s %s' % (scriptpath,interpreter))
args[0]=interpreter
args[1]=scriptfile
@@ -84,6 +87,17 @@ def relexec(interpreter,scriptfile,*_args):
raise RuntimeError('Exec Failed')
def main():
+ if len(sys.argv)<2 or (len(sys.argv)<3 and not isRelScript(sys.argv[1])):
+ print('re-l relative interpreter proxy script')
+ print('Usage: with re-l anywhere in the path modify any script shebang to be:')
+ if 'darwin' in sys.platform:
+ print('\t#!/usr/bin/env re-l relative/path/to/interpeter')
+ else:
+ print('\t#!/usr/bin/env re-l')
+ print('and then for the second or third line, add the line:')
+ print('\t#re-l:relative/path/to/interpeter')
+ print('where the interpreter is identified relative to the script file itself')
+ sys.exit(0)
if len(sys.argv)==2 or isRelScript(sys.argv[1]):
assert(isRelScript(sys.argv[1]))
relexec(extractRelInterpreter(sys.argv[1]),sys.argv[1],*sys.argv[2:])