Domanda

Vorrei poter dire cose come

cd [.fred] e fai in modo che la mia directory predefinita vada lì, e la mia richiesta di modifica per indicare il percorso completo della mia posizione corrente.

È stato utile?

Soluzione

Ecco la mia configurazione:

Hai bisogno di 2 file (digitati di seguito): godir.com e prompt.com nel tuo sys $ login

Puoi definire un simbolo

CD == "@sys$login:godir.com"

Ma ti suggerisco di usare qualcos'altro ... (ovvero SD == " @ sys $ login: godir.com ")

Modifico il testo di aiuto. Era in francese ...

Dovrai digitare nuovamente i personaggi di escape in godir.com Sostituisci ESC con la vera fuga in GRAPH_BOUCLE: (vedi il fondo di godir.com)

Quindi per usarlo:

SD ?
SD a_directory
...

Spero che sia d'aiuto.


Ecco prompt.com

$       noeud   = f$trnlnm("SYS$NODE") - "::"
$       if noeud .eqs. "HQSVYC" then noeud = "¥"
$!
$       noeud = noeud - "MQO"
$       def_dir = f$directory()
$       def_dir = f$extract(1,f$length(def_dir)-2,def_dir)
$boucle:
$       i = f$locate(".",def_dir)
$       if i .eq. f$length(def_dir) then goto fin_boucle
$       def_dir = f$extract(i+1,f$length(def_dir)-1,def_dir)
$       goto boucle
$!
$fin_boucle:
$!      temp = "''noeud' ''def_dir' " + "''car_prompt'"
$       temp = "''noeud'" -
             + " ''def_dir' " -
             + "''f$logical(""environnement"")'" -
             + "''car_prompt'"
$!      temp = "''noeud'" -
$!           + "''def_dir'" -
$!           + "''f$logical(""environnement"")'" -
$!           + "''car_prompt'"
$       set prompt="''temp' "
$!
$! PROMPT.COM
$!

Ecco godir.com

$!
$! GODIR.COM
$!
$       set noon
$       set_prompt = "@sys$login:prompt.com"
$       if f$type(TAB_DIR_N) .nes. "" then goto 10$
$       goto 20$
$ INIT:
$       temp2 = "INIT"
$ CLEAR:
$       temp = 0
$
$ INIT2:
$       temp = temp +1
$       if temp .gt. TAB_DIR_N then goto INIT3
$       delete/symb/glo TAB_DIR_'temp'
$       goto INIT2
$
$ INIT3:
$       P1 = ""
$       if temp2 .eqs. "INIT" then goto 20$
$       delete/symb/glo TAB_DIR_N
$       delete/symb/glo TAB_DIR_P
$       delete/symb/glo TAB_DIR_I
$       exit
$
$ 20$:
$       TAB_DIR_N == 1
$       TAB_DIR_P == 1
$       TAB_DIR_I == 1
$       if "''car_prompt'" .eqs. "" then car_prompt == ">"
$       TAB_DIR_1 == f$parse(f$dir(),,,"device")+f$dir()
$ 10$:
$       if P1 .eqs. ""  then goto LIST
$       if P1 .eqs. "?" then goto SHOW
$       if P1 .eqs. "." then P1 = "[]"
$       if P1 .eqs. "^" then goto SET_CUR
$       if (P1 .eqs. "<") .or. (P1 .eqs. ">") .or. -
           (P1 .eqs. "..") then P1 = "[-]"
$       if (P1 .eqs. "*") .or. (P1 .eqs. "0") then goto HOME
$       if (P1 .eqs. "P") .or. (P1 .eqs. "p") then goto PREVIOUS
$       if (P1 .eqs. "H") .or. (P1 .eqs. "h") then goto HELP
$       if (P1 .eqs. "S") .or. (P1 .eqs. "s") then goto SET_PROMPT
$       if (P1 .eqs. "G") .or. (P1 .eqs. "g") then goto SET_PROMPT_GRAPHIC
$       temp2 = ""
$       if (P1 .eqs. "~INIT")  .or. (P1 .eqs. "~init")  then goto INIT
$       if (P1 .eqs. "~CLEAR") .or. (P1 .eqs. "~clear") then goto CLEAR
$
$!      *** Specification par un numero
$       temp = f$extract(0,1,P1)
$       if temp .eqs. "-" then goto DELETE
$       temp2 = ""
$boucle_reculer:
$       if temp .nes. "\" then goto fin_reculer
$       temp2 = temp2 + "-."
$       P1 = P1 - "\"
$       temp = f$extract(0,1,P1)
$       goto boucle_reculer
$!
$fin_reculer:
$       P1 = temp2 + P1
$       if (P1 .lts. "0") .or. (P1 .gts. "9") then goto SPEC
$       temp = f$integer("''P1'")
$       if temp .eq. 0 then goto HOME
$       if (temp .lt. 1) .or. (temp .gt. TAB_DIR_N) then goto ERR
$       TAB_DIR_P == TAB_DIR_I
$       TAB_DIR_I == temp
$       goto SET2
$
$ SPEC:
$!      *** Specification relative de directory
$
$       temp = f$parse("[.''P1']","missing.mis")
$       DD = f$extract(0,f$locate("]",temp)+1,temp)
$       if DD .nes. "" then goto SET1
$
$!      *** Specification de directory principal
$
$       temp = f$parse("[''P1']","missing.mis")
$       DD = f$extract(0,f$locate("]",temp)+1,temp)
$       if DD .nes. "" then goto SET1
$
$       temp = f$parse("[''P1']","sys$login:missing.mis")
$       DD = f$extract(0,f$locate("]",temp)+1,temp)
$       if DD .nes. "" then goto SET1
$
$!      *** Specification exacte de directory
$
$       temp = f$parse(P1,"missing.mis")
$       if f$locate("]"+P1,temp) .ne. f$length(temp) then goto ERR
$       if f$locate(".][",temp) .ne. f$length(temp) then temp = temp - "]["
$       DD = f$extract(0,f$locate("]",temp)+1,temp)
$!      if DD .eqs. TAB_DIR_'TAB_DIR_I' then goto SHOW
$       if DD .eqs. TAB_DIR_'TAB_DIR_I' then goto SET2
$       if DD .nes. "" then goto SET1
$
$       temp = f$parse(P1,"sys$login:missing.mis")
$       if f$locate("]"+P1,temp) .ne. f$length(temp) then goto ERR
$       if f$locate(".][",temp) .ne. f$length(temp) then temp = temp - "]["
$       DD = f$extract(0,f$locate("]",temp)+1,temp)
$!      if DD .eqs. TAB_DIR_'TAB_DIR_I' then goto SHOW
$       if DD .eqs. TAB_DIR_'TAB_DIR_I' then goto SET2
$       if DD .nes. "" then goto SET1
$
$       goto ERR
$
$ HOME:
$       DD = "SYS$LOGIN"
$
$ SET1:
$       Set On
$       On error then goto ERR1
$       set message/nofac/noid/nosever/notext
$       Set def 'DD'
$       dir/output=nl:
$       set message/fac/id/sever/text
$       temp = f$parse(f$dir()) - ".;"
$       if temp .nes. "" then goto SET1F
$ ERR1:
$       set message/fac/id/sever/text
$       temp = TAB_DIR_'TAB_DIR_I'
$       Set def 'temp'
$       goto ERR
$ SET1F:
$       I = 0
$ LOOP1:
$       I = I + 1
$       if temp .eqs. TAB_DIR_'I' then goto FOUND
$       if I .lt. TAB_DIR_N then goto LOOP1
$
$       TAB_DIR_N == TAB_DIR_N + 1
$       TAB_DIR_P == TAB_DIR_I
$       TAB_DIR_I == TAB_DIR_N
$       TAB_DIR_'TAB_DIR_I' == temp
$       goto SHOW
$
$ FOUND:
$       TAB_DIR_P == TAB_DIR_I
$       TAB_DIR_I == I
$       goto SET2
$
$ SET_PROMPT:
$       car_prompt == "''P2'"
$       set_prompt
$       exit
$
$ PREVIOUS:
$       temp = TAB_DIR_P
$       TAB_DIR_P == TAB_DIR_I
$       TAB_DIR_I == temp
$
$ SET_CUR:
$ SET2:
$       DD = TAB_DIR_'TAB_DIR_I'
$       set def 'DD'
$
$ SHOW:
$       temp = TAB_DIR_'TAB_DIR_I'
$       ws "  ''TAB_DIR_I' * ''temp'"
$       set_prompt
$       exit
$
$ LIST:
$       I = 0
$ LOOP2:
$       I = I + 1
$       temp = TAB_DIR_'I'
$       if I .eq. TAB_DIR_I then goto L_CUR
$       if I .eq. TAB_DIR_P then GOTO L_PRE
$       ws "  ''I' = ''temp'"
$       goto F_LOOP2
$ L_CUR:
$       ws "  ''I' * ''temp'"
$       goto F_LOOP2
$ L_PRE:
$       ws "  ''I' + ''temp'"
$
$ F_LOOP2:
$       if I .lt. TAB_DIR_N then goto LOOP2
$       set_prompt
$
$       exit
$
$ DELETE:
$       P1 = P1 - "-"
$       temp2 = f$integer("''P1'")
$ DEL_1:
$       temp = f$integer("''P1'")
$       if (temp .lt. 1) .or. (temp .gt. TAB_DIR_N) then goto ERR
$       if temp .eq. TAB_DIR_I then goto ERR
$       if temp .lt. TAB_DIR_I then TAB_DIR_I == TAB_DIR_I - 1
$       if temp .eq. TAB_DIR_P then TAB_DIR_P == TAB_DIR_I
$       if temp .lt. TAB_DIR_P then TAB_DIR_P == TAB_DIR_P - 1
$ LOOP3:
$       if temp .eq. TAB_DIR_N then goto F_LOOP3
$       temp3 = temp + 1
$       TAB_DIR_'temp' == TAB_DIR_'temp3'
$       temp = temp + 1
$       goto LOOP3
$ F_LOOP3:
$       delete/symb/glo tab_dir_'tab_dir_n'
$       TAB_DIR_N == TAB_DIR_N - 1
$       if P2 .eqs. "" then goto FIN_DEL
$       temp2 = temp2 + 1
$       if temp2 .le. f$integer("''P2'") then goto DEL_1
$ FIN_DEL:
$       goto LIST
$
$ ERR:
$       ws "*** ERREUR ***"
$       exit
$
$ HELP:
$       ws "    H       Show this menu"
$       ws "    null    Show a list of directories"
$       ws "    ?       Show current directory"
$       ws "    < or [-] or"
$       ws "    > or .. Remonte d'un niveau de directory"
$       ws "    * ou 0  Return to SYS$LOGIN"
$       ws "    P       Last directory "
$       ws "    . ou [] Set cureent directory"
$       ws "    ^       Return to next directory"
$       ws "    x       Set def to number x"
$       ws "    -x      Remove the number x"
$       ws "    -x y    Remove from x to y"
$       ws "    ddd     Set def to [ddd] or [.ddd] or ddd:"
$       ws "    \ddd    Set def to [-.ddd]"
$       ws "    S "">>""  Modify prompt for >>"
$       ws "    ~INIT   Initialize to current directory "
$       ws "            (and delete all others references)"
$       ws "    ~CLEAR  Remove all references
$       ws ""
$
$       exit
$
$ SET_PROMPT_GRAPHIC:
$       temp = "''P2'"
$       i=0
$       car_prompt == ""
$ GRAPH_BOUCLE:
$       t=f$extract(i,1,temp)
$       if (t .eqs. "e") .or. (t .eqs. "E") then t="ESC"
$       if (t .eqs. "g") .or. (t .eqs. "G") then t="ESC(0"
$       V° (} .L-_. "N") .-_. (} .L-_. "H") }NL+ }="ESC(B"
$       car_prompt == car_prompt + t
$       i = i+1
$       if i .lts. f$length(temp) then goto GRAPH_BOUCLE
$
$       set_prompt
$       exit

Altri suggerimenti

Basta digitare

cd: == imposta il default

al prompt dei comandi. Puoi anche metterlo nel tuo file LOGIN.COM, ma assicurati di mettere un $ in primo piano, cioè

$ cd: == imposta il default

Per modificare la richiesta di mostrare l'impostazione predefinita, qualcosa del genere potrebbe funzionare fino a un certo punto

$ set prompt = 'f $ env (" default ")'

Esiste tuttavia un problema con il fatto che il prompt VMS ha un massimo di 32 caratteri e il valore predefinito potrebbe essere più lungo. Dai un'occhiata a questa pagina per aggirare il problema.

Il mio DCL è veramente arrugginito, ma non puoi creare un alias per SET DEFAULT chiamato CD?

Usa HGSD che implementa un comando SD (abbreviazione di SET DEFAULT). Basta google. È una versione migliorata di Hunter Goatley di un'implementazione precedente.

L'unica cosa che non può gestire (ancora), sono logici con più traduzioni. Oltre a ciò, funziona come un incantesimo e non è necessario digitare i nomi di directory completi. Puoi persino passare alla directory successiva sullo stesso livello.

Può anche impostare il prompt se hai i giusti privilegi in una volta sola, quindi il tuo prompt rifletterà la tua directory predefinita, proprio come ai vecchi tempi su DOS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top