Как использовать псевдонимы, определенные в .bashrc в других скриптах? - PullRequest
28 голосов
/ 09 марта 2011

В ~ / .bashrc я определил некоторые псевдонимы. Но я не могу использовать их в других сценариях оболочки, где я могу использовать только псевдонимы, определенные прямо здесь. Несмотря на то, что я получил bashrc, он все равно не работал. Что мне делать?

PS. Я в баш.

Ответы [ 6 ]

28 голосов
/ 09 марта 2011

Вам нужно сделать shopt -s expand_aliases в скрипте в дополнение к поиску ~/.bashrc.

2 голосов
/ 14 июня 2013

У меня была эта проблема, и я перезагрузил файл этой командой, чтобы исправить ее.

$ source ~/.bashrc 
1 голос
/ 07 июля 2017

Самый простой ответ - сделать 2 важные вещи, иначе не получится.

#!/bin/bash -i

# Expand aliases defined in the shell ~/.bashrc
shopt -s expand_aliases

После этого ваши псевдонимы, которые вы определили в ~ / .bashrc, будут доступны в вашем сценарии оболочки (giga.sh или any.sh) и любой функции или дочерней оболочке в этом сценарии.

Если вы этого не сделаете, вы получите ошибку:

your_cool_alias: command not found
1 голос
/ 14 марта 2014

Украдено у энзотиба по запросу ubuntu: псевдонимы устарели в пользу функций оболочки.На странице руководства bash:

Практически для любых целей псевдонимы заменяются функциями оболочки.

Чтобы создать функцию и экспортировать ее в подоболочки, поместитев вашем ~/.bashrc:

petsc() {
    ~/petsc-3.2-p6/petsc-arch/bin/mpiexec "$@"
}
export -f petsc

Тогда вы можете свободно вызывать свою команду из своих скриптов.

0 голосов
/ 09 февраля 2018

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

0 голосов
/ 21 декабря 2013

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

Вот мои настройки для OS X 10.8.5:

/ и т.д. / launchd.conf:

setenv BASH_ENV /Users/DK/.env

~ / .bash_profile:

# == Bash setup for interactive shells ==    
# === Environment for all shells ===
. $BASH_ENV    
# [skipped]

~ / .env:

# == Setup for all shells ==
# This is executed for all interactive and for non-interactive shells (e.g. scripts)

shopt -s expand_aliases extglob xpg_echo

# [skipped] Misc. variables and PATH setup

# === General aliases ===

alias pause='echo "Press [Return] or [Enter] to continue..."; read' # read -p does not display prompt in Eclipse console

# [skipped]
...