#bash
Вопрос:
Обратите внимание, что это исходный код, поэтому это не сценарий оболочки.
Я не спрашиваю, как включить псевдоним в неинтерактивной оболочке. Я сделал это: shopt -s expand_aliases
.
Версия Bash-5.1.4.
Как воссоздать:
Создайте файл с именем «p»:
linky(){
comdll="cat"
shopt -s expand_aliases
alias modavar="$comdll"
echo "$argin" | modavar #| getlinks "$argin" | sort -u
}
Тогда беги
echo "source p ; linky https://duckduckgo.com" | bash --norc
Ожидаемый результат:
https://duckduckgo.com
Фактический объем производства:
p: line 5: modavar: command not found
Когда я пробегу этот раз, он даст мне
linky(){ alias jkl=echo hel; jkl; }
linky
bash: jkl: command not found
Но если я сделаю это,
linky(){ alias jkl=echo hel; jkl; }
linky
linky(){ alias jkl=echo hel; jkl; }
linky
Это дает мне
hel
Что происходит?
Комментарии:
1. Вы показали свой код по-своему хорошо, но я не понимаю вопроса на уровне английского языка (что означает повторение, и название вопроса). Однако я вижу, что вы используете переменную
argin
, которую вы никогда не устанавливали — это бросается в глаза. Кроме того, я бы также использовал опцию-x
в вашей команде bash, если вы еще не закончили отладку.2. чтобы исправить или переделать проблему, у меня есть возможность чтения selvar.
3. С программой, как вы ее опубликовали, я бы ожидал, что вы просто получите пустую строку (один символ новой строки) в качестве вывода. Возможно, вы также могли бы объяснить, какой результат вы получаете.
4. Я понимаю, что это сложно, и совершенно смело обращаться к программированию , когда возникают проблемы с чтением. К сожалению, я также не понимаю, как исправить проблему . Возможно, будет лучше, если вы опишете, какие результаты вы ожидаете от своей программы и какие результаты вы на самом деле видите. Кроме того, удалите закомментированную часть вашего кода, так как это отвлекает и в данный момент не помогает. Вы можете вставить его обратно позже, после решения основной проблемы.
5. @Inee_94 : Что произойдет, если вы переместите определение псевдонима перед определением функции? псевдонимы не функционируют-в любом случае, локальные.
Ответ №1:
Вы не можете определить псевдоним внутри функции и использовать его там. Рассмотрим эти примеры:
alias foo=cat
ffoo() {
echo abc|foo
}
fbar() {
alias bar=cat
echo abc|bar
}
ffoo #->prints abc
fbar #->prints command not found