Нещодавно я написав патч для версії GNU Coreutils env
для вирішення цієї проблеми:
http://lists.gnu.org/archive/html/coreutils/2017-05/msg00018.html
Якщо у вас є це, ви можете зробити:
env
розділиться :lang:foo:--bar
на поля lang
, foo
і --bar
. Він буде шукати PATH
перекладача lang
, а потім викликати його з аргументами --foo
,bar
плюс шлях до сценарію і аргументи, скрипта.
Також є функція передавати назву сценарію посередині параметрів. Припустимо, ви хочете запустити lang -f <thecriptname> other-arg
, а потім решту аргументів. З цим виправленим словом env
це робиться так:
Найлівіше поле, що еквівалентно {}
, замінюється першим аргументом, що слідує, який під викликом хеш-вибуху є іменем сценарію. Потім цей аргумент видаляється.
Ось, other-arg
може бути щось обробленеlang
сценарієм або, можливо, щось оброблене.
Щоб краще зрозуміти, дивіться численні echo
тести у патчі.
Я вибрав :
символ, оскільки це існуючий роздільник, який використовується в PATH
системах POSIX. Так env
робить PATH
пошук, це зникаюче навряд чи буде використовуватися для програми, ім'я якої містить двокрапку. {}
Маркер походить від find
утиліти, яка використовує його для позначення вставки шляху в -exec
командному рядку.