4 ms·
Why do you need to remove all of these from the environment?
by gnubison 3y ago
Why do you need to remove all of these from the environment?
- matheusmoreira 3y agoTo test my programming language. It's a freestanding lisp interpreter that doesn't link to libc. I wrote the code that handles the environment variables and in order to test it I needed full control over the program's inputs including its environment. The env utility provides this control by emptying the environment and setting only the variables I specify, solving 90% of the problem. Only thing I still can't control is argv[0]. With this new feature upstreamed, my test suite will be complete. Here's the code if you wish to take a look: https://github.com/lone-lang/lone#testing https://github.com/lone-lang/lone#testing https://github.com/lone-lang/lone/blob/master/scripts/test.bash https://github.com/lone-lang/lone/blob/master/scripts/test.b... Without env -i, the folllowing tests would not be possible: https://github.com/lone-lang/lone/blob/master/test/linux/environment/specific/environment https://github.com/lone-lang/lone/blob/master/test/linux/env... https://github.com/lone-lang/lone/blob/master/test/linux/environment/specific/input https://github.com/lone-lang/lone/blob/master/test/linux/env... https://github.com/lone-lang/lone/blob/master/test/linux/environment/specific/output https://github.com/lone-lang/lone/blob/master/test/linux/env...
- rascul 3y agoGlibc provides ld.so which can: --argv0 STRING set argv[0] to STRING before running Maybe that could be useful?
- matheusmoreira 3y agoI did not know about that possibility! It requires glibc and its dynamic linker though, doesn't seem to be as widely available as the GNU coreutils. I developed lone inside Termux: it does not have ld.so but does have env. There's a GNU binutils ld but it did not recognize the --argv0 option when I tried it.
- account42 3y agold.so is the dynamic linker. It is always used when invoking a dynamically linked program but you can invoke it manually which allows you to specify optionsfor the linker. But the name and path you need to invoke depends on the architecture and possibly distro, e.g. for amd64 these days its /lib64/ld-linux-x86-64.so.2 --argv0 argv0isalie yourprogramm ld is the (not dynamic) linker. It doesn't invoke your program at all.