traduccion comandos bourne again linux bash unix

linux - bourne - ¿Por qué el comando "at" siempre me advierte que los comandos se ejecutarán a través de sh?



bourne again shell (4)

Cada vez que uso el comando "at", obtengo este mensaje:

warning: commands will be executed using /bin/sh

¿De qué está tratando de advertirme? Más importante aún, ¿cómo desactivo la advertencia?


¿La advertencia tiene algún efecto dañino aparte de ser molesto? La página man no menciona ninguna forma de apagarlo, por lo que no creo que pueda evitar que se emita sin reconstruir su fuente.

Ahora, si quiere simplemente no verlo, puede usar en [tiempo] 2> / dev / null para enviarlo al olvido, pero, desafortunadamente, las instrucciones at> se imprimen en STDERR por alguna razón (un error, IMO: deberían ir a STDOUT), así que también están ocultos por esto. Es posible trabajar con algunas tuberías de shell que eliminarán la advertencia sin tener que seguir las instrucciones, pero a) mi intento de esto ( en [tiempo] 2> & 1 | grep -v advertencia ) no funciona yb) incluso si puede encontrar una combinación que funcione, no será adecuada para alias (ya que el tiempo va en el medio en lugar de al final), por lo que tendrá que escribirlo en su totalidad cada vez que lo use o bien escribir un script envoltorio alrededor para manejarlo.

Entonces, a menos que cause problemas reales, diría que probablemente sea mejor que ignore la advertencia como el resto de nosotros.


Si desea evitar ese mensaje, ejecute ''at'' un script que llame a un entorno específico, ya sea ksh, bash, csh, zsh, perl, etc.

Además , consulte la página del manual ''at'' http://www.rt.com/man/at.1.html para obtener más información.

at and batch read commands from standard input or a specified file which are to be executed at a later time, using /bin/sh.


Sirve como una buena advertencia para aquellos de nosotros que no usamos bash como nuestro caparazón, porque nos olvidaremos de que una característica que está en nuestro caparazón cotidiano no estará disponible cuando este código se ejecute a la hora señalada.

es decir

username@hostname$ at 23:00 warning: commands will be executed using /bin/sh at> rm **/*.pyc at> <EOT> job 1 at 2008-10-08 23:00

El uso de ''**'' es perfectamente válido zsh, pero no / sbin / sh! Es fácil cometer estos errores si está acostumbrado a usar un caparazón diferente, y es su responsabilidad recordar hacer lo correcto.


Le recuerda que los comandos serán ejecutados por Bourne Shell estándar, lo que significa que su sintaxis de comando debe ser compatible con ese shell. (Hecho "divertido": me acabo de dar cuenta de que te avisa aunque tu shell actual sea /bin/sh . Debe ser un error).

Un ''truco fácil'' para eliminar el mensaje es simplemente eliminar la primera línea de la salida. Esto se puede hacer de una manera conveniente mediante la redefinición del comando at :

at() { /usr/bin/at $@ 2>&1 | tail -n +2; }

Puede agregarlo al archivo que contiene sus otros alias de shell ( ~/.bashrc , ~/.zshrc o equivalente para su shell).

NOTA: el comando de la tail en el ''truco'' anterior también eliminará el prefijo at> al escribir comandos en línea. Probablemente no sea un factor decisivo, pero algo a tener en cuenta.