Me gustaría codificar algunas entradas al comando de mi script bash. Por ejemplo, tengo un script de bash como este:
#! /bin/bash
apt-get install python
y me gustaría codificar y
y enter
como la entrada para el apt-get
comando en esta secuencia de comandos bash, ya que en algún momento se puede pedir al usuario que confirme el espacio de la instalación. Se que puedo hacer
apt-get install python <<< "y"
pasar una entrada de cadena y
, ¿pero también puedo ingresar un formato especial, como la nueva línea "n" usando este método? ¡Gracias!
Respuestas
2 para la respuesta № 1Todas las referencias se terminan automáticamente por unnueva línea, por lo que esto no puede hacer lo que quieres. (Muchos programas analizan si su entrada proviene de un TTY, y cambian si y cómo lo hacen en función del resultado; otros leen las solicitudes de un usuario directamente desde un TTY, y por lo tanto, omita por completo los contenidos canalizados, heredocs y herestrings).
Dicho esto, para una respuesta literal a la pregunta:
apt-get install python <<<$"yn"
También puedes usar un heredoc:
apt-get install python <<EOF
y
EOF
Dicho esto, para el caso específico de apt-get
, no hagas eso!
apt-get install -y python
... es de hecho la mejor práctica. (Y para los comandos de administración del sistema en general, los desarrolladores generalmente anticipan el uso por lotes o por lotes, por lo que los usuarios finales rara vez son necesarios; consulte la documentación de cada programa en busca de argumentos como --batch
, --force
, --always
o --yes
; variables de entorno que especifican elementos que de otro modo se solicitarían; o comportamientos activados por tener stdin no ser un TTY).
2 para la respuesta № 2
apt-get -y install python
es la forma correcta Según la página del manual:
-y, --sí, --asume-sí
Sí automático a las indicaciones; asume "sí" como respuestaa todas las indicaciones y ejecutar de forma no interactiva. Si se produce una situación no deseada, como cambiar un paquete retenido, intentar instalar un paquete no autenticado o eliminar un paquete esencial se produce entonces apt-get abortará. Elemento de configuración: APT :: Get :: Assume-Yes.