eval
não lê sua string de comando de 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)"
Em vez de eval
, você pode usar o padrão .
ou bash
/ zsh
/ ksh
source
se os comandos estiverem em um arquivo mesmo assim:
source ./file
(note que é importante adicionar ./
. Caso contrário, source
procurará file
in $PATH
antes de considerar o file
no diretório atual. Se no modo POSIX, bash
não seria nem considere o file
no diretório atual, mesmo que não seja encontrado em $PATH
).
Isso não funciona com a escolha de uma parte do arquivo, é claro. Isso pode ser feito por:
head -n 5 file.txt >commands.tmp
source ./commands.tmp
Ou (com ksh93, zsh, bash):
source <(head -n 5 file.txt)