У меня есть исполняемый файл mpiexec, полный путь которого равен ~/petsc-3.2-p6/petsc-arch/bin/mpiexec. Поскольку я хочу выполнить эту команду в разных каталогах (без необходимости повторно вводить весь путь), я настраиваю псевдоним в своем домашнем .bashrc файл:
alias petsc="~/petsc-3.2-p6/petsc-arch/bin/mpiexec"
что позволяет мне выполнить это mpiexec файл в командной строке легко, набрав:
petsc myexecutable
Я попытался написать файл сценария оболочки с именем script, используя мой новый псевдоним petsc как приказ. После предоставления моему сценарию оболочки соответствующих разрешений (используя chmod), я попытался запустить скрипт. Однако это выдало мне следующую ошибку:
./script: line 1: petsc: command not found
Я знаю, что я мог бы просто написать полный путь к mpiexec файл, но это громоздко писать полный путь каждый раз, когда я хочу написать новый скрипт. Есть ли способ, которым я могу использовать свой псевдоним petsc внутри файла скрипта? Есть ли способ, которым я могу отредактировать свой .bashrc или .bash_profile чтобы это произошло?
ALIASES ... Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS below).
Таким образом, реальный ответ на этот вопрос для тех, кто хочет использовать реальные псевдонимы в сценариях оболочки вместо альтернатив им, заключается в следующем:
Что касается почему? Я бы хотел сделать это: из-за необычных обстоятельств мне нужно обмануть Dockerfile, заставив его думать, что это сценарий оболочки.
Функции и псевдонимы оболочки ограничены оболочкой и не работают в выполняемых сценариях оболочки. Альтернативы для вашего случая:
(если вы не потрудитесь использовать mpiexec вместо petsc) Добавить $HOME/petsc-3.2-p6/petsc-arch/bin к вашему PATH переменная. Это можно сделать, отредактировав ~/.profile и добавление:
PATH="$HOME/petsc-3.2-p6/petsc-arch/bin:$PATH"
Повторно войдите в систему, чтобы применить эти изменения
Создайте каталог ~/bin и
создайте сценарий-оболочку с именем petsc содержащий:
Вы можете заставить bash выполнить ваш скрипт как интерактивную оболочку с флагом -i. Это скажет вашему файл .bashrc для определения псевдонимов и других функций.
(РЕДАКТИРОВАТЬ: удалены функции, так как я неправильно истолковал вызов mpiexec.)
Если единственное, что вам нужно, - это меньше печатать, почему бы вам просто не поместить папку в $PATH? Или сделать символическую ссылку на mpiexec из какой-нибудь папки в $PATH? Или (мой любимый) поместить псевдоним в сценарий, который вы создаете в вызывающем скрипте?
Как насчет добавления псевдонима в .bash_aliases? Также как насчет псевдонимирования абсолютного пути вместо относительного пути, например `alias petsc=’/home/user/petsc-3.2-p6/petsc-arch/bin/mpiexec"