Что делает `Exec" $ @ "" делать?

gcc делает это как часть своей трехфазной сборки: см. Обсуждение компиляторов фазы 2 и фазы 3 в Установка GCC: Сборка

2
05.09.2018, 15:14
2 ответа

"$@" в Bourne -подобно оболочкам, в контекстах списка расширяется до всех позиционных параметров как отдельных аргументов.

В скрипте изначально позиционные параметры являются аргументами, которые получил сам скрипт.

exec— запустить команду в том же процессе, что и оболочка. Это последняя команда, которую выполнит сценарий, потому что после этого процесс будет выполнять другую команду, а не оболочку.

Итак, если ваш скрипт

#! /bin/sh -
exec "$@"

И вы вызываете свой скрипт, используя командную строку оболочки, например:

/path/to/your-script 'echo' "some  test" 'x y'

Он вызовет execс echo, some testи x yв качестве аргументов, которые будут выполнятьecho(в большинстве shреализаций, /bin/echoв отличие от echoвстроенной оболочки )в том же процессе, который ранее запускал оболочку, интерпретирующую ваш скрипт с some testи x yв качестве аргументов.

5
27.01.2020, 21:51

Бит "$@"будет расширяться до списка позиционных параметров (обычно это аргументы командной строки ), заключенные в кавычки, чтобы избежать разделения слов и генерации имени файла ("подстановки" ).

execзаменит текущий процесс процессом, полученным в результате выполнения его аргумента.

Короче говоря, exec "$@"запустит команду, заданную параметрами командной строки, таким образом, что текущий процесс будет заменен ею (, если execвообще сможет выполнить команду ).

9
27.01.2020, 21:51

Теги

Похожие вопросы