Eu preciso ler um valor do terminal em um script bash. Eu gostaria de poder fornecer um valor padrão que o usuário possa alterar.
# Please enter your name: Ricardo^
Neste script, o prompt é "Por favor, digite seu nome:" o valor padrão é "Ricardo" e o cursor estará após o valor padrão. Existe uma maneira de fazer isso em um script bash?
input
e depois usandoname=${input:-$name}
.name=${!input:-$name}
fazer?$1
torna${1:-some_default_string}
fonte
-e
parece ser obrigatório permitir-i
para realmente trabalhoNo Bash 4:
Isso exibe o nome após o prompt da seguinte maneira:
com o cursor no final do nome e permite ao usuário editá-lo. A última linha é opcional e força o nome a ser o padrão original se o usuário apagar a entrada ou o padrão (enviando um nulo).
fonte
name
vez deinput
noread
comando$name
é preservado se o usuário excluir o valor proposto (e, assim, inserir uma string nula). Tudo depende de qual é a sua necessidade. Eu disse isso na minha resposta. Você está certo, porém, que eu poderia ter sido mais explícito e disse que se a linha opcional não fosse usada, a variável poderia ter sidoname
.Código:
Exemplo de execução:
fonte
Encontrei esta pergunta, procurando uma maneira de apresentar algo como:
Usando os exemplos acima, deduzi o seguinte:
Espero que ajude alguém a não ter que pensar na lógica, se encontrar o mesmo problema
fonte
Acabei de usar esse padrão, o qual prefiro:
fonte
Defina o padrão; imprima; leia um novo valor; se houver um novo valor, use-o no lugar do padrão. Há (ou houve) algumas variações entre shells e sistemas sobre como suprimir uma nova linha no final de um prompt. A notação '\ c' parece funcionar no MacOS X 10.6.3 com um bash 3.x e funciona na maioria das variantes do Unix derivadas do System V, usando shells Bourne ou Korn.
Observe também que o usuário provavelmente não perceberia o que está acontecendo nos bastidores; seus novos dados seriam inseridos após o nome já na tela. Talvez seja melhor formatá-lo:
fonte
printf
é mais portátil queecho
if (test -z "$xxx"); ...
canso de consertar ' ' e outros shellismos em C.\c
, pois também suportaecho -n
! No entanto, você precisa adicionar-e
para obter o eco do bash para interpretar escapes. Eu acho que\c
é para coisas ditas:echo -e "Syntax slightly off\c, but I've learned so much from what you've shared. Thanks, @JonathanLeffler!"
fonte
Os parâmetros -e e -t não funcionam juntos. Eu tentei algumas expressões e o resultado foi o seguinte trecho de código:
fonte
;)
. Isso é permitido no SO! mas não queremos poluir outras perguntas com coisas não relacionadas.