
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.sh
e 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 cat
ele 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:
complete
não é executado a partir do próprio script ( script_name.sh
no exemplo acima). Crie um arquivo separado ( completion_for_script_name.sh
, por exemplo):
complete -f -X '!*.png' script_name.sh
Use source
para 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_profile
ou .bashrc
.