У меня есть два файла, первый - «топор»:
#!/usr/bin/env zsh
print "Params: $*"
cat $*
И еще один tst:
#! /home/me/ax
A
B
C
Когда я нахожусь в оболочке sh / csh / bash:
> ./tst
./tst: line 2: A: command not found
./tst: line 3: B: command not found
./tst: line 4: C: command not found
Когда я нахожусь в оболочке zsh:
Params: ./tst
#! /IW/users-home/e640846/ax
A
B
C
Есть ли стандартный способ добиться того же поведения, которое я получаю в оболочке zsh в другой оболочке?
точность: - версия bash: 3.00.15- (1) выпуск (x86_64-redhat-linux-gnu)
Спасибо
Интерпретируемый сценарий не может иметь интерпретатора, в свою очередь, другого сценария, поэтому функция exec * () ядра не работает с ENOEXEC.
На этом этапе POSIX требует, чтобы оболочка интерпретировала сам сценарий. SUSv3, «Поиск и выполнение команд», 1.d.i.b второй абзац.
Но zsh не является оболочкой POSIX. Вместо этого zsh смотрит на #!
line и пытается запустить ее, передав ей исходный скрипт в качестве аргумента. Вот что здесь произошло - вам не удалось использовать ax
как переводчик для tst
, обработка содержимого tst
; ты только что прошел tst
как параметр ax
.