Pasar nombre de archivo a scripts con funcionalidad de autocompletar

Pasar nombre de archivo a scripts con funcionalidad de autocompletar

Por lo general, cuando uso nombres de archivos dentro de un script, menciono el nombre del archivo explícitamente dentro del script, por ejemplo, como se muestra a continuación:

#!/bin/bash ... echo "<dynamic text>" >> process_log.log ...

Me preguntaba si es posible pasar el nombre del archivo a un script como el siguiente:

./script_name.sh file_1 file_2 file_3

con función de autocompletar de pestañas. (¡Esto sería muy conveniente!)

¿Alguien tiene experiencia con esto? Gracias.


reades una forma de solicitar algunos datos de entrada, pero creo que es engorroso para entradas múltiples y para textos largos.

Respuesta1

Bien, este script toma un argumento obligatorio y dos argumentos opcionales. Saldrá (con un error) si no especifica al menos un argumento. ¡No hace mucho más que eso!

#!/bin/sh
if [ -z "$1" ]
then
    echo "Missing filename: 1"
    exit 1
else
    file1=$1
fi
file2="$2"
file3="$3"
printf "File 1: %s\n" "$file1"
printf "File 2: %s\n" "$file2"
printf "File 3: %s\n" "$file3"
cat "$file1"

Guárdelo como (por ejemplo) script_name.shy configúrelo como ejecutable:

chmod u+x script_name.sh

Luego ejecútelo así:

./script_name.sh script_name.sh script_name.sh script_name.sh

Debería mostrar los tres argumentos que le pasó (que son todos "script_name.sh"), y luego catél mismo.

Cuando probé esto, experimenté con la función de completar con pestañas: funcionó bien automáticamente (mostraba archivos y directorios cuando presionaba Tab). No hice nada para que hiciera esto. Sin embargo, si desea que su secuencia de comandos solo funcione con ciertos archivos complete -f -X '!*.png' script_name.sh, solo mostrará archivos ".png" cuando presione Tab.

Editar para agregar:

completeno se ejecuta desde el propio script ( script_name.shen el ejemplo anterior). Cree un archivo separado ( completion_for_script_name.sh, por ejemplo):

complete -f -X '!*.png' script_name.sh

Úselo sourcepara cargar la finalización en el entorno actual:

source ./completion_for_script_name.sh

Normalmente, harías esto en el perfil de tu shell, por ejemplo, .bash_profileo .bashrc.

información relacionada