购物不可用时设置expand_alias?

Set expand_alias when shopt not available?

我正在尝试在我正在编写的 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 有一个例子。

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

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