Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

249
Vistas
Definir la función en la línea de comandos de Unix/Linux (por ejemplo, BASH)

A veces tengo una sola línea que repito muchas veces para una tarea en particular, pero probablemente nunca la volveré a usar exactamente de la misma forma. Incluye un nombre de archivo que estoy pegando desde una lista de directorios. En algún momento entre la creación de un script bash, pensé que tal vez podría crear una función de una sola línea en la línea de comando como:

 numresults(){ ls "$1"/RealignerTargetCreator | wc -l }

Probé algunas cosas como usar eval, usando numresults=function... , pero no encontré la sintaxis correcta y hasta ahora no encontré nada en la web. (Todo lo que viene son solo tutoriales sobre funciones de bash).

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Citando mi respuesta para una pregunta similar en Ask Ubuntu:

Las funciones en bash se denominan esencialmente comandos compuestos (o bloques de código). De man bash :

 Compound Commands A compound command is one of the following: ... { list; } list is simply executed in the current shell environment. list must be terminated with a newline or semicolon. This is known as a group command. ... Shell Function Definitions A shell function is an object that is called like a simple command and executes a compound command with a new set of positional parameters. ... [C]ommand is usually a list of commands between { and }, but may be any command listed under Compound Commands above.

No se da ninguna razón, es solo la sintaxis.

Pruebe con un punto y coma después de wc -l :

 numresults(){ ls "$1"/RealignerTargetCreator | wc -l; }
over 4 years ago · Santiago Trujillo Denunciar

0

No use ls | wc -l ya que puede darte resultados incorrectos si los nombres de los archivos tienen líneas nuevas. Puede usar esta función en su lugar:

 numresults() { find "$1" -mindepth 1 -printf '.' | wc -c; }
over 4 years ago · Santiago Trujillo Denunciar

0

También puede contar archivos sin find . Usando arreglos,

 numresults () { local files=( "$1"/* ); echo "${#files[@]}"; }

o usando parámetros posicionales

 numresults () { set -- "$1"/*; echo "$#"; }

Para hacer coincidir los archivos ocultos también,

 numresults () { local files=( "$1"/* "$1"/.* ); echo $(("${#files[@]}" - 2)); } numresults () { set -- "$1"/* "$1"/.*; echo $(("$#" - 2)); }

(Restar 2 del resultado compensa . y .. .)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda