Я не знаю, что находится ниже, но на практике он запускает его так же, как source somefile
, где он просто запускает эти команды в текущем процессе оболочки , не порождая новый процесс.
И также я бы использовал слово «строка», а не «команды», так как это то, что оно делает. Это работает, но не имеет команды:
$ eval ""
Или это, что технически не является командой:
$ eval "x(){ echo test;}"
$ x
test
И чтобы показать, что он не всегда создает новый процесс (поэтому я не согласен с Уильямом):
в одном терминале:
$ echo $$
9983
$ eval "sleep 100"
] в другом:
$ ps -ef --forest
peter 9983 2840 0 14:21 pts/41 00:00:00 \_ /bin/bash
peter 17339 9983 0 14:26 pts/41 00:00:00 | \_ sleep 100
Но если вы сделаете это, то по какой-то причине будет:
$ eval 'sleep 100' &
[1] 20675
$ ps --forest
PID TTY TIME CMD
9983 pts/41 00:00:00 bash
20675 pts/41 00:00:00 \_ bash
20676 pts/41 00:00:00 | \_ sleep
20757 pts/41 00:00:00 \_ ps