如何在其他脚本中使用.bashrc中定义的别名?

Dut*_*tor 28 bash alias

在〜/ .bashrc中,我定义了一些别名.但是我不能在其他shell脚本中使用它们,在那里我只能使用那里定义的别名.即使我采购了bashrc,它仍然无效.我该怎么办?

PS.我在打击.

Pau*_*ce. 28

shopt -s expand_aliases除了采购之外,您还需要在脚本中执行此操作~/.bashrc.

  • @iuliux:改为定义和导出函数.假设您的脚本使用`mv`而不使用`-i`或`-v`并且您想添加它们,但无法修改脚本.`function mv(){command mv -iv"$ @"; }; export -f mv`现在你的脚本将使用这些选项.这就是编写良好的脚本使用绝对路径到可执行文件(例如`/ bin/mv`)的原因.它将阻止这种技术的工作,是一种很好的安全措施.请将您的问题发布为一个新问题,我会将其作为答案发布. (10认同)
  • 如果脚本无法修改怎么样? (2认同)

Aru*_*gal 12

最简单的答案是做两件重要的事情,否则它不会起作用。

#!/bin/bash -i

# Expand aliases defined in the shell ~/.bashrc
shopt -s expand_aliases
Run Code Online (Sandbox Code Playgroud)

此后,您在 ~/.bashrc 中定义的别名将在您的 shell 脚本(giga.sh 或 any.sh)以及此类脚本中的任何函数或子 shell 中可用。

如果你不这样做,你会得到一个错误:

your_cool_alias: command not found
Run Code Online (Sandbox Code Playgroud)

  • 你好!`shopt -s Expand_aliases` 行似乎对我来说没有效果。当我在图形终端(kde Konsole)中使用“./script.sh”执行脚本时,实际上不需要“shopt -s Expand_aliases”行的“#!/bin/bash -i”行就足够了。类似地,它使用“bash -i script.sh”运行脚本,即以交互方式(使用-i)运行脚本,而不是在没有这两行的情况下运行“bash script.sh”。尽管我没有找到使用“bash script.sh”执行脚本的方法(这两行都没有帮助)。 (2认同)

che*_*ner 5

.bashrc其目的只有一个:为交互式 shell 配置环境。如果您希望在您的.bashrc脚本和其他脚本之间共享代码,那么它属于一个单独的文件,该文件由您的每个.bashrc脚本和 shell 脚本获取。