Como insiro os resultados de um comando unix no tcsh CLI?

0

Muitas vezes, eu me vejo querendo criar arquivos e pastas com carimbos de data e data.

Por exemplo, eu adoraria poder criar uma pasta com um datestamp yymmdd chamado "160408-projectA" digitando:

mkdir <ctrl-;>-projectA

Eu tentei usar bindkey -cs '^;' ''date +%y%m%d | perl -pe chomp''

... mas diz "má especificação chave"; Mesmo mudando para outra chave, por ex. ^ o, com erros "160408: Comando não encontrado".

Isso é possível com o tcsh?

    
por Bryan 08.04.2016 / 18:35

1 resposta

0

Eu suspeito que Ctrl - ; não é possível. Antes de entrar no porquê, deixe-me discutir o que é possível.

bindkey -s '^;' ''date +%y%m%d | perl -pe chomp''

Apenas tire o "c" de sua tentativa de usar Ctrl - O , e ele funcionará bem.

O comando tcsh provavelmente não suporta Ctrl - ; , que é um design muito sensato, porque o tcsh serve para funcionar com um terminal Unix tradicional (ou alguns softwares que se comportam de maneira semelhante), e os tradicionais terminais Unix não suportam Ctrl - ; .

Então, por que os terminais Unix não suportam Ctrl - ; ?

O ponto principal para todas estas sequências Ctrl foi fornecer uma maneira fácil de digitar / representar os primeiros 32 caracteres ASCII, porque esses caracteres não possuem caracteres facilmente compatíveis com o tipo. O equivalente direto a Ctrl - ; não é tão difícil de digitar sem a necessidade de uma seqüência Ctrl , e é por isso que não O caractere especial Ctrl (como Ctrl - ; ) é comumente suportado.

Vou elaborar. Primeiro, observarei que grande parte dessa resposta foi feita referenciando algumas informações que documentei, sobre as Ctrl Sequências, no meu site em ] [CyberPillar] [: Ctrl Sequências do teclado .

Uma das regras para os caracteres Ctrl é que se você pressionar Ctrl e pressionar um caractere com um valor ASCII de 63 a 95, você terminará com o caractere que tenha 64 menos de um Valor ASCII do que o caractere que você pressionou. (Sim, 64 é subtraído de 63, se aplicável. Isso será discutido mais tarde.)

Outra regra é que, se você pressionar Ctrl e pressionar um caractere com um valor ASCII de 96 a 122, terminará com um caractere que seja 96 menor que o caractere digitado. Como resultado, Ctrl - Deslocamento - A (letra maiúscula) e Ctrl - a (letra baixa) terminará com o mesmo caractere. É por isso que se você pressionar Ctrl - c , você poderá ver Ctrl - C ecoado de volta. O terminal converte o ASCII 3 para uma string representando Ctrl - C ao preparar a mensagem de saída, ignorando o fato de que você pressionou Ctrl - c para gerar o ASCII 3.

; (Ponto-e-vírgula) é ASCII 59, que não é ASCII de 64 a 95 nem ASCII de 96 a 122. Portanto, as regras que foram especificadas (cobrindo ASCII de 63 a 122) não forneça qualquer interpretação comum para o ASCII 59 (para cobrir Ctrl - ; ).

Um valor, que parece uma exceção, é a regra comumente suportada, que é para Ctrl - ? . Se Ctrl - ; tiver uma interpretação comum, então a interpretação comum provavelmente seguirá o mesmo padrão que Ctrl - ? . O caractere ? é ASCII 63. Subtrai 64 de 63 yeilds -1, o que basicamente equivale a 127 com uma condição de underflow, que pode ser ignorada. O resultado é que a combinação de teclas Ctrl - ? efetivamente acaba adicionando 64, então 63 + 64 = 127. ASCII 127 freqüentemente corresponde ao Delete key, que pode ser difícil de representar, pois o Delete possui um comportamento especial comum (que é excluir texto). Assim, o ASCII 127 pode freqüentemente se beneficiar substancialmente com uma seqüência Ctrl comumente suportada. Dessa forma, uma pessoa pode digitar o código ASCII 127 com relativa facilidade, usando a seqüência do teclado.

Seguindo esse padrão (de adicionar 64), Ctrl - ; resultaria em ASCII 123, que é uma chave esquerda (" { "). As pessoas não suportavam Ctrl - ; como uma forma padrão comum de digitação { pois { tem suas próprias maneira fácil de inseri-lo no teclado (pressionando Shift - [).

    
por 08.04.2016 / 22:24