Я, вероятно, записал бы некоторый сценарий для расширения переменных оболочки для генерации выходного файла конфигурации.
Вот некоторые подсказки:
env -i script.sh
запустит скрипт в чистой среде (никакие дополнительные переменные)Таким образом, сценарий должен будет создать новый временный сценарий, который получит переменные и здесь-строку кошки с расширенным Варом. Затем для получения окончательного результата необходимо будет запустить тот временный сгенерированный скрипт через env -i
.
Можно просмотреть источник Гну coreutils на Savannah (или клонировать репозиторий на машине), и в особенности посмотрите на источник и журнал изменений kill
утилита. Нет и никогда не была такая функция.
do {
intmax_t n = (errno = 0, strtoimax (arg, &endp, 10));
…
if (errno == ERANGE || pid != n || arg == endp || *endp)
{
error (0, 0, _("%s: invalid process id"), arg);
status = EXIT_FAILURE;
}
…
} while ((arg = *++argv));
Страница справочника, с которой Вы связываетесь, для kill
команда от набора util-linux. Как Вы видите с даты страницы справочника, эта функция очень стара. Много систем Linux поставлются kill
команда от GNU coreutils или та от procps пакета, и большую часть времени Вы будете видеть свою встроенную оболочку, а не внешняя команда так или иначе. Ни один из них не позволяет Вам передавать пустое название команды как аргумент.
На связанной ноте, в ударе, ksh и zsh, можно передать любую спецификацию задания как аргумент kill
. Спецификации задания запускаются с a %
и может сопровождаться числом задания или частью названия команды того задания.
$ jobs
[3] + Running sleep 9999 &
[2] - Stopped vim foo
[1] Running xterm &
$ kill %sleep
[3] + Terminated sleep 9999 &
$ jobs
[2] + Stopped vim foo
[1] - Running xterm &
sudo kill java
когда он означал делатьsudo killjava
(гдеkilljava
локальный сценарий). Sudo обошел встроенную оболочку, и я пытался выяснить почему/bin/kill
ведший себя по-другому. Я удивлен, но рад, чтобы обнаружить, что GNU не был преступником на этот раз. – kojiro 29.11.2011, 01:23