为什么别名在终端中有效,但在脚本调用时无效?

为什么别名在终端中有效,但在脚本调用时无效?

我已将以下内容添加到我的 ~/.bash_profile 中

# opens "flashlog.txt" in Console
alias trace='open -a /Applications/Utilities/Console.app/ ~/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'

# clears "flashlog.txt"
alias cleartrace='cat /dev/null > ~/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'

因此,在终端中,我可以在控制台中输入命令“trace”并查看 flashlog.txt。我还可以输入命令“cleartrace”,然后 flashlog.txt 将被清除。这些都很好用。

但是,如果我使用以下命令创建一个新的 bash 脚本,我会收到错误“cleartrace:未找到命令”:

#!/bin/bash
cleartrace
cp -v -f ActivityLauncher.swf ../launchers/addu02l05_launcher_1.swf
open "/Applications/Adobe Flash CS4/Players/Flash Player.app" ./test.swf 

为什么别名在终端中有效,但在脚本中调用时却无效?(我该如何修复它?)

答案1

这是因为 bash 只读取 ~/.bash_profile 以用于交互式 shell。将别名定义移至 ~/.bashrc 即可。查看 bash 手册页的 INVOCATION 部分,了解有关这一切如何运作的更多详细信息。

答案2

Bash 信息文件显示:

对于几乎所有目的而言,shell 函数都比别名更受欢迎。

一方面,函数可以被导出。

相关内容