¿Hay alguna manera de hacer que el pegado en la Terminal sea seguro?

15

Pegue los nombres de archivo / etc en la Terminal todo el tiempo, y ocasionalmente el contenido del portapapeles no es lo que espero.

A menudo, el resultado es varios cientos de líneas de texto (por ejemplo, código fuente) pegadas en el símbolo del sistema, lo que hace que dios solo sepa qué desagradable.

¿Hay alguna forma de evitar que bash ejecute ciegamente lo que pegue? Me gustaría que solo pegara el texto y me dejara decidir después si quiero ejecutarlo.

    
pregunta Abhi Beckert 21.11.2012 - 00:55

6 respuestas

8

Suponiendo que está utilizando bash: si activa los accesos directos de emacs con set -o emacs , también puede usar Emacs para editar la línea de comandos:

  • Escriba Ctrl-X Ctrl-E en el indicador para iniciar Emacs
  • Pegue y edite el contenido de su portapapeles en el búfer de Emacs
  • Use Ctrl-X Ctrl-C para salir de Emacs y ejecutar los comandos automáticamente.
respondido por el nohillside 21.11.2012 - 07:30
5

La solución más sencilla es, probablemente, utilizar un editor de texto como un búfer donde puede verificar el contenido y luego copiarlo desde el editor de texto a la Terminal. Si usa TextEdit para esto, probablemente querrá asegurarse de que esté en modo de texto plano (menú Formato Hacer texto sin formato ; ⇧⌘T) para evitar problemas como los enlaces se pegan como enlaces, no como URL.

La otra cosa a tener en cuenta es que Bash intentará ejecutar todo lo que precede a un carácter de nueva línea, por lo que si está copiando un bloque de texto, es posible que desee asegurarse de que su selección se detiene después del último carácter, en lugar de incluir el final de la línea.

Quieres esto:

Noesto:

Por supuesto, si está copiando cosas con nuevas líneas dentro del texto ( es decir varios párrafos), entonces deberá editar la selección manualmente.

    
respondido por el robmathers 21.11.2012 - 01:19
1

¡También me sale esto!

Mi solución es pegar usando el administrador del portapapeles de la barra de inicio de Launchbar , con la tecla de acceso directo Cmd+\ . Esto muestra una lista de recortes recientes, lo que me permite obtener una vista previa del resultado antes de pegar: si no veo el contenido que espero, presiono escape antes de soltar Cmd. También puedo usar una tecla de flecha para "ingresar" un recorte de texto, permitiéndome ver el contenido línea por línea.

Creo que la mayoría de los lanzadores hacen esto: Alfred (addpack powerpack) & Quicksilver (gratis), por ejemplo.

    
respondido por el ptim 22.11.2012 - 04:51
1

Es posible que desee ver en un administrador de portapapeles. Yo uso uno ligero y gratuito llamado Jumpcut . Me permite mantener varios portapapeles y ver qué hay almacenado en ellos antes de pegar los contenidos, todo desde el teclado.

Hay muchos administradores de portapapeles por ahí, así que si Jumpcut no hace flotar su barco, tal vez otro se adapte mejor a sus necesidades

    
respondido por el Sigsegv 28.11.2012 - 22:36
1

Utilice pasta con corchetes .

La pegada entre corchetes es una característica en la que el terminal le dice al shell que pegaste algo en lugar de solo escribirlo, por lo que el shell no puede ejecutar el comando hasta que presionas Intro.

Terminal.app admite esto, pero no todos los terminales.

Del mismo modo, tampoco todos los shells lo soportan. La versión de bash que viene con OS X no admite el pegado entre corchetes (en el momento de la escritura, es v3.2.57).

Sin embargo, zsh admite el pegado entre corchetes:

Zshesmayormentecompatibleconbash(inclusolosscriptsprobablementefuncionarán,amenosqueusesalgúntipodecaracterísticarealmenteoscura),ymejorenmuchosaspectos,porejemplo,¡inclusotieneedicióndecomandosdelíneasmúltiples!

    
respondido por el SilverWolf 23.01.2018 - 21:09
0

Podrías poner este pequeño script Bash en algún lugar de tu PATH :

#!/bin/bash

read -p "Are you sure you wish to execute \'$(pbpaste)\'? (Y/n) "    
[[ $REPLY =~ ^[Yy]?$  ]] && pbpaste | bash

Si coloco estos contenidos en /usr/local/pbexecute por ejemplo y los hago ejecutables, podría ejecutar con seguridad pbexecute desde la línea de comandos, lo que solicitaría mi confirmación antes de ejecutar los contenidos del portapapeles.

Un enfoque alternativo es iniciar un editor de texto con los contenidos del portapapeles desde el shell y ejecutar automáticamente los contenidos editados al salir. Por ejemplo:

#!/bin/bash

PBTEMP=$(mktemp -t pbtemp)
pbpaste > $PBTEMP
nano -t $PBTEMP
source $PBTEMP
rm $PBTEMP
    
respondido por el Gerry 21.11.2012 - 07:45

Lea otras preguntas en las etiquetas