От ssh_config(5)
страница справочника:
Host Restricts the following declarations (up to the next Host key‐ word) to be only for those hosts that match one of the patterns given after the keyword. If more than one pattern is provided, they should be separated by whitespace.
...
HostName Specifies the real host name to log into. This can be used to specify nicknames or abbreviations for hosts. If the hostname contains the character sequence ‘%h’, then this will be replaced with the host name specified on the commandline (this is useful for manipulating unqualified names).
Так:
Host XXX1 XXX2 XXX3
HostName %h.YYY.com
Хижина не была предназначена, чтобы быть настолько гибкой. Могут быть некоторые случаи, где наличие второго параметра работает, я думаю, что FreeBSD является одним из них.
таращите глаза и большинство утилит, которые идут с ОС, как, ожидают, будут в /usr/bin/
.
В более старые дни UNIX было распространено иметь /usr/
смонтированный по NFS или некоторым менее дорогим медиа для оставления свободного места локального диска и стоимости на рабочую станцию. /bin/
как предполагалось, имел все, должен был загрузиться в однопользовательском режиме. С тех пор /usr/
не был смонтирован на надежные медиа, /bin/
включенный достаточно утилит для создания этого достаточно дружественным для общего администрирования и поиска и устранения неисправностей.
Это было наследовано в Linux первоначально, но поскольку дисковое пространство больше не является проблемой и в большинстве случаев /usr/
находится в корневой файловой системе, современная тенденция состоит в том, чтобы переместить все в /usr/bin
(по крайней мере, в мире Linux). Таким образом, большинство утилит, установленных дистрибутивом, как ожидают, будет найдено там. Даже самые основные утилиты, как cp
, rm
, ls
и т.д. (хорошо, еще).
Относительно выбора хижины. Традиционно, это - что-то, администраторы или пользователи должны отредактировать согласно их среде. Для всего разработчик знает в системах других людей, интерпретатор мог быть где угодно в файловой системе (например, /usr/local/bin
, /opt/gawk-4.0.1/bin
). Правильно упакованные сценарии (об/мин, deb и т.д.) идут с любым зависимость от пакета дистрибутива (т.е. интерпретатор имеет известное расположение), или сценарий конфигурации, который устанавливает надлежащий hashbang во время установки.
Если Вы не должны передавать аргументы команде затем #!/usr/bin/env gawk
путь состоит в том, чтобы пойти, однако много ядер (включая Linux) только принимают отдельный аргумент к программам хижины.
Иначе можно сделать многоязычную программу, которая является и оберткой оболочки и awk сценарием. Вот один для awk.
#!/bin/sh
true + /; exec gawk -f "$0"; exit; / {}
# awk script starts here
Парсинг Shell:
true + /;
— команда true
(который ничего не делает) с двумя инертными аргументами +
и /
.gawk
. Это могло быть любым отрывком оболочки, который не содержит новые строки и где наклонные черты записаны \/
(оболочка не возражает кроме внутренних кавычек).exec
заменять оболочку простофилей вместо того, чтобы выполнить простофилю как подпроцесс.exit;
— выйдите из оболочки, в случае, если простофиля не была найдена. Что-либо после этого проигнорировано, за исключением того, что это должен быть допустимый синтаксис оболочки в случае, если оболочка пытается проанализировать целую строку прежде, чем начать выполнять его.Парсинг Awk:
true + /REGEX/
— условие. true
неопределенная переменная, таким образом, ее числовое значение 0, не, что она имеет значение.{}
— Если упомянутое условие содержит, ничего не сделайте.Предлагаемое решение Gilles является очень хорошим подходом (наконец-то возникнет репутация голосовать в его посте :)).
В любом случае, насколько я понимаю команду Exec
, это делает выход
сразу после нее ненужного, фактически недоступно, поскольку процесс оболочки заменен awk
.
Кроме того, для того, чтобы позволить скрипту
AWK для доступа к своим параметрам вызова, я бы предложил некоторые изменения в предлагаемом решении:
#!/bin/sh
true + /; exec -a "$0" gawk -f "$0" -- "$@"; / {}
# awk script starts here
- «$ 0»
Позволяет скрипту иметь доступ к его названию вызова, в противном случае он всегда будет получать awk
или Gawk
при доступе к переменной ARGV [0]
. Аналогично, «$ @»
позволяет скрипту получить доступ к оставшимся параметрам в массиве [1 ... N]
, а также -
, предшествующий ему Позволяет скрипту получить - <Что-то>
аргументы без Gawk интерпретации их предназначены для него.
Одно, чтобы помнить / рассмотреть вопрос, это добавить выход (0);
Заявление в конце начинается {...}
Блок awk
Программа скрипта, в противном случае awk
будет угрожать все параметры, переданные скрипту в качестве входных файлов. (Обратите внимание, что это не имеет ничего общего, вообще, с выходом
, которое мы удалили из строки True + ...
, это было недопущенное оператор оболочки, когда этот предложенный выезд находится в коде AWK).
Если установлены более современные coreutils (IIUC 8.30+ ), теперь вы можете использовать
#!/usr/bin/env -S gawk -f
Все параметры будут переданы env как один аргумент, и он их разделит