Quiero pedirle al usuario de mi script bash que pase una ruta de directorio como argumento. ¿Cuál de las siguientes es una buena práctica de programación?
- Requerir que el usuario ingrese un final / / barra inclinada
- Requerir que un usuario no ingrese un final / (barra inclinada)
programming-practices
user-interface
bash
Rohit Agarwal
fuente
fuente

rsynccomporta de manera diferente de una manera muy importante dependiendo de la presencia de arrastre/, por lo que en algunos casos querrá normalizar la coherencia, y en otros deseará pasar limpiamente para implementar lo que el usuario dijo (si Sabía que estaban hablandorsync).ls -l dircomporta de manera diferente als -l dir/sidires un enlace simbólico a un directorio.Respuestas:
La mejor práctica es asumir que ninguno.
Si tiene acceso a las utilidades / clases del generador de rutas, utilícelas, si no, escriba su código para aceptar cualquiera de los formatos y actuar en consecuencia.
Nada es más molesto para el usuario que tener que recordar si agregar una barra inclinada final o no.
fuente
dirname,basenameyreadlink. Un problema muy común es usarlo${path##*/}como reemplazo debasename, pero si la ruta termina con una barra diagonal que devuelve una cadena vacía en lugar del último elemento de ruta.rsynclo estoy mirando)${STR}$(printf \\$(printf '%03o' $(($(printf '%d' "'${STR:(-1)}")==47?0:47))))también lo documenté de manera esencial para mayor claridad: agregue o elimine la barra inclinada en la fiestaDado que bash ignora las barras inclinadas múltiples, puede asumir con seguridad que el usuario no ingresó una barra inclinada final en la ruta y agregar una barra usted mismo.
es lo mismo que
Entonces su script podría verse así:
y no tiene que preocuparse si el usuario ingresa o no un seguimiento / en la ruta.
fuente
bashcomportamiento, el núcleo lo hace.El difunto Jon Postel tuvo algunos buenos consejos en la sección 3.2 del RFC 760 que se aplica aquí:
fuente
Conceptualmente, la barra diagonal no es parte del nombre. La barra diagonal es solo un delimitador entre nombres. Mi home-dir es / home / stefan y no / home / stefan /.
Si no espera una barra inclinada final, no fallará si la hay, como ya se dijo en ammoQ. Pero puede pegar fácilmente nombres y variables, ya que no tiene que citar la barra:
fuente
Exigir que el directorio no debe tener una barra inclinada final sería extremadamente molesto para el uso interactivo en la consola: la finalización automática con TAB agrega automáticamente una barra inclinada final para los directorios.
Por lo tanto, debe permitir que los directorios se especifiquen con una barra diagonal final.
fuente