История изменений
Исправление Toxo2, (текущая версия) :
Отдохнул.
То что он задумал
Вообще ничего умного и хитрого не задумывал. Тупо хочу *.c.sh заставить работать с tcc через шебанг.
И таки заставил. Волшебный шебанг: #!/usr/bin/env -S /usr/bin/tcc -run -xc -w
Там что-то удивительное и мне не понятное...
$ F1=tcc_test.abc;echo -e '#!/usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
./tcc_test.abc: error: unrecognized file type
но в то же время:
$ F1=tcc_test.abc;echo -e '#!/usr/bin/env -S /usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
filename [tcc_test.abc] yes
Т.е.:
1. Ключ «интерпретировать как Си» всё-таки есть -xc
2. Этот ключ почему-то не работает в прямом шебанге
3. Мало того - в формате #!/usr/bin/tcc он ведёт себя по-разному в зависимости от места: до -run или после -run: или компилируется, но не выполняется; или выполняется, но без явно указанного типа (и поэтому определяет тип по расширению файла).
4. Но ведь -w работает же! Хоть так, хоть эдак. Кажется наврал. И кажется вообще понял что происходит.
Вопрос: А как отловить execve внутри скрипта? Хотел посмотреть, что там на самом деле ядро делает с шебангом - не могу поймать strace'ом как оно параметры передает на самом деле.
Исправление Toxo2, :
Отдохнул.
То что он задумал
Вообще ничего умного и хитрого не задумывал. Тупо хочу *.c.sh заставить работать с tcc через шебанг.
И таки заставил. Волшебный шебанг: #!/usr/bin/env -S /usr/bin/tcc -run -xc -w
Там что-то удивительное и мне не понятное...
$ F1=tcc_test.abc;echo -e '#!/usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
./tcc_test.abc: error: unrecognized file type
но в то же время:
$ F1=tcc_test.abc;echo -e '#!/usr/bin/env -S /usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
filename [tcc_test.abc] yes
Т.е.:
1. Ключ «интерпретировать как Си» всё-таки есть -xc
2. Этот ключ почему-то не работает в прямом шебанге
3. Мало того - в формате #!/usr/bin/tcc он ведёт себя по-разному в зависимости от места: до -run или после -run: или компилируется, но не выполняется; или выполняется, но без явно указанного типа (и поэтому определяет тип по расширению файла).
4. Но ведь -w работает же! Хоть так, хоть эдак.
Вопрос: А как отловить execve внутри скрипта? Хотел посмотреть, что там на самом деле ядро делает с шебангом - не могу поймать strace'ом как оно параметры передает на самом деле.
Исправление Toxo2, :
Отдохнул.
То что он задумал
Вообще ничего умного и хитрого не задумывал. Тупо хочу *.c.sh заставить работать с tcc через шебанг.
И таки заставил. Волшебный шебанг: #!/usr/bin/env -S /usr/bin/tcc -run -xc -w
Там что-то удивительное и мне не понятное...
$ F1=tcc_test.abc;echo -e '#!/usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
./tcc_test.abc: error: unrecognized file type
но в то же время:
$ F1=tcc_test.abc;echo -e '#!/usr/bin/env -S /usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
filename [tcc_test.abc] yes
Т.е.:
1. Ключ «интерпретировать как Си» всё-таки есть -xc
2. Этот ключ почему-то не работает в прямом шебанге
3. Мало того - в формате #!/usr/bin/tcc он ведёт себя по-разному в зависимости от места: до -run или после -run: или компилируется, но не выполняется; или выполняется, но без явно указанного типа (и поэтому определяет тип по расширению файла).
4. Но ведь -w работает же! Хоть так, хоть эдак.
Вопрос: А как отловить execve внутри скрипта? Хотел посмотреть, что там на самом деле ядро делает с шебангом - не могу поймать strace'ом как оно параметры передает на самом деле.
Исходная версия Toxo2, :
Отдохнул.
То что он задумал
Вообще ничего умного и хитрого не задумывал. Тупо хочу *.c.sh заставить работать с tcc через шебанг.
И таки заставил. Волшебный шебанг: #!/usr/bin/env -S /usr/bin/tcc -run -xc -w
Там что-то удивительное и мне не понятное...
$ F1=tcc_test.abc;echo -e '#!/usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
./tcc_test.abc: error: unrecognized file type
но в то же время:
$ F1=tcc_test.abc;echo -e '#!/usr/bin/env -S /usr/bin/tcc -run -xc -w\nmain() {printf("filename ['$F1'] yes\\n");}' > $F1; chmod +x ./$F1; ./$F1; rm ./$F1
filename [tcc_test.abc] yes
Т.е.:
1. Ключ «интерпретировать как Си» всё-таки есть -xc
2. Этот ключ почему-то не работает в прямом шебанге
3. Мало того - в формате #!/usr/bin/tcc он ведёт себя по-разному в зависимости от места: до -run или после -run: или компилируется, но не выполняется; или выполняется, но без явно указанного типа (и поэтому определяет тип по расширению файла).
Вопрос: А как отловить execve внутри скрипта? Хотел посмотреть, что там на самом деле ядро делает с шебангом - не могу поймать strace'ом как оно параметры передает на самом деле.