当shopt不可用时设置expand_alias?

时间:2017-11-16 13:54:16

标签: shell alias ash

我试图在我编写的shell脚本中使用别名,但它无效。

别名:

alias ts="awk '{ print strftime(\"[%Y-%m-%d %H:%M:%S]\"), \$0 }'"

当我运行脚本时,出现以下错误:

./copyTask.sh: ts: not found

在互联网上徘徊,似乎我需要启用expand_aliases shell选项,但我没有安装shopt ...有什么方法可以启用别名不使用shopt或创建另一个rootfs图像进行扩展?

我正在使用ash shell。 awk是BusyBox v1.25.0 awk

注意:别名是将时间戳添加到命令的简单方法:

$ echo "foo" | ts
[2005-06-23 11:52:32] foo

编辑:由于有些人无法理解我的意思,this answer有一个例子。

1 个答案:

答案 0 :(得分:2)

不要在脚本中使用别名。一个函数完成相同的工作更好

ts() { gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }' "$@"; }
  • 这适用于任何POSIX shell,包括根本不支持别名的shell。
  • 这适用于非交互式shell,无需显​​式启用别名支持。
  • 这可以通过别名不能扩展的方式扩展(你可以将条件逻辑放在函数内;你可以在函数的非尾部位置放置参数;等等)。
  • 在bash中,函数可以导出到环境中:export -f ts将使ts命令可用于子进程(它们运行的​​shell也是bash)。