C'è un modo per rendere sicuro l'inserimento nel terminale?

15

Incollo continuamente i nomi dei file / etc nel terminale e occasionalmente il contenuto degli appunti non è quello che mi aspetto.

Spesso il risultato è di diverse centinaia di righe di testo (ad esempio, il codice sorgente) incollate nel prompt dei comandi, attivando dio solo sa quale cattiveria.

C'è un modo per impedire a bash di eseguire ciecamente qualsiasi cosa io incolli? Mi piacerebbe solo incollare il testo, e fammi decidere dopo se voglio eseguirlo.

    
posta Abhi Beckert 21.11.2012 - 00:55
fonte

6 risposte

8

Supponendo che stai usando bash: Se attivi le scorciatoie di emacs con set -o emacs puoi anche usare Emacs per modificare la riga di comando:

  • Scrivi Ctrl-X Ctrl-E al prompt per avviare Emacs
  • Incolla e modifica il contenuto degli appunti nel buffer di Emacs
  • Usa Ctrl-X Ctrl-C per uscire da Emacs ed eseguire automaticamente i comandi.
risposta data 21.11.2012 - 07:30
fonte
5

La soluzione più semplice è probabilmente quella di utilizzare un editor di testo come buffer in cui è possibile ricontrollare il contenuto, quindi copiarlo dall'editor di testo a Terminal. Se usi TextEdit per questo, probabilmente vorrai assicurarti che sia in modalità testo normale (menu Formato Rendi testo normale ; ⇧⌘T) per evitare problemi come link che incollano come link, non come URL.

L'altra cosa da notare è che Bash tenterà di eseguire tutto ciò che precede un carattere di nuova riga, quindi se stai copiando un blocco di testo, puoi assicurarti che la selezione si interrompa dopo l'ultimo carattere, invece di includere fine della linea.

Vuoi questo:

Nonquesto:

Ovviamente, se copi materiale con una nuova riga all'interno del testo ( i.e. più paragrafi), dovrai modificare manualmente la selezione.

    
risposta data 21.11.2012 - 01:19
fonte
1

Anche questo lo capisco!

La mia soluzione è incollare usando il gestore di appunti Launchbar , con il tasto di scelta rapida Cmd+\ . Questo fa apparire un elenco di ritagli recenti, permettendomi di vedere in anteprima il risultato prima di incollare: se non vedo il contenuto che mi aspetto, premo escape prima di rilasciare Cmd. Posso anche usare un tasto freccia per "inserire" un ritaglio di testo, permettendomi di vedere il contenuto riga per riga.

Credo che molti lanciatori lo facciano - Alfred (powerpack addon) & Quicksilver (gratuito), per esempio.

    
risposta data 22.11.2012 - 04:51
fonte
1

Potresti voler esaminare un gestore di appunti. Io uso uno gratuito, leggero, chiamato Jumpcut . Mi consente di tenere più clipboard e vedere cosa è memorizzato in essi prima di incollare effettivamente il contenuto, tutto dalla tastiera.

Ci sono molti manager di appunti là fuori, quindi se Jumpcut non fa galleggiare la tua barca, forse un altro si adatta meglio alle tue esigenze

    
risposta data 28.11.2012 - 22:36
fonte
1

Usa incolla tra parentesi .

La funzione Bracketed paste è una funzione in cui il terminale dice alla shell che hai incollato qualcosa invece di limitarti a digitarlo, quindi la shell non può eseguire il comando finché non premi Invio.

Terminal.app supporta questo, ma non tutti i terminali fanno.

Allo stesso modo, non tutte le shell lo supportano. La versione di bash fornita con OS X non supporta la funzione di bracketing (al momento della scrittura, è v3.2.57).

Tuttavia, zsh supporta l'inserimento tra parentesi:

Zshèperlopiùcompatibileconbash(anchegliscriptprobabilmentefunzioneranno,amenochenonsiusiunafunzionalitàdavverooscura),emeglioinmoltimodi-adesempio,hapersinolamodificadeicomandisupiùrighe!

    
risposta data 23.01.2018 - 21:09
fonte
0

Potresti mettere questo piccolo script di Bash da qualche parte nel tuo PATH :

#!/bin/bash

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

Se metto questi contenuti in /usr/local/pbexecute per esempio e lo rendi eseguibile, potrei tranquillamente eseguire pbexecute dalla riga di comando, che richiederebbe la mia conferma prima di eseguire il contenuto degli appunti.

Un approccio alternativo è quello di lanciare un editor di testo con il contenuto degli appunti dalla shell ed eseguire automaticamente i contenuti modificati all'uscita. Ad esempio:

#!/bin/bash

PBTEMP=$(mktemp -t pbtemp)
pbpaste > $PBTEMP
nano -t $PBTEMP
source $PBTEMP
rm $PBTEMP
    
risposta data 21.11.2012 - 07:45
fonte

Leggi altre domande sui tag