Как я могу использовать псевдоним в функции?

В моем dotfiles у меня есть некоторые функции, которые полагаются на псевдонимы или функции для существования, чтобы они работали. По некоторым причинам я могу заставить их ссылаться на другие функции, которые я создал, но не псевдонимы для команд. Как я фиксирую это?

Пример:

function open-dotfiles-commit(){ 
    xopen https://github.com/fatso83/dotfiles/blob/$1; 
}

Если у меня есть псевдоним xopen (alias xopen=xdg-open), open-dotfiles-commit команда перестанет работать с xopen: cannot find command. С другой стороны, если я заменяю определение псевдонима вызванной функцией xopen (function xopen(){ xdg-open; };) это работает!

Я даже попытался установить shopt -s expand_aliases в том же файле как, где я определяю псевдонимы - неудачно. Файл псевдонима и функций получен моим .bashrc.

2
задан 5 March 2019 в 13:42

1 ответ

Из руководства удара:

Псевдонимы расширены, когда функциональное определение прочитано, не, когда функция выполняется, потому что функциональным определением является самостоятельно команда.

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

Для ссылки я протестировал foo () { ll "$1"; }, использование ll псевдоним от значения по умолчанию .bashrc, и это хорошо работало.

Выполнимый пример:

def-before() { do-foo; };    
alias do-foo="echo foo u!"    
def-after() { do-foo; };

def-before 
# prints "do-foo: Could not find command"

def-after
# prints "foo u!"
4
ответ дан 2 December 2019 в 02:12

Другие вопросы по тегам:

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