Синтаксическая ошибка рядом с неожиданным токеном в определении функции bash [закрыто]

Такого механизма нет. Псевдонимы вроде как делают это, но они не работают как переменные. Расширение переменных должно быть помечено $ (что не так уж и много).

Имена хостов, в частности, могут быть псевдонимами несколькими способами:

  1. через /etc/host

    $ip|$target_hostname $hostalias
    
  2. через хост-файл пользовательского уровня, указанный в export HOSTALIASES=$the_hostfile

    $hostalias $ip|$target_hostname
    
  3. через dns

  4. через ваш конфигурационный файл ssh ('~/.ssh/config') (только для ssh):

    Host $hostalias
     HostName $target_hostname
    
3
17.07.2016, 00:17
2 ответа

В bash и других оболочках POSIX, { и } - это не совсем специальные символы, а скорее специальные слова в данном контексте. При создании составной команды, как в определении функции, важно, чтобы они оставались словами, то есть были окружены пробелами.

Последняя команда в однострочном определении функции, подобном этому, должна завершаться точкой с запятой. В противном случае закрывающая скобка } рассматривается как аргумент команды.


В качестве дополнения, если вы хотите, чтобы ваша функция была переносима в другие оболочки POSIX, лучше использовать другой синтаксис функций:

kk () { kate 2>/dev/null 1>&2 & disown; }

Использование function специфично для bash, в то время как форма, приведенная здесь, работает с bash, а также с другими оболочками, такими как sh, Korn и Almquist.

disown также специфичен для bash.

8
27.01.2020, 21:12

Размещение его на нескольких строках позволяет избежать добавления лишних ; и дает один способ написать функцию, даже если он содержит множество команд.

function kk {
    kate 2>/dev/null 1>&2 & disown
}
1
27.01.2020, 21:12

Теги

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