Como posso aparar o retorno de carro do texto que está sendo canalizado no bash?

3

Estou usando este comando para obter meu último comando digitado:

history | cut -c 8- | tail -n 2 | head -n 1

Funciona muito bem no bash, removendo os números de linha, mas há um problema que tenho com ele (er, aborrecimento, porque eu quero apenas o comando) e estou colocando isso no gerenciador da área de transferência xsel :

Ele também captura o novo retorno de linha / carro ...

Eu sei que em alguns shells você pode usar:

echo "text \c"

Não sei como incorporar isso em bash .

Pontos extras para a solução mais fácil de digitar em tempo real:)

    
por cwd 08.06.2012 / 20:34

2 respostas

7

Você pode obter o último comando em seu histórico com o bash builtin !! e usar echo -n para imprimir esse comando sem um caractere de nova linha no final:

echo -n !!

O argumento !! será expandido para a sequência de comandos real e -n garante que a saída não contenha caracteres de nova linha.

    
por 08.06.2012 / 20:47
1

Se eu estou lendo sua pergunta corretamente, você precisa remover a nova linha à direita. Experimente este perl bit: 'perl -ne' chomp and print '

Exemplos:

[root@talara test]# ls -la
total 20
drwxr-xr-x   3 root root 4096 Jun  7 21:30 .
dr-xr-x---. 28 root root 4096 Jun  8 08:42 ..
-rw-r--r--   1 root root    0 Jun  7 15:10 FILE1
drwxr-xr-x   3 root root 4096 Jun  7 14:49 ham
-rw-r--r--   1 root root   36 Jun  7 21:31 t
-rw-r--r--   1 root root   11 Jun  7 16:21 test

[root@talara test]# ls -la | perl -ne 'chomp and print'
total 20drwxr-xr-x   3 root root 4096 Jun  7 21:30 .dr-xr-x---. 28 root root 4096 Jun  8 08:42 ..-rw-r--r--   1 root root    0 Jun  7 15:10 FILE1drwxr-xr-x   3 root root 4096 Jun  7 14:49 ham-rw-r--r--   1 root root   36 Jun  7 21:31 t-rw-r--r--   1 root root   11 Jun  7 16:21 test

E para facilitar a digitação repetidamente e em tempo real, você pode criar um alias: alias chomp="perl -ne 'chomp and print'"

    
por 08.06.2012 / 20:39