Passe o nome do arquivo para scripts com funcionalidade de preenchimento automático

Passe o nome do arquivo para scripts com funcionalidade de preenchimento automático

Normalmente, quando uso nomes de arquivos em um script, menciono o nome do arquivo explicitamente no script, por exemplo, conforme mostrado abaixo,

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

Eu queria saber se é possível passar o nome do arquivo para um script como o seguinte:

./script_name.sh file_1 file_2 file_3

com funcionalidade de preenchimento automático de guias. (Isso seria muito conveniente!)

Alguém tem experiência com isso. Obrigado.


readé uma maneira de solicitar alguns dados de entrada, mas acho que é complicado para entradas múltiplas e para textos longos.

Responder1

OK, este script aceita um argumento obrigatório e dois argumentos opcionais. Ele será encerrado (com erro) se você não especificar pelo menos um argumento. Não faz muito além disso!

#!/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"

Salve-o como (por exemplo) script_name.she configure-o como executável:

chmod u+x script_name.sh

Então execute assim:

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

Ele deve exibir os três argumentos que você passou (que são todos "script_name.sh") e depois catele mesmo.

Quando tentei isso, experimentei o preenchimento de guias - funcionou bem automaticamente (mostrou arquivos e diretórios quando pressionei Tab). Eu não fiz nada para que isso acontecesse. No entanto, se você quiser permitir que seu script funcione apenas com determinados arquivos complete -f -X '!*.png' script_name.sh- isso mostrará apenas arquivos ".png" quando você pressionar Tab.

Edite para adicionar:

completenão é executado a partir do próprio script ( script_name.shno exemplo acima). Crie um arquivo separado ( completion_for_script_name.sh, por exemplo):

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

Use sourcepara carregar a conclusão no ambiente atual:

source ./completion_for_script_name.sh

Normalmente, você faria isso no perfil do seu shell, por exemplo, .bash_profileou .bashrc.

informação relacionada