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 -f
opció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 | bar
ybar < foo
es 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
foo
y 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 programafoo
y guarda su salida en el archivobar
, sobrescribe 1 su contenido y lo crea si no existe.foo >> bar
: ejecuta el programafoo
y 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.file
redirigirá todo el texto escrito hasta que encuentre la cadena final (EOF
en 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
at
ejemplo, 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
noclobber
opción bash. Si se establece,echo foo > bar
fallará sibar
existe. 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
echo
comando por completofuente