¿Por qué 2 máquinas Linux se comportan de manera diferente con comandos de la misma sintaxis?

¿Por qué 2 máquinas Linux se comportan de manera diferente con comandos de la misma sintaxis?

Estoy usando 2 máquinas, que son ambas.Red Hat Enterprise Linux AS versión 3 (Actualización Taroon 2) (Lo reviso en /etc/*-release).

Verifiqué que están usando el mismo shell predeterminado ps -p $$, que es bash.

Intenté ejecutar un comando de búsqueda con un patrón comodín: buscar ruta -nombre patrón -tipo f -ctime +3

y el patrón contiene el carácter * como comodín.

La primera máquina parece expandir el carácter comodín y provocar un error:

find /home/primbat/testing -name sftp_bcs_report_*.log -type f -ctime +7
find: paths must precede expression

y necesito hacer el patrón entre 2 citas delimitadas, por ejemplo: \"sftp_bcs_report_*.log\"o usarlo set -fen el script para suprimir la expansión de comodines.

Que en la otra máquina no tiene ese problema. ¿Tiene alguna idea?

Respuesta1

De forma predeterminada, los shells expanden los comodines si un archivo coincide con ellos, pero los mantienen sin expandir y no coinciden. Por ejemplo, si ejecuta touch /tmp/111; touch /tmp/11*esto, se creará y luego actualizará mtime en /tmp/111, pero si /tmp está vacío pero llama, touch /tmp/11*obtendrá el archivo llamado "11*" en /tmp.

Esta es una característica bastante extraña de las conchas. A veces no es posible una expansión adecuada sin trucos especiales como función intermedia. La mayoría de los caparazones actuales inventan opciones especiales para casos típicos; por ejemplo, "shopt -s failglob" en bash rechaza la ejecución de cualquier comando donde falla la coincidencia de comodines.

Se debe confiar en la expansión del comodín de find, por lo que dicho patrón se citará frente a la expansión en Shell:

find /home/primbat/testing -name 'sftp_bcs_report_*.log' -type f -ctime +7

(tenga en cuenta las comillas simples). Con cero o un archivo, funciona, pero con dos o más archivos la sintaxis del comando falla y se queja: esto es lo que dice un colega.Arcège. Su "set -f" desactiva totalmente la expansión; bueno, es una buena medida para el diagnóstico, pero puede proporcionar rastrillos submarinos para una futura mudanza. Las citas son más simples :)

Respuesta2

Parece que no hay ningún archivo que coincida sftp_bcs_report_*.logen el directorio de inicio de la segunda máquina y más de uno de esos archivos en el primer servidor. Para utilizar find, los patrones siempre deben citarse.

información relacionada