Re: [rancid] clogin commenting script commands following multiple blanks lines
Heasley <[email protected]>
| Newsgroups | gmane.network.rancid |
|---|---|
| Message-ID | <[email protected]> |
> Am 25.10.2018 um 12:53 schrieb Erik Muller <[email protected]>: > >> On 10/24/18 18:32 , heasley wrote: >> Wed, Oct 24, 2018 at 09:19:31PM +0000, heasley: >>> I missed that in your example, but noticed it in testing...after I sent that >>> patch. This is my final patch, i think. I havent committed it yet, as I >>> want to review it once more. >> >> ok; committed. Either the alpha tarball or the svn repo. Welcome testers, >> esp for palo alto, of which I have none. > > That one was really close, but still didn't pass through ^; from command files properly. > After a bit more tweaking, the following change seems to get it to handle all my test cases correctly. > You have to escape the ; in the file (\;). The An argument could be made either way, i leN toward not altering the behavior of -x. > erikm@vpn41:~/ports-dev [15:21 - 1497]$ diff -Naur /opt/local/libexec/rancid/clogin-3.99.99.bak /opt/local/libexec/rancid/clogin-3.99.99 > --- /opt/local/libexec/rancid/clogin-3.99.99.bak 2018-10-24 19:46:30.000000000 -0400 > +++ /opt/local/libexec/rancid/clogin-3.99.99 2018-10-25 15:21:18.000000000 -0400 > @@ -253,7 +253,8 @@ > } > set cmd_text [read $cmd_fd] > close $cmd_fd > - set command [join [split $cmd_text \n] \;] > + regsub -all {;} $cmd_text "\\;" cmd_text > + set command [join [split $cmd_text \n] \u002;] > set do_command 1 > # 'ssh -c' cypher type > } -y* { > @@ -444,13 +445,8 @@ > continue; > } > > - # handle escaped ;s in commands, and ;; and ^; > - regsub -all {([^\\]);} $command "\\1\u002;" esccommand > - regsub -all {([^\\]);;} $esccommand "\\1;\u002;" command > - regsub {^;} $command "\u002;" esccommand > - regsub -all {[\\];} $esccommand ";" command > - regsub -all {\u002;} $command "\u002" esccommand > - set sep "\u002;" > + set esccommand [escapecommandlist $command] > + set sep "\u002" > set commands [split $esccommand $sep] > set num_commands [llength $commands] > set rshfail 0 > @@ -724,6 +720,21 @@ > return 0 > } > > +# handle escaped ;s in commands, and ;; and ^; > +proc escapecommandlist {command} { > + # \; should be passed through as a ; > + # ^; should be treated as a comment (when coming from a command file) > + # ;; represents a literal ; before a subsequent command (?) > + # other ;s are separators between items in a sequence of commands > + # note this is processed as one big multiline text blob, so ^ anchors may > + # not work as expected > + regsub -all {([^\\\u002]);} $command "\\1\u002;" esccommand > + regsub -all {([^\\\u00a\u00d\u002]);;} $esccommand "\\1;\u002;" command > + regsub -all {\u002;} $command "\u002" esccommand > + regsub -all {[\\];} $esccommand ";" command > + return $command > +} > + > # Run commands given on the command line. > proc run_commands { prompt command } { > global do_interact do_saveconfig in_proc platform > @@ -742,12 +753,7 @@ > # this is the only way i see to get rid of more prompts in o/p..grrrrr > log_user 0 > > - # handle escaped ;s in commands, and ;; and ^; > - regsub -all {([^\\]);} $command "\\1\u002;" esccommand > - regsub -all {([^\\]);;} $esccommand "\\1;\u002;" command > - regsub {^;} $command "\u002;" esccommand > - regsub -all {[\\];} $esccommand ";" command > - regsub -all {\u002;} $command "\u002" esccommand > + set esccommand [escapecommandlist $command] > set sep "\u002" > set commands [split $esccommand $sep] > set num_commands [llength $commands] > _______________________________________________ Rancid-discuss mailing list [email protected] http://www.shrubbery.net/mailman/listinfo/rancid-discuss