shell - while - ksh with parameters
KornShell(ksh) envolvente (6)
De acuerdo, estoy seguro de que esto es simple, pero me está volviendo loco. Recientemente fui a trabajar en un programa en el que tuve que retroceder un poco en el tiempo y utilizar Redhat 9. Cuando escribo en la línea de comandos desde un xterm estándar ejecutando KornShell (ksh), y llego al final del alinee las diapositivas de la pantalla hacia la derecha (cortando el lado izquierdo de mi comando) en lugar de envolver el texto en una nueva línea. Esto me dificulta las cosas porque no puedo copiar y pegar fácilmente desde el comando anterior directamente desde la línea de comandos. Tengo que mirar el historial y pegar el comando desde allí. En caso de que te lo estés preguntando, hago un montón de scripts awk de línea de comandos que hacen que la línea sea bastante larga.
¿Hay alguna forma de forzar la línea de comando para que se ajuste en lugar de cambiar la visibilidad al lado derecho del comando que estoy escribiendo?
He revisado las opciones de la página del hombre sin suerte.
Estoy corriendo:
- XFree86 4.2.99.903 (174)
- KSH 5.2.14.
Gracias.
Si es posible, intente dividir el comando en varias líneas agregando / ie:
$ mycommand -a foo / -f bar / -c dif
No conozco una manera de forzar el caparazón para envolver, pero le preguntaría por qué escribirías líneas así de largo. Con los scripts awk, simplemente envuelvo el script en comillas simples, y luego rompo las líneas donde quiero. Solo se complica si necesita comillas simples en el script, y es diabólico si necesita comillas simples o dobles. En realidad, la regla es bastante simple: use comillas simples para envolver todo el script, y cuando quiera una comilla simple en el script, escriba ''/'''
. La primera cita termina la cadena de comillas simples anterior; la comilla simple invertida produce una sola comilla; y la última comilla simple comienza una nueva cadena entre comillas simples. Realmente se pone peludo si necesitas escapar de esos personajes para una evaluación o algo similar.
La otra pregunta es: ¿por qué no lanzarlo a un editor? Como soy un fanático de vim (ok, he usado vi durante más de 20 años, así que es más fácil para mí que las alternativas), tengo el shell Korn configurado en modo vi (set -o vi), y puede hacer escape-v para ejecutar el editor en cualquier cosa que haya tipeado.
Esta es una especie de respuesta pragmática, pero cuando ese es un problema para mí, generalmente hago algo como:
strings ~/.history | grep COMMAND
o
strings ~/.history | tail
(El archivo de historial tiene un poco de datos binarios, de ahí ''cadenas'')
Hiciste man ksh
?
Desea hacer un set -o multiline
.
Extracto del man ksh
:
multilínea:
Los editores incorporados usarán líneas múltiples en la pantalla para líneas que son más largas que el ancho de la pantalla. Esto puede no funcionar para todos los terminales.
eval $ (resize) debería hacerlo.
La respuesta simple es:
$ set -o multiline
ksh anterior a 5.12, como el ksh enviado con NetBSD 6.1, no tiene esta opción. Deberá desactivar el modo actual de edición de línea de entrada interactiva, que generalmente es emacs:
$ set +o emacs
Esto desactiva muchas características, como la finalización de tabulación o el uso de la tecla de flecha hacia arriba para retroceder el comando anterior.
Si decide acostumbrarse al modo emacs de alguna manera, recuerde ^ a va al comienzo de la línea (la tecla "Inicio" no funcionará) y ^ e va al final.