在~/.bashrc文件中,我定义了一些别名。但是在其他的shell脚本中,我无法使用它们,只能使用那里定义的别名。即使我使用了source命令加载了bashrc文件,仍然不起作用。我该怎么做?
PS. 我使用的是bash shell。
shopt -s expand_aliases
命令,除此之外还需引用 ~/.bashrc
。mv
而没有-i
或-v
,并且您想要添加它们,但无法修改脚本。function mv () { command mv -iv "$@"; }; export -f mv
现在您的脚本将使用这些选项。这就是为什么良好编写的脚本使用可执行文件的绝对路径(例如/bin/mv
)。这将防止此技术起作用,并且是良好的安全实践。请发布您的问题作为新问题,我会将此作为答案发布。 - Dennis Williamson最简单的答案是做两件重要的事情,否则它就不会起作用。
#!/bin/bash -i
# Expand aliases defined in the shell ~/.bashrc
shopt -s expand_aliases
在此之后,您在~/.bashrc中定义的别名将在您的shell脚本(giga.sh或any.sh)以及该脚本中的任何函数或子shell中可用。your_cool_alias: command not found
shopt -s expand_aliases
这行似乎没有效果。当我在图形终端(kde Konsole)中使用 ./script.sh
执行脚本时,只需要 #!/bin/bash -i
这一行就足够了,不需要 shopt -s expand_aliases
这一行。同样地,使用 bash -i script.sh
以交互方式(带有-i)运行脚本也可以,而不是使用 bash script.sh
,这两行都不需要。虽然我没有找到使用 bash script.sh
执行脚本的方法(这两行都没有用)。 - bogec.bashrc
的目的是为您的交互式 shell 配置环境。如果您有代码希望在 .bashrc
和其他脚本之间共享,那么应将其放在单独的文件中,并通过 每个 .bashrc
和 shell 脚本来获取该文件。
$ source ~/.bashrc
从ask ubuntu的enzotib处窃取:别名已被弃用,应使用shell函数。来自bash
手册页面:
对于几乎所有目的,别名都被shell函数取代。
要创建一个函数并将其导出到子shell中,请将以下内容放入您的~/.bashrc
中:
petsc() {
~/petsc-3.2-p6/petsc-arch/bin/mpiexec "$@"
}
export -f petsc
有一种方法可以在不为每个执行的脚本添加行的情况下全局实现:使用BASH_ENV
变量。
以下是我针对OS X 10.8.5的设置:
/etc/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]
.bashrc
脚本中的其他内容分开,您可能还希望将您的别名隔离到它们自己的文件中(例如$HOME/.aliases
或其他),并从您的其他 shell 脚本和.bashrc
中shopt
和source
它。这将避免来自.bashrc
中其他内容的可能副作用,同时仍将它们放在一个地方以便于维护。 - Sdaz MacSkibbons.bashrc
才能告诉你。无论如何,这是更好的解决方案。 - Sdaz MacSkibbons.bashrc
来设置交互式shell的环境,因为它只是为交互式shell设置环境。Shell脚本不应该依赖于它。 - chepner