Intereting Posts
Ошибка rsync: необъяснимая ошибка (код 255) в io.c (226) Использовать X SSH-ключ при входе в Y удаленному пользователю? Linux Mint не обнаруживает карту microSD backspace в режиме вставки, не стирая символы Какие значения return / exit можно использовать в bash-функциях / скриптах? Стандартный рабочий процесс для оцифровки журналов или книг с использованием OCR при минимизации размера файла? Случайная удаленная папка блокировки Передача escape-последовательностей в оболочки в пределах ansi-term в Emacs расхождение в выводах «swapon -show» и «df -h» для раздела swapon Создание файла DMG на Gentoo Как быстро добраться до верхней или нижней части очень длинного сценария? Как получить видеорежим, заданный hwinfo, когда он не работает? И как установить разрешение для входа? Как запустить хром внутри chroot? Ярлык для выбранного текста Google Почему я не могу использовать DVD-привод для установки в KVM?

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

Прости меня; Я довольно новичок в файлах bash и т. П. Вот копия моего .bashrc:

alias k='kate 2>/dev/null 1>&2 & disown' function kk {kate 2>/dev/null 1>&2 & disown} 

Псевдоним в первой строке отлично работает, но вторая строка бросает:

 bash: /home/mozershmozer/.bashrc: line 3: syntax error near unexpected token `{kate' bash: /home/mozershmozer/.bashrc: line 3: `function kk {kate 2>/dev/null >1>&2 & disown}' 

Я запускаю Linux Mint 17.3, и это единственные две строки в моем файле .bashrc. Практически все остальное на моей машине – ваниль по умолчанию. В конечном итоге я хочу поиграть с функцией, чтобы заставить ее делать некоторые конкретные вещи, но сразу же ударил стену синтаксиса. Точная функция, которую я привел здесь, – всего лишь своего рода экспериментальный манекен, чтобы я мог лучше понять синтаксис.

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

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


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

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

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

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

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

 function kk { kate 2>/dev/null 1>&2 & disown }