sharkdp/hyperfine

${HYPERFINE_ITERATION} is not visible in prepare or conclude commands

Opened this issue · 2 comments

I thought I could use the ${HYPERFINE_ITERATION} env variable that is exposed (mentioned as a solution in #778) ; however this is only accessible in the main command of the iteration, not the prepare or conclude steps for each iteration.

So for example if I want to prepare , test and cleanup a series of files, I would do something like this (with echo for illustrative purposes) :

 ~/hyperfine --runs 5 --prepare 'echo touch file${HYPERFINE_ITERATION}.dat' \
                  'echo testing file${HYPERFINE_ITERATION}.dat' \
                  --conclude 'echo rm file${HYPERFINE_ITERATION}.dat' --show-output

However this does not work because the env var is not exposed in all the steps:

Benchmark 1: echo testing file${HYPERFINE_ITERATION}.dat
touch file.dat
testing file0.dat
rm file.dat
touch file.dat
testing file1.dat
rm file.dat
touch file.dat
testing file2.dat
rm file.dat
touch file.dat
testing file3.dat
rm file.dat
touch file.dat
testing file4.dat
rm file.dat
  Time (mean ± σ):      90.7 µs ± 202.8 µs    [User: 116.6 µs, System: 252.7 µs]
  Range (min … max):     0.0 µs … 453.5 µs    5 runs

so it's not possible to prepare and clean up each file.

I can work around it by changing the directory structure and using a recursive cleanup command (instead of conclude) but this might not be practical in some situations. For example if there is limited storage space on the test system, each data file would need to be cleaned up before the next one can be written.

Thank you, this should be easy to fix, I think.