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
~/.bashrcarchivo:Ahora, cada vez que desee ejecutar un comando e imprimirlo, puede hacer lo siguiente:
Lo anterior produce este archivo:
fuente
apt-cache dependsaacd, me sale "No comando 'ACD' encontró, quiso decir: ..." cuando corroruncom acd leafpad > out.lstiene 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.txtTu puedes hacer:
Lo mismo usando
echocadenas en lugar de Aquí (<<<):teeescribirá en STDOUT y también en el archivofile.txtEl STDOUT de
teeieapt-cache depends kde-window-managerserá alimentadobashpara ejecutar el comando y agregar el STDOUT afile.txt.Ejemplo:
fuente
teepero el mío seguía fallando. ¡Buen trabajo! +1teeparece ordenado :)Lo más minimalista: enfoque # 4 y # 3, ambos podrían convertirse en función; # 2 mi favorito -
awk. # 1 usa elscriptcomando: 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/scriptcomando (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-cindicador y especifique el archivo de salida. EjemploEnfoque # 2: hacker de awk
Awk tiene una
system()función que le permite ejecutar comandos de shell desdeawkscript 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.txtEnfoque n. ° 4: (mi segundo favorito)
Inspirado en la publicación de ByteCommander; podemos usar
ready luego ejecutar los comandos necesarios en subshellEjecución de muestra:
Enfoque # 5:
Use
echoohere string(aka<<< "string") para proporcionar argumentos ash -ctravés dexargsY si quieres, puedes usar este mismo truco con un alias:
fuente
awkrealmente es un chico muy configurable, ¿no? `script se ve útil para algunos otros usos también.script -q outputfileoutputfileEjemplo
comienzo
scriptComience 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
scriptcon este contenido en su carpeta Inicio y otorgue permiso de ejecuciónEjecútelo de esta manera:
fuente
script.shsiempre cree un archivo llamadoscript.logcon 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
~/.bashrcarchivo 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$1en 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: Concatenastdina[...]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.evalno es necesario, no estoy seguro de por qué lo agregué antes. Gracias.