вызывание Функции Bash из определения псевдонима

Вот более полный $HOME/.config/user-dirs.dirs для любого, который не имеет файла вообще:

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/"
XDG_PUBLICSHARE_DIR="$HOME/"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
5
09.12.2014, 18:07
1 ответ

Проблема заключается в том, что ваше определение псевдонима (одно из ISEREMEMOVELETUP ) находится в подпункте:

Alias ​​Analyzer = 'SURTUPISE; «ISEADDTOREMOVECALL» анализатор «`

для ISEADDTOREMOVECALL «Анализатор» Запускается подставка, и определение псевдонима влияет только на этот подстав, который ушел, как только эта строка будет выполнена.

Это может быть решено изменением

alias analyzer='setupise;'`iseAddToRemoveCall "analyzer"`

на

alias analyzer='setupise;$(iseAddToRemoveCall analyzer)'

и замена ECHO «ISEREMEMOVETUPETUP; $ 1» ISEADDTOREMOVECALL ) с Echo «Unalias $ 1; $ 1 ". Таким образом, Уналиас станет частью расширения псевдонима и будет выполнена в правильной оболочке.

Альтернатива

Все это кажется совсем странным для меня. Разве это не значит больше смысла начать подпункл (тип bash ), запустите настройку, запустите команды и оставьте подпункл ( ^ d ) при завершении?

Дополнительные замечания

Человек 1 Bash :

Первое слово замены текста проверяется на псевдонимы, но слово, которое идентично расширению псевдонима, не расширяется во второй раз. Это означает, что человек может быть псевдоним Ls на Ls -f, например, и Bash не пытается рекурсивно расширить текст замены.

Так что вам не нужно Unalias P1 в определении псевдонима перед вызовом PI .

Может быть, лучше использовать (ассоциативный) массив с командами, которые вы хотите Уналиас и просто работать с массивом.

Это тоже важно, потому что вы имеете именно то, что вы не должны делать:

Bash всегда читает хотя бы одну полную линию ввода перед выполнением любого команд на этой линии. Псевдонимы расширяются, когда команда читается, а не при выполнении. Следовательно, определение псевдонима появляется на том же Строка как другая команда не вступает в силу до тех пор, пока не будет читаться следующая строка ввода. Команды после определения псевдонима на этой линии не пострадавших от нового псевдонима. Такое поведение также является проблемой, когда выполнены функции. Псевдонимы расширяются при чтении определения функции, а не когда Функция выполняется, поскольку определение функции сама по себе является составной командой. Как следствие, псевдонимы, определенные в функции, недоступны до этого функции не будет выполнен. Чтобы быть в безопасности, всегда кладите определения псевдонима на отдельной строке и не используйте псевдоним в составных командах.

4
27.01.2020, 20:40

Теги

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