eval
does not read its command string from stdin.
eval "$(cat file.txt)"
# or easier, in ksh/bash/zsh
eval "$(<file.txt)"
# usually you cannot be sure that a command ends at the end of line 5
eval "$(head -n 5 file.txt)"
Instead of eval
you can use standard .
or bash
/zsh
/ksh
source
if the commands are in a file anyway:
source ./file
(note that it's important to add that ./
. Otherwise source
looks for file
in $PATH
before considering the file
in the current directory. If in POSIX mode, bash
would not even consider the file
in the current directory, even if not found in $PATH
).
That does not work with choosing a part of the file, of course. That could be done by:
head -n 5 file.txt >commands.tmp
source ./commands.tmp
Or (with ksh93, zsh, bash):
source <(head -n 5 file.txt)