Esto funciona:
$ echo "notificar-enviar HOLA" | en este momento
Esto no:
$ en este momento <echo "notificar-enviar HOLA"
Dice 'archivo o directorio no encontrado ".
Entiendo que hay una -fopción para este comando, con el cual puedo suministrar el archivo para que se ejecute en un momento dado.
Entonces esto me hizo pensar ... en general, ¿cómo sé para qué parámetro los operadores de redireccionamiento proporcionan el valor?
command-line
bash
vlad-ardelean
fuente
fuente

foo | barybar < fooes equivalente. No son.Respuestas:
Estás usando dos cosas diferentes aquí y deberías usar una tercera. Veamos:
|: Este es el operador de tubería , sirve para pasar la salida de un proceso como entrada a otro:Esto ejecuta el programa
fooy pasa su salida como entrada al programabar.>,<,>>Y<<: Estos son los operadores de redirección , que sirven para enviar datos a / desde archivos :foo > bar: ejecuta el programafooy guarda su salida en el archivobar, sobrescribe 1 su contenido y lo crea si no existe.foo >> bar: ejecuta el programafooy guarda su salida en el archivobar, agregando su contenido y creándolo si no existe.foo < bar: se ejecutafoo, diciéndole que lea la entrada del archivobar.El
<<es un caso especial, ya que no tiene sentido "agregar" entradas a un comando,<<se usa principalmente (exclusivamente AFAIK) para los documentos de Here :La construcción
<< SomeStringHere > Out.fileredirigirá todo el texto escrito hasta que encuentre la cadena final (EOFen el ejemplo anterior) al archivo de destino. Aquí los documentos le permiten formatear fácilmente cadenas de varias líneas e incluir variables y caracteres especiales.El
<<<operador, la cadena Here , es como un documento Here pero expande las variables. Así por ejemplo:El comando anterior es equivalente a
echo "$bar" | grep foo.Lo que realmente está buscando se llama sustitución de proceso y es otra forma de pasar la salida de un comando a otro. Consta de
<(command).Entonces, por
atejemplo, podrías hacerLos trabajos anteriores debido a la sustitución de proceso en realidad crea un archivo (leer el enlace anterior para más detalles) y es el descriptor de archivo de ese archivo que se pasa con
<aat now.1 El comportamiento predeterminado es sobrescribir, esto se puede modificar configurando la
noclobberopción bash. Si se establece,echo foo > barfallará sibarexiste. En ese caso, se puede forzar su usoecho foo |> bar. Ver la sección 3.6.2 aquí .fuente
<<y<<<(que @steeldriver mencionó en su respuesta)? Además, ¿hay más, algo como>>>>>>o<<<<<<<<<<?<<<:)En este caso,
echo "notify-send HELLO"es un proceso, no un archivo, por lo que necesita una sustitución del proceso en lugar de una redirección de archivoTambién podría haber usado una cadena here para evitar el
echocomando por completofuente