Come inserisco i risultati di un comando unix nella CLI di tcsh?


0

Mi trovo spesso a voler creare file e cartelle con data datation.

Ad esempio, mi piacerebbe essere in grado di creare una cartella con un datestamp yymmdd chiamato "160408-projectA" digitando:

mkdir <ctrl-;>-projectA

Ho provato ad usare bindkey -cs '^;' '`date +%y%m%d | perl -pe chomp`'

... ma dice "specifica chiave errata ^;". Anche passando a un altro tasto, ad esempio ^ o, viene visualizzato l'errore "160408: comando non trovato.".

È possibile con tcsh?


Ugh. Questo sembra possibile; probabilmente puoi capirlo. Tuttavia, si noti che se si dispone di un elenco di numeri come 160408, esiste un approccio migliore rispetto alla semi-automazione che si cerca. L'approccio migliore consiste nell'utilizzare le capacità di programmazione per creare automazione completa, leggendo dall'elenco secondo necessità. Troppo spesso, le persone corrono avanti con la prima soluzione che possono vedere, invece di fare un passo indietro e pensare a ciò che sarebbe più ideale. In teoria, quanto è automatizzabile? Se la tua serie di passaggi è definita con precisione, di solito può essere eseguita da un programma.
TOOGAM

Chiarito che "160408" è un datestamp yymmdd. @TOOGAM, non sono sicuro di quale "elenco" ti riferisca. E ho provato a capirlo per un po 'prima di chiedere qui. ;)
Bryan

Risposte:


0

Ho il sospetto che Ctrl- ;non è possibile. Prima di entrare nel perché, lasciami discutere cosa è possibile.

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

Basta togliere la "c" dal tuo tentativo di usare Ctrl- Oe funziona benissimo.

Il tcshcomando probabilmente non supporta Ctrl- il ;che è un progetto molto sensato, perché tcsh è pensato per funzionare con un terminale Unix tradizionale (o un software che si comporta in modo simile), e i terminali Unix tradizionali non supportano Ctrl- ;.

Quindi, perché i terminali Unix non supportano Ctrl- ;?

Il punto principale di tutte queste Ctrlsequenze era fornire un modo semplice per digitare / rappresentare i primi 32 caratteri ASCII perché quei caratteri non hanno caratteri facilmente abilitabili. L'equivalente diretto di Ctrl- ;non è poi così difficile da scrivere senza la necessità di una Ctrlsequenza, motivo per cui nessun carattere speciale Ctrl (come Ctrl- ;) è comunemente supportato.

Elaborerò. In primo luogo, noterò che gran parte di questa risposta è stata fatta facendo riferimento ad alcune informazioni che ho documentato, su CtrlSequenze, sul mio sito Web all'indirizzo ] [CyberPillar] [: CtrlSequenze di tastiere .

Una delle regole per i caratteri Ctrl è che se tieni premuto Ctrle premi un carattere con un valore ASCII compreso tra 63 e 95, finirai con un carattere che ha 64 in meno di un valore ASCII rispetto al carattere che hai premuto. (Sì, 64 viene sottratto da 63, se applicabile. Questo verrà discusso più avanti).

Un'altra regola è che se tieni premuto Ctrle premi un personaggio con un valore ASCII compreso tra 96 ​​e 122, finirai con un carattere che è 96 in meno del carattere che hai digitato. Di conseguenza, Ctrl- Shift- A(lettera maiuscola) e Ctrl- a(lettera minuscola) finiranno con lo stesso carattere. Ecco perché se premi Ctrl- c, potresti vedere Ctrl- Cechi di nuovo. Il terminale converte ASCII 3 in una stringa che rappresenta Ctrl- Cdurante la preparazione del messaggio di output, ignorando il fatto che è stato premuto Ctrl- cper generare ASCII 3.

;(Punto e virgola) è ASCII 59, che non è ASCII da 64 a 95 né ASCII da 96 a 122. Pertanto, le regole appena specificate (che coprono ASCII da 63 a 122) non forniscono alcuna interpretazione comune per ASCII 59 (per coprire Ctrl- ;).

Un valore, che sembra un'eccezione, è la regola comunemente supportata, che è per Ctrl- ?. Se Ctrl- ;avesse un'interpretazione comune, allora l'interpretazione comune probabilmente seguirebbe lo stesso modello di Ctrl- ?. Il ?personaggio è ASCII 63. Quindi sottraendo 64 da 63 anni -1, che sostanzialmente equivale a 127 con una condizione di underflow, che può essere ignorata. Il risultato è che Ctrl- la ?combinazione di tasti finisce per aggiungere effettivamente 64, quindi 63 + 64 = 127. ASCII 127 spesso corrisponde alla Deletechiave, che può essere difficile da rappresentare poiché Deleteha un comportamento speciale comune (che consiste nell'eliminare il testo). Quindi ASCII 127 può spesso trarre sostanziali benefici avendo un supporto comuneCtrlsequenza. In questo modo, una persona può digitare il codice ASCII 127 in modo relativamente semplice, usando la sequenza della tastiera.

Seguendo quel modello (di aggiungere 64), Ctrl- ;si tradurrebbe in ASCII 123 che è una parentesi graffa sinistra (" {"). La gente non supportava Ctrl- ;come un modo standard comune di scrivere {poiché {ha il suo modo relativamente semplice di inserirlo sulla tastiera (che è premendo Shift- [).


Forse un problema terminale, ma con: bindkey -s ^o '`date +%y%m%d | perl -pe chomp`' ... quando digito "mkdir <ctrl-o>" mi dà: mkdir `date +%y%m%d | perl -pe chomp` (Sono su OS X, RH6 fa lo stesso.)
Bryan

Sì, è previsto. Quindi continua a digitare. Quindi mkdir <ctrl-;>-projectAdiventa ciò mkdir ``date +%y%m%d | perl -pe chomp``-projectAche si traduce nella creazione della cartella richiesta. Non mostra la data sulla riga di comando, ma fa esattamente quello che hai chiesto. Potresti anche fare: bindkey -s ^ i '! ls -t | tail -1!'(sostituisci!' s con i backtick, che non riesco a citare come desiderato in questo commento)
TOOGAM

Ah, ok, speravo che eseguisse il comando e poi spingessi i risultati sulla riga di comando in modo da poter vedere esattamente cosa sarebbe stato creato prima di premere invio. L'opzione -c per bindkey sembra essere vicina, mi sembra di aver bisogno di una combinazione dei due.
Bryan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.