Tenho um arquivo chamado fileWithOneCommand.txt
com apenas um comando como segue
ps -aux|head -n 5
então escrevo um script de shell de teste chamado 'test5.sh' com o seguinte conteúdo:
file=/home/somepath/fileWithOneCommand.txt
$file;
echo see;
cat $file;
echo see2;
$(cat $file);
echo see3;
mas não consigo entender o resultado, o resultado é o seguinte:
$ ./test5.sh
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 168584 10308 ? Ss Feb19 0:49 /sbin/init splash
root 2 0.0 0.0 0 0 ? S Feb19 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Feb19 0:00 [pool_workqueue_release]
root 4 0.0 0.0 0 0 ? I< Feb19 0:00 [kworker/R-rcu_g]
see
ps -aux|head -n 5
see2
error: user name does not exist
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
see3
$file deve mostrar o conteúdo da variável file, então deve ser a saída,
ps -aux|head -n 5
mas por que a saída é o resultado da execução de ps -aux|head -n 5, e não apenas mostrar ps -aux|head -n 5?cat $file; return ps -aux|head -n 5, mas por que
$(cat $file);
retornar erro "erro: nome de usuário não existe"?
Quando pesquisei sobre substituição de comando no Google, ele disse "a saída de um comando substitui o próprio comando. O Shell opera a expansão executando um comando e, em seguida, substituindo a substituição do comando pela saída padrão do comando".
então para
$(cat $file);
dentro do colchete, cat $file retorna ps -aux|head -n 5 então por que $(cat $file); não retorna o resultado da execução de ps -aux|head -n 5 mas retorna um erro "erro: nome de usuário não existe"?