Perdón por el título confuso!
Supongamos que corro
apt-cache depends kde-window-manager > ~/Desktop/kwin-depends
Obtendré un archivo llamado "kwin-dependen" en mi carpeta de escritorio.
¿Hay algún truco para incluir el comando que emití como parte del archivo, preferiblemente al comienzo del archivo?
Entonces, al menos en 14.04 LTS, las primeras líneas se verían así:
apt-cache depends kde-window-manager > ~/Desktop/kwin-depends
kde-window-manager
Depends: kde-runtime
Depends: libc6
|Depends: libegl1-mesa
Depends: <libegl1-x11>
En lugar de simplemente así:
kde-window-manager
Depends: kde-runtime
Depends: libc6
|Depends: libegl1-mesa
Depends: <libegl1-x11>
command-line
bash
DK Bose
fuente
fuente
Respuestas:
Simplemente usaría una función simple. Agregue esto a su
~/.bashrc
archivo:Ahora, cada vez que desee ejecutar un comando e imprimirlo, puede hacer lo siguiente:
Lo anterior produce este archivo:
fuente
apt-cache depends
aacd
, me sale "No comando 'ACD' encontró, quiso decir: ..." cuando corroruncom acd leafpad > out
.ls
tiene un aliasls --color=auto'
en la realidad. Lo que podría hacer (siempre y cuando no hay comillas simples o dobles en su alias), es la siguiente:$ terdonsFunction $(alias ls | awk -F '=' '{$1="";print}'| tr "'" " ")
.MYCOMMAND="apt-cache depends"; terdonsFunction $MYCOMMAND leafpad > out.txt
Tu puedes hacer:
Lo mismo usando
echo
cadenas en lugar de Aquí (<<<
):tee
escribirá en STDOUT y también en el archivofile.txt
El STDOUT de
tee
ieapt-cache depends kde-window-manager
será alimentadobash
para ejecutar el comando y agregar el STDOUT afile.txt
.Ejemplo:
fuente
tee
pero el mío seguía fallando. ¡Buen trabajo! +1tee
parece ordenado :)Lo más minimalista: enfoque # 4 y # 3, ambos podrían convertirse en función; # 2 mi favorito -
awk
. # 1 usa elscript
comando: herramienta muy versátil, útil para grabar líneas de comando en general; aplicable en cualquier lugar, para lo que quiera grabar.Enfoque n. ° 1: hay un
/usr/bin/script
comando (que viene con ubuntu por defecto) para grabar la salida de la línea de comandos, que captura todo, junto con el indicador y el comando. Para guardar un comando y su salida en un archivo específico, use el-c
indicador y especifique el archivo de salida. EjemploEnfoque # 2: hacker de awk
Awk tiene una
system()
función que le permite ejecutar comandos de shell desdeawk
script o comando . La salida se mostrará en la pantalla, primero el comando, luego la salida. Para redirigir lo que ve a un archivo, utilice el>
operador.Eso se puede hacer de dos maneras: solicite al usuario que ingrese cosas desde stdin o como argumento de línea de comando. El primero es más fácil de lograr, por lo tanto, publicar eso.
(1)
awk 'BEGIN{ print "Enter command to run: "; getline com < "/dev/stdin"; system(com) }'
(2) Versión de línea de comando args; sin incluir la salida para evitar responder demasiado tiempo. Nuevamente, agregue
>
para redirigir al archivoEnfoque n. ° 3: pídale a bash que haga el trabajo por usted
Redireccionar a archivo con
>
operador:bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Enfoque n. ° 4: (mi segundo favorito)
Inspirado en la publicación de ByteCommander; podemos usar
read
y luego ejecutar los comandos necesarios en subshellEjecución de muestra:
Enfoque # 5:
Use
echo
ohere string
(aka<<< "string"
) para proporcionar argumentos ash -c
través dexargs
Y si quieres, puedes usar este mismo truco con un alias:
fuente
awk
realmente es un chico muy configurable, ¿no? `script se ve útil para algunos otros usos también.script -q outputfile
outputfile
Ejemplo
comienzo
script
Comience su comando
Presione Ctrl-D
Muestra tu comando y salida
y verás algo como esto
fuente
Si desea expansión de alias (solo bash) puede hacerlo de esta manera:
Ahora puedes correr
fuente
Puede haber una manera más fácil, pero puede hacerlo mediante un script:
Cree un archivo
script
con este contenido en su carpeta Inicio y otorgue permiso de ejecuciónEjecútelo de esta manera:
fuente
script.sh
siempre cree un archivo llamadoscript.log
con su salida.Solución extremadamente simple usando una función Bash de una línea
Preparación:
Este enfoque utiliza una función bash personalizada para proporcionar la funcionalidad deseada. Lo define ejecutando la siguiente línea en su sesión de terminal. tenga en cuenta que puede elegir cualquier nombre de variable bash válido en lugar de
runandlog
:Sin embargo, esto solo persiste durante la sesión de Bash actual, es decir, después de cerrar la ventana del terminal, la función desaparecerá.
Sin embargo, si lo intentó y le gustó, puede hacerlo siempre editando su
~/.bashrc
archivo y agregando esta línea al final.Cómo utilizar:
Después de haber definido la función, puede usarla para ejecutar comandos mientras registra tanto el comando en sí como su salida en un archivo. Incluso podría agregar más información como el usuario que lo ejecutó, que ya incluí en la función, o la hora exacta en que se ejecutó. ¡Las solicitudes de características en los comentarios son bienvenidas! :)
La sintaxis es simple:
Ejemplo:
Un ejemplo de sesión como usuario
bytecommander
, que opera desde el directorio de inicio podría verse así:Lo que dará como resultado un nuevo archivo
mylogfile
(si ya existe, la función agregará la salida a él) en el directorio actual con el contenido:fuente
Un truco bastante poco inteligente pero funcional sería:
Feo, pero funciona!
fuente
Simplemente puede pasar el comando a una función que imprimirá primero el comando y luego la salida del comando (las redirecciones se mantienen fuera del comando impreso intencionalmente, puede cambiar esto fácilmente eliminando las comillas del comando e imprimiendo y ejecutando en su
$@
lugar de$1
en la función):Para agregar el comando después, puede ejecutar este comando, que insertará el último comando ejecutado en la parte superior de un archivo:
<<<"[...]"
: aquí cadena;[...]
se redirige acat
'sstdin
;$(<foo)
: sustitución de comando; se reemplaza con el contenido de "foo";cat [...] - >foo
: Concatenastdin
a[...]
y salidas a "foo";<([...])
: sustitución del proceso: se reemplaza con un descriptor de archivo que contiene la salida de[...]
;history 2 | sed -n '1s/ [0-9][0-9]* \(.*\)/\1\n/p'
: genera los dos últimos comandos, elimina dos espacios seguidos de uno o más dígitos seguidos de dos espacios desde la primera línea y lo imprime;fuente
$1
? Y no hay necesidad de hacerloeval
.eval
no es necesario, no estoy seguro de por qué lo agregué antes. Gracias.