Minha resposta oferece um comando simples em três sintaxes diferentes, que funcionam igualmente, mas uma é um pouco mais curta e mais fácil de digitar que a segunda. A terceira variação é um apelido, ou seja, você pode atribuir um nome personalizado ao comando e chamá-lo executando isso sem precisar se lembrar de coisas complexas.
Preparação:
Primeiro, instale o pacote xsel
que permite acessar a área de transferência do X a partir do terminal:
sudo apt-get install xsel
Variação de comando 1 (curta):
Depois disso, você pode digitar a seguinte linha para copiar o comando anterior para a área de transferência:
xsel -ib <<<!!:q
Se você deseja copiar o segundo comando mais recente, substitua !!
por !-2
, pelo terceiro uso mais recente !-3
e assim por diante.
Para explicar o que você está executando, aqui está um breve detalhamento do comando:
xsel
é uma ferramenta de linha de comando para acessar as pranchetas do X.
Para obter mais informações, leia a página de manual on - line ou executando man xsel
.
- O
-i
parâmetro diz xsel
para ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-b
parâmetro especifica o uso da área de transferência em vez das seleções "primária" ou "secundária" de X.
<<<
é uma sintaxe especial do Bash chamada "Here String".
Basicamente, expande (não avalia!) O argumento (apenas um!) Depois dele e o redireciona como string para o stdin (entrada padrão) do comando antes / depois do qual está.
!!:q
é chamado de "comando bang" para expansão do histórico no bash. Ele se substitui por qualquer linha de comando digitada anteriormente.
Para obter mais informações, leia a página de manual local executando man history
(a página de manual on-line não é útil).
- A
!!
representa a linha de comando anterior e é um sinônimo para !-1
.
Obviamente !-2
significa então a segunda última linha de comando. Não esqueça o sinal de menos -
, caso contrário, ele retornará o 2º (3º / ...) comando que você já digitou.
- Ele
:q
modifica o comando bang e diz ao bash para incluir a substituição entre aspas simples ( '
) para impedir uma expansão adicional pelo shell.
Variação de comando 2 (um pouco mais):
echo !!:q | xsel -ib
echo
tem o trabalho simples de imprimir todos os seus argumentos no stdout do terminal.
!!:q
é chamado de "comando bang" para expansão do histórico no bash. Ele se substitui por qualquer linha de comando digitada anteriormente.
- A
!!
representa a linha de comando anterior e é um sinônimo para !-1
. Obviamente !-2
significa então a segunda última linha de comando. Não esqueça o sinal de menos -
, caso contrário, ele retornará o 2º (3º / ...) comando que você já digitou.
- Ele
:q
modifica o comando bang e diz ao bash para incluir a substituição entre aspas simples ( '
) para impedir uma expansão adicional pelo shell.
|
é um cano. Ele redireciona a saída do terminal ("stdout") do comando antes para a entrada do terminal ("stdin") do comando após ele.
xsel
é uma ferramenta de linha de comando para acessar as pranchetas do X.
Para obter mais informações, leia a página de manual on - line ou executando man xsel
.
- O
-i
parâmetro diz xsel
para ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-b
parâmetro especifica o uso da área de transferência em vez das seleções "primária" ou "secundária" de X.
Variação de comando 3 (alias):
Um alias do bash é uma coisa interessante se você não quer se lembrar de comandos longos ou complicados que costuma usar. Você pode atribuir esse comando a um nome alternativo simples, que pode ser executado em vez do comando longo para obter o mesmo.
Infelizmente, como os comandos bang são um recurso especial do Bash e são expandidos antes que os alias sejam resolvidos, você não pode simplesmente alias uma das variações acima, porque a !!
peça não funcionará. Há uma solução alternativa.
Para definir o alias, execute a seguinte linha no seu terminal. Observe que você pode escolher qualquer nome de variável Bash válido em vez de copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
No entanto, isso só é persistente na sua sessão atual do Bash, o que significa que o alias desaparecerá depois que você fechar a janela do terminal. Você pode torná-lo persistente em todas as suas sessões do Bash adicionando esta linha acima ao final do seu ~/.bashrc
arquivo ou ao seu ~/.bash_aliases
arquivo, se você tiver uma.
Novamente, uma breve quebra de linha:
alias name='command'
é a sintaxe para definir um alias no Bash. O command
será executado sempre que você executar a name
partir de agora.
history -p \!\!
envia a linha de comando executada anteriormente para stdout (saída padrão). Sem a -p
opção, ele não apenas imprimiria, mas também executaria o comando novamente.
Observe que precisamos escapar do bangs ( !
) com barras invertidas ( \
), porque, caso contrário, o bash os expandiria quando tentamos definir o alias, o que não faz sentido, pois eles precisam estar no alias como estão.
Novamente, você também pode especificar o [n] -ésimo comando recente substituindo o segundo retorno por -n
, por exemplo \!-2
.
|
é um cano. Ele redireciona a saída padrão ("stdout") do comando antes dele para o padrão do terminal ("stdin") do comando após ele.
xsel
é uma ferramenta de linha de comando para acessar as pranchetas do X.
Para obter mais informações, leia a página de manual on - line ou executando man xsel
.
- O
-i
parâmetro diz xsel
para ler a partir do stdin (geralmente isso significa entrada do teclado, mas vamos redirecionar algo aqui)
- O
-b
parâmetro especifica o uso da área de transferência em vez das seleções "primária" ou "secundária" de X.
<<<"!!" xsel -ib
<<<
estrutura é chamada novamente? E eu acho que<<<!!:q xsel -ib
é melhor (deixar o comando bang histórico fazer a citação), ou você discorda?!!:q
usa aspas simples ('
) ...<<<"!!" xsel -ib
. Sim,<<<!!:q xsel -ib
é melhor, vá em frente.xsel
tem uma sintaxe interessanteVocê pode usar
xclip
:Então, no seu caso:
c
significa área de transferência.Pode ser necessário instalar
xclip
primeiro:EDITAR:
Se você deseja que o comando digitado (e não a saída) seja copiado para a área de transferência, você pode usar as seqüências de caracteres Here:
Ou um cachimbo:
fonte
echo "command" | xclip -selection clipboard
... Ou torná-lo um roteiro sob~/.bin
:echo "$@" | xclip -selection clipboard
. Digamos que você o salve como "cpy", você poderácpy youtube-dl stuff
e ele será copiado para a área de transferência sem ser executado.echo "$@" | xclip -selection c && $@
ou algo mais inteligente com eval ...Acabei de fazer um pequeno script para
zsh
que isso aconteçaxclip
:Este script copia o último comando que foi inserido no shell / terminal na área de transferência do sistema. Não funcionaria em um servidor remoto típico.
Eu pensei que levaria apenas alguns minutos para escrever esse script, mas levou surpreendentemente tempo para fazê-lo funcionar, enquanto eu tropecei no modo como
zsh
lida com a história.O
tail -n 2
primeirosed
é lidar com o fato de que o comando para esse script em si está sendo registrado no histórico e, portanto, obtém duas linhas do histórico e remove o último.Esse script funciona, e foi um quebra-cabeça divertido, mas estou realmente curioso para saber se existe uma maneira mais simples ou mais elegante de fazer isso
zsh
.fonte
tail
esed
em um ou dois comandos. Aqueles comandos uso!!
que é explicado aqui - deve estar disponível em ZSH ....!!
fato parece que seria útil aqui, obrigado!Estou usando como gerente da área de transferência, então.
Último comando para a área de transferência
Prancheta para vim scratch
Específico para ZSH
Eu acho que essas idéias podem ajudar você a criar sua própria solução
fonte