Você pode tentar filtrar edit-and-execute-command()
( manual ) através de um $EDITOR
ou $VISUAL
:
$ touch foo.sh
$ open foo.sh
Defina foo.sh
content para o seguinte e salve:
#!/usr/bin/env bash
# copy current command input to clipboard -- requires local session
cat $1 | pbcopy
# clear the prompt, so no command gets executed when closing this script
# comment out the following line to execute the command you entered instead
echo -n "" > $1
exit 0
Em seguida, torne executável e defina como visual:
$ chmod +x foo.sh
$ export VISUAL=/Users/danielbeck/foo.sh
Em um prompt bash
(ou qualquer prompt alimentado com readline
, acho), você pode copiar a entrada do comando atual pressionando Ctrl-X Ctrl-E
para invocar edit-and-execute-command()
.
Edite seu arquivo ~/.inputrc
para alterar a tecla de atalho para isso. Edite seu .bash_profile
para manter isso como sua $EDITOR
/ $VISUAL
- a desvantagem é óbvia, você nunca mais terá um $EDITOR
adequado, infelizmente
Como alternativa, você pode tentar replicar o que este usuário está fazendo , mas ele está usando zsh
, não bash
.
O próprio Terminal não sabe qual parte da linha atual é o seu prompt, e qual parte é sua entrada. Então, acessando suas linhas, por exemplo através do AppleScript não funcionaria em geral.
Você pode, no entanto, ler a saída completa da guia atual e obter sua última linha e, por meio da filtragem, tentar remover a parte do prompt dela.
Meu prompt termina com $
, então o seguinte comando funciona:
tell application "Terminal" tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2-"
Ele obterá a propriedade history
da guia atual da janela atual e filtrará por sed
para remover todas as linhas vazias, depois obterá a última linha usando tail
e, em seguida, removerá tudo até e incluindo a primeira $
da linha (isto é, meu prompt) usando cut
.
A saída deste programa é sua linha de comando atual. Exercício realmente inútil:
~ $ osascript Library/Scripts/get_line.scpt
osascript Library/Scripts/get_line.scpt
Para copiá-lo para a área de transferência no final, altere para o seguinte:
tell application "Terminal" to tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2- | pbcopy"
Você pode usar o Automator para criar um serviço que receba nenhuma entrada no aplicativo Terminal e execute um único A ação Executar o AppleScript Script consiste no código acima. Salve e, opcionalmente, atribua um atalho de teclado em Preferências do Sistema »Teclado» Atalhos de Teclado »Serviços .