tengo un archivo llamado cmd que contiene una lista de comandos unix de la siguiente manera:La ejecución de comandos que contienen espacio en bash
hostname
pwd
ls /tmp
cat /etc/hostname
ls -la
ps -ef | grep java
cat cmd
tengo otro script que ejecuta los comandos de cmd como:
IFS=$'\n'
clear
for cmds in `cat cmd`
do
if [ $cmds ] ; then
$cmds;
echo "****************************";
fi
done
El problema es que los comandos en cmd sin espacios funcionan bien, pero aquellos con espacios no son interpretados correctamente por el script. A continuación se muestra el resultado:
patrick-laptop
****************************
/home/patrick/bashFiles
****************************
./prog.sh: line 6: ls /tmp: No such file or directory
****************************
./prog.sh: line 6: cat /etc/hostname: No such file or directory
****************************
./prog.sh: line 6: ls -la: command not found
****************************
./prog.sh: line 6: ps -ef | grep java: command not found
****************************
./prog.sh: line 6: cat cmd: command not found
****************************
¿Qué me falta aquí?
En realidad, tiene el problema opuesto.Establecer $ IFS como lo hizo aquí hace que 'for' se rompa en las líneas nuevas, exactamente como él quiere. Sin embargo, está intentando interpretar la cadena completa como un nombre de comando en lugar de un comando con argumentos. –
+1 para compensar downvote. :-) –
invocando bash -c está comenzando un nuevo proceso para cada comando. Eso parece excesivo y podría tener resultados sorprendentes. Por ejemplo, si uno de los comandos es un comando cd, los comandos posteriores no se ejecutarán en ese otro directorio. –