2014-12-14 4 views
0

У меня есть сценарий на моем компьютере с именем test.py. То, что я делал до сих пор, чтобы запустить программу, это тип python test.py в терминал.Запуск скрипта по строке shebang

Есть ли команда в операционных системах Unix, которая не требует от пользователя указания программы, которую он использует для запуска скрипта, но вместо этого будет запускать скрипт, используя ту программу, на которую указывает линия shebang?

Например, я ищу команду, которая позволит мне ввести some_command test.txt в терминал, и если первая линия test.txt является #!/usr/bin/python, сценарий будет интерпретироваться как питон скрипт, но если первая строка #!/path/to/javascript/interpreter, сценарий будет интерпретироваться как javascript.

+0

Можете ли вы поделиться своим прецедентом, зачем вам это нужно? – SMA

ответ

1

Это поведение по умолчанию терминала (или просто выполнения файла в целом) все, что вам нужно сделать, это сделать скрипт исполняемым с

chmod u+x test.txt 

Тогда (при условии, text.txt находится в текущем каталоге) каждый время, вводимое

./text.txt 

Он будет смотреть на ш-бэнг линии и использовать программу там запустить text.txt.

+0

Терминал вообще не задействован. Даже оболочка просто передает файл в ядро ​​через один из системных вызовов 'exec *'. – tripleee

+1

@ tripleee Я знаю это, но поскольку OP не знает о линиях sh-bang, я сделал решение, что лучше описать его с точки зрения того, что они будут наблюдать, а не от того, как он работает. Если бы OP продемонстрировал больше опыта работы с unix, я бы описал его с точки зрения '' execve'' для наиболее точного ответа. – randomusername

0

Если вы действительно хотите дублировать встроенную функциональность, попробуйте это.

#!/bin/sh 
x=$1 
shift 
p=$(sed -n 's/^#!//p;q' "$x" | grep .) && exec $p "[email protected]" 
exec "$x" "[email protected]" 
echo "$0: $x: No can do" >&2 

Может назвать это start, чтобы напомнить вам о так же полезной команды Windows.