别名减慢了 zsh 的速度

别名减慢了 zsh 的速度

我添加了一个别名,这减慢了我的 zsh 打开时间。它打开了,但只是挂起额外的 1 或 2 秒来给我一个提示(或者它开始在 shell 顶部输入我的命令,而没有提示)

关于此问题还有另一个问题,但其结果是速度减慢与别名无关。

别名会减慢 shell 的启动速度吗?

我有一个别名,它可以帮助我根据列表中的一个 avd 名称启动 android 模拟器,等待 2 秒,然后运行 ​​flutter。

alias runflutter="emulator @$(avdmanager list avd | grep -m 1 -Po '(?<=Name:\s).*'  ) &; sleep 2;  flutter run"

我确信我的问题与该别名有关的主要原因是,当我使用/usr/bin/time zsh -i -c exit Gives me this 进行测试时:

2.27user 0.18system 0:01.07elapsed 228%CPU (0avgtext+0avgdata 141092maxresident)k
0inputs+112outputs (0major+50607minor)pagefaults 0swaps

如果删除我的别名,则相同命令的输出

0.24user 0.11system 0:00.35elapsed 100%CPU (0avgtext+0avgdata 16036maxresident)k
0inputs+96outputs (0major+16089minor)pagefaults 0swaps

我目前的想法和做法是什么

我认为我已经有了 flutter 命令,因此可能在其上添加带有 flutter 关键字的别名会导致一些索引问题,不确定是否存在索引或类似的东西。所以我重命名了我的别名,但没有任何变化。

我的另一个理论是,由于输出中“用户”之前的数字之间有近 2 秒的延迟和 2.0 的差异,我认为它可能与别名中的 sleep 命令有关。它以某种方式执行了。我已经从别名中删除了 sleep 命令,但没有帮助。

答案1

别名 runflutter="模拟器@$(avdmanager 列表 avd | grep -m 1 -Po'(?<=Name:\s).*')&;睡眠2;颤动运行”

当您定义别名时,将执行此别名的粗体部分。这是您想要的行为吗?运行需要多长时间?

我的直觉是,你之所以要休眠 2 秒,是因为你想给 avdmanager 一些时间运行。如果是这样,你可能会喜欢

setopt rcquotes
alias runflutter='emulator @$(avdmanager list avd | grep -m 1 -Po ''(?<=Name:\s).*'' ) &; sleep 2; flutter run'
setopt norcquotes

更好的。

我一般会推荐使用 rcquotes,否则不要关闭它,因为如果没有 rcquotes,我知道在单引号字符串中引用单引号的最短方式是笨拙的'\''。如果你愿意,你可以这样做而不是使用 rcquotes,这样你就

alias runflutter='emulator @$(avdmanager list avd | grep -m 1 -Po '\''(?<=Name:\s).*'\'' ) &; sleep 2; flutter run'

相关内容