Community discussions

MikroTik App
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Syntax error in script file due to encoding?

Tue Jun 22, 2021 12:41 pm

I'm stumped. I have a script that I am using to configure a range of RouterOS devices from their default config out of the box and the script works perfectly if I paste it in via serial console or SSH.
However if I try to use the same script as part of a system reset it fails with a syntax error.
I get the same syntax error if I import the script file (e.g. when I'm logged in via SSH), but the syntax error goes away if I import it with the verbose flag enabled. See example below.
Could it be the encoding of my file? It is encoded us-ascii
[admin@MikroTik] > /import flash/script/routeros-init.rsc;
syntax error (line 281 column 10)
[admin@MikroTik] > /import flash/script/routeros-init.rsc verbose=yes;
#line 1
#
 #line 2
... carries on from here
This is the system reset line I'm using
/system reset-configuration no-defaults=yes skip-backup=yes run-after-reset=flash/script/routeros-init.rsc;
 
User avatar
mrz
MikroTik Support
MikroTik Support
Posts: 7042
Joined: Wed Feb 07, 2007 12:45 pm
Location: Latvia
Contact:

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 2:59 pm

Did you open file with text editor? What exactly is on line 281 column 10?
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 3:34 pm

I've tried using Notepad++ to re-encode the script file to ANSI, UTF-8, and UTF-8-BOM in addition to the us-ascii that I was already using. No luck, they all give the same syntax error except for UTF-8-BOM which gave the error
expected command name (line 1 column 1)
which I assume to mean it couldn't read it.
Could it be character set rather than encoding?
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 3:44 pm

Did you open file with text editor? What exactly is on line 281 column 10?
If I run the /import with verbose this is the output it gives me. I've excluded the rest to focus just on the section its referencing. Line 281 where it reports a syntax error is "# Model specific config".
[admin@MikroTik] > /import flash/script/routeros-init.rsc   
syntax error (line 281 column 10)
[admin@MikroTik] > /import flash/script/routeros-init.rsc verbose=yes 
... removed extra lines here...
# Function to get the configuration that is specific to this device
                                                                   #line 264..322
:global fdeviceconfig do={
                            # Gather hardware and firmware info
                                                                 :if ([ /system routerboard get routerboard; ] = true) do={
                                                                                                                               :set ghwname [ /system routerboard get board-name; ];
                                                                                                                                                                                        :set ghwmodel [ /system routerboard get model; ];
                                                                                                                                                                                                                                             :set gserialnumber [ /system routerboard get serial-number; ];
                                                 :set gfwver [ /system routerboard get upgrade-firmware; ];
                                                                                                             } else={
                                                                                                                         :set ghwname [ /system resource get board-name; ];
                                                                                                                                                                             };
                                                                                                                                                                                 
                                                                                                                                                                                   # Set the defaults
                                                                                                                                                                                                       :set ghostname "nohostname";
                                                                                                                                                                                                                                     :set glocation "indoor";
                                                                                                                                                                                                                                                               
   # Platform specific config
                               
                                 # Model specific config
                                                          :if ($ghwname = "cAP ac") do={ :set grole "wap"; };
                                                                                                               :if ($ghwname = "CHR") do={ :set grole "router"; };
                                                                                                                                                                    :if ($ghwmodel = "CRS328-24P-4S+") do={ :set grole "switch"; };
                                                                                                                                                                                                                                     :if ($ghwname = "hEX PoE") do={ :set grole "igw"; };
                             :if ($ghwname = "hEX S") do={ :set grole "igw"; };
                                                                                 :if ($ghwname = "wAP ac") do={ :set grole "wap";
                                                                                                                                     :set glocation "outdoor";
                                                                                                                                                                };
                                                                                                                                                                    
                                                                                                                                                                      # Device specific config
                                                                                                                                                                                                :if ($gserialnumber = "CB540C3D805D") do={ :set ghostname "celnz1-igw01"; };
                :if ($gserialnumber = "D7610E5F6AEC") do={ :set ghostname "celnz1-sw01";
                                                                                            :set grole ($grole . ", capsman, router, dhcpd");
                                                                                                                                               };
                                                                                                                                                   :if ($gserialnumber = "AAAAAAAAA123") do={ :set ghostname "celnz1-sw02"; };
                                                                                                                                                                                                                                :if ($gserialnumber = "CBE50CD04019") do={ :set ghostname "celnz1-wap01"; };
                                                :if ($gserialnumber = "BED00B083766") do={ :set ghostname "celnz1-wap02"; };
                                                                                                                              :if ($gserialnumber = "CBE50C17BD6B") do={ :set ghostname "celnz1-wap03"; };
                                                                                                                                                                                                            :if ($gserialnumber = "CBE50D44E989") do={ :set ghostname "celnz1-wap04"; };
                            :if ($gserialnumber = "CBE50D158481") do={ :set ghostname "celnz1-wap05"; };
                                                                                                          :if ($gserialnumber = "CBE50D3C45FE") do={ :set ghostname "celnz1-wap06"; };
                                                                                                                                                                                        :if ($gserialnumber = "BEDC0AD9A957") do={ :set ghostname "celnz1-wap07"; };
        :if ($gserialnumber = "AAAAAAAAA123") do={ :set ghostname "celnz1-wap08"; };
                                                                                      :if ($gserialnumber = "AAAAAAAAA123") do={ :set ghostname "vonz1-igw01"; };
                                                                                                                                                                   :if ($gserialnumber = "BED00B445D4E") do={ :set ghostname "vonz1-wap01";
                                                                                                                                                                                                                                               :set grole ($grole . ", capsman");
                     };
                         :if ($gserialnumber = "BED00B407081") do={ :set ghostname "vonz1-wap02"; };
                                                                                                      
                                                                                                        # Organisation specific config
                                                                                                                                        ##:set gdomain "vividorigin.com";
                                                                                                                                                                           :set gdomain "cakeit.nz";
                                                                                                                                                                                                      
                                                                                                                                                                                                        # Site specific config
                                                                                                                                                                                                                                
                                                                                                                                                                                                                                  $fsay severity=info message=("Hardware: " . $ghwname . " (" . $ghwmodel . " " . [ /system routerboard get revision; ] . ")");
                                                                                                   $fsay severity=info message=("Firmware: " . [ /system routerboard get firmware-type; ] . " " . $gfwver);
                                                                                                                                                                                                             $fsay severity=info message=("Hostname: " . $ghostname . " (" . $gserialnumber . ")");
                                       $fsay severity=info message=("Roles: " . $grole);
                                                                                          $fsay severity=info message=("Location: " . $glocation);
                                                                                                                                                  };
                                                                                                                                                    #line 323
                                                                                                                                                  ... removed extra lines here...
                                                                                                                                                    
And this is the same code but copied from the script file rather than the import verbose output.
# Function to get the configuration that is specific to this device
:global fdeviceconfig do={
  # Gather hardware and firmware info
  :if ([ /system routerboard get routerboard; ] = true) do={
    :set ghwname [ /system routerboard get board-name; ];
    :set ghwmodel [ /system routerboard get model; ];
    :set gserialnumber [ /system routerboard get serial-number; ];
    :set gfwver [ /system routerboard get upgrade-firmware; ];
  } else={
    :set ghwname [ /system resource get board-name; ];
  };
  
  # Set the defaults
  :set ghostname "nohostname";
  :set glocation "indoor";
  
  # Platform specific config
  
  # Model specific config
  :if ($ghwname = "cAP ac") do={ :set grole "wap"; };
  :if ($ghwname = "CHR") do={ :set grole "router"; };
  :if ($ghwmodel = "CRS328-24P-4S+") do={ :set grole "switch"; };
  :if ($ghwname = "hEX PoE") do={ :set grole "igw"; };
  :if ($ghwname = "hEX S") do={ :set grole "igw"; };
  :if ($ghwname = "wAP ac") do={ :set grole "wap";
    :set glocation "outdoor";
  };
  
  # Device specific config
  :if ($gserialnumber = "CB540C3D805D") do={ :set ghostname "celnz1-igw01"; };
  :if ($gserialnumber = "D7610E5F6AEC") do={ :set ghostname "celnz1-sw01";
    :set grole ($grole . ", capsman, router, dhcpd");
  };
  :if ($gserialnumber = "AAAAAAAAA123") do={ :set ghostname "celnz1-sw02"; };
  :if ($gserialnumber = "CBE50CD04019") do={ :set ghostname "celnz1-wap01"; };
  :if ($gserialnumber = "BED00B083766") do={ :set ghostname "celnz1-wap02"; };
  :if ($gserialnumber = "CBE50C17BD6B") do={ :set ghostname "celnz1-wap03"; };
  :if ($gserialnumber = "CBE50D44E989") do={ :set ghostname "celnz1-wap04"; };
  :if ($gserialnumber = "CBE50D158481") do={ :set ghostname "celnz1-wap05"; };
  :if ($gserialnumber = "CBE50D3C45FE") do={ :set ghostname "celnz1-wap06"; };
  :if ($gserialnumber = "BEDC0AD9A957") do={ :set ghostname "celnz1-wap07"; };
  :if ($gserialnumber = "AAAAAAAAA123") do={ :set ghostname "celnz1-wap08"; };
  :if ($gserialnumber = "AAAAAAAAA123") do={ :set ghostname "vonz1-igw01"; };
  :if ($gserialnumber = "BED00B445D4E") do={ :set ghostname "vonz1-wap01";
    :set grole ($grole . ", capsman");
  };
  :if ($gserialnumber = "BED00B407081") do={ :set ghostname "vonz1-wap02"; };
  
  # Organisation specific config
  ##:set gdomain "vividorigin.com";
  :set gdomain "cakeit.nz";
  
  # Site specific config
  
  $fsay severity=info message=("Hardware: " . $ghwname . " (" . $ghwmodel . " " . [ /system routerboard get revision; ] . ")");
  $fsay severity=info message=("Firmware: " . [ /system routerboard get firmware-type; ] . " " . $gfwver);
  $fsay severity=info message=("Hostname: " . $ghostname . " (" . $gserialnumber . ")");
  $fsay severity=info message=("Roles: " . $grole);
  $fsay severity=info message=("Location: " . $glocation);
};
Last edited by mike548141 on Tue Jun 22, 2021 4:27 pm, edited 1 time in total.
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 3:47 pm

PS I use SFTP to transfer the script file onto the Mikrotik in case that is relevant.
Is its possible I'm hitting some limit e.g. size of the script, number of lines in the script, line length in the script etc...

I've also just tried deleting line 281 and a couple of lines either side of it and I still get a syntax error
Last edited by mike548141 on Tue Jun 22, 2021 4:10 pm, edited 1 time in total.
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 3:59 pm

Post the complete script, not just the pieces.
All variables are not initialized, anything could have been done before.

On what device and on what version of routeros?
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 4:22 pm

Post the complete script, not just the pieces.
All variables are not initialized, anything could have been done before.

On what device and on what version of routeros?
I will need to redact some parts of it as it contains secrets etc... and I would prefer to not have my entire internal network config published publicly, eventually I plan to separate code from config and secrets so that it is easy to share. I will sort that out next

The variables are declared at the start of the script
:global gdomain;
:global gfwver;
:global ghostname;
:global ghwmodel;
:global ghwname;
:global glocation;
:global grole;
:global gserialnumber;
:global gstate;
:global gsubshellcmd;
:global gtimercount;
:global gtimermax;
:global faccessmgr;
:global fbootloaderupgrade;
:global fcheckpackages;
:global fdeviceconfig;
:global fdhcpmgr;
:global fdownload;
:global ffindstr;
:global fifmgr;
:global finitnetwork;
:global fmkdir;
:global fpkimgr;
:global freboot;
:global frolebridge;
:global frolecapsman;
:global froledhcpd;
:global froleigw;
:global frolemgmt;
:global frolentpd;
:global frolerouter;
:global frolewap;
:global frosupgrade;
:global fsay;
:global fsubshell;
:global ftestinternetaccess;
:global ftimemgr;
:global fvapmgr;
I'm currently testing it on the following cAP ac, wAP ac, hEX PoE, and CRS328-24P-4S+
All run RouterOS 6.48.3 stable
Last edited by mike548141 on Tue Jun 22, 2021 4:51 pm, edited 1 time in total.
 
User avatar
mrz
MikroTik Support
MikroTik Support
Posts: 7042
Joined: Wed Feb 07, 2007 12:45 pm
Location: Latvia
Contact:

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 4:34 pm

Copy your code in system scripts and run print in the terminal, it will highlight all the syntax errors you have.
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 4:53 pm

(⊙_⊙) what great idea!!!

On 15 years I never think that!!!

Thanks...
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Syntax error in script file due to encoding?

Tue Jun 22, 2021 4:55 pm

...I would prefer to not have my entire internal network config published publicly...
As WISP, I UNDERSTAND exactly what you wrote...
But my CPEs for security doing near nothing, except for IPsec,
is all on the 2 Core Routers (firewall / pppoe server)
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?

Wed Jun 23, 2021 12:43 pm

(⊙_⊙) what great idea!!!

On 15 years I never think that!!!

Thanks...
@rextended there seems to be a lot of attitude and passive aggression in your replies - I don't know what that is about, but unfortunately its not uncommon in some forums. Anyway if my replies annoyed you then that was not my intention but I don't see how. But if you don't want to help me on this topic that is absolutely your choice and you can simply not particapate.
I'm also in the industry, I'm an architect and have designed, delivered and managed a number of large telco networks, web service companies, enterprise networks, and some small ISP's as well. However I am new to Mikrotik (replacing my Cisco Meraki network at home) so I'm looking for the forum to help me in that endeavour.
...I would prefer to not have my entire internal network config published publicly...
As WISP, I UNDERSTAND exactly what you wrote...
But my CPEs for security doing near nothing, except for IPsec,
is all on the 2 Core Routers (firewall / pppoe server)
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?

Wed Jun 23, 2021 12:48 pm

Copy your code in system scripts and run print in the terminal, it will highlight all the syntax errors you have.
Will do that thanks, better debug than the import verbose etc...
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?

Wed Jun 23, 2021 3:07 pm

Copy your code in system scripts and run print in the terminal, it will highlight all the syntax errors you have.
@mrz thanks that certainly helped to narrow it down. I've reduced it down to the following few lines and I still have a syntax error. I assume that I am either using a reserved name or am doing something that is fundamentally not allowed in RouterOS scripting but I don't see it.
[admin@MikroTik] > /system script add name=rosinit source={
{... :global ghwmodel;                                     
{... :global ghwname; 
{...                 
{... :global fdeviceconfig do={
{{...   :if ([ /system routerboard get routerboard; ] = true) do={
{{{...     :set ghwname [ /system routerboard get board-name; ];  
syntax error (line 7 column 10)
[admin@MikroTik] >     :set ghwmodel [ /system routerboard get model; ];
syntax error (line 1 column 10)

Update: I thought from the Mikrotik wiki etc that I could declare global variables outside of a function and then set and use those global variables within a function. But that is where the syntax error is coming from i.e. it considers the global variable undeclared. Could you clarify? should be able able to declare global variables once at the start of the script or do I need to declare them in every function rather than using :set?

My assumption based on the wiki page section that starts with this warning
Warning: If function contains defined global variable which name matches the name of passed parameter, then globally defined variable is ignored, for compatibility with scripts written for older versions. This feature can change in future versions. Avoid using parameters with same name as global variables.
https://wiki.mikrotik.com/wiki/Manual:S ... #Functions
Last edited by mike548141 on Wed Jun 23, 2021 3:31 pm, edited 3 times in total.
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Syntax error in script file due to encoding?

Wed Jun 23, 2021 3:12 pm

(⊙_⊙) what great idea!!!

On 15 years I never think that!!!

Thanks...
@rextended there seems to be a lot of attitude and passive aggression in your replies - I don't know what that is about, but unfortunately its not uncommon in some forums.
[....]
I would be grateful if you would point out to me where I have been aggressive in an answer that doesn't even concern you ...
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Syntax error in script file due to encoding?

Wed Jun 23, 2021 3:53 pm

error because is missing the $ at the start of variable
{{{...     :set ghwname [ /system routerboard get board-name; ];
Tik] >     :set ghwmodel [ /system routerboard get model; ];
------1234567890^ column 10


[admin@MikroTik] > /system script add name=rosinit source={
{... :global ghwmodel;                                     
{... :global ghwname; 
{...                 
{... :global fdeviceconfig do={
{{...   :if ([ /system routerboard get routerboard; ] = true) do={
{{{...     :set ghwname [ /system routerboard get board-name; ];  
syntax error (line 7 column 10)
[admin@MikroTik] >     :set ghwmodel [ /system routerboard get model; ];
syntax error (line 1 column 10)


some corrections:
/system script
add name=rosinit dont-require-permissions=no owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source={
    :global ghwmodel
    :global ghwname
    :global fdeviceconfig do={
        :if ([/system routerboard get routerboard] = true) do={
            :set $ghwname [/system routerboard get board-name]  
        }
    }
}

corrections:
:if ([ /system routerboard get routerboard; ] = true) do={
; inside a "condition", is still working, but logically cause fatigue to read

{{{... :set $ghwname [ /system routerboard get board-name; ];
; inside a "set", missing $, is still working with ; , but logically cause fatigue to read

removed all useless ;

use of $ (not full list):
:global variable value - no $ needed
:local variable value - no $ needed
:set $variable value - $ is needed
(3 + $variable) - $ is needed
$"variable-with-minus-on-name" - $ is needed, but also the quotes because the variable name contain -
string = "the variable x is $variable" - can put directly inside on string, $variable are replaced accordingly.
string = "the routerboard name is $[/system routerboard get board-name]" - $ can be used for evaluate a command and give the results as a string

other corrections:

:if ($ghwname = "cAP ac") do={ :set grole "wap"; };
must be
:if ($ghwname = "cAP ac") do={:set $grole "wap"}


$fsay severity=info message=("Hardware: " . $ghwname . " (" . $ghwmodel . " " . [ /system routerboard get revision; ] . ")");
must be
$fsay severity=info message="Hardware: $ghwname ($ghwmodel $[/system routerboard get revision])"
 
mike548141
Frequent Visitor
Frequent Visitor
Topic Author
Posts: 51
Joined: Sun Aug 16, 2020 5:14 am

Re: Syntax error in script file due to encoding?  [SOLVED]

Mon Jun 28, 2021 2:38 pm

error because is missing the $ at the start of variable
First of all @rextended thank you for the detailed explanation(s) in your post. It helped me progress debugging this.

I tested your example code and the $variablename certainly does remove the syntax error from the :set command, but the set command does not work as expected. Its like it sets the value of an undeclared local variable of the same name as the global, but does not change the value of the global variable.
See this screen shot (https://imgur.com/a/dbpgSbM) for color coding, note the variable after :set is showing as undeclared.

This is your example code with some :put commands that I added within each layer, note the 3rd put is missing the variable value on the output.
[admin@MikroTik] > /system script
[admin@MikroTik] /system script> add name=rosinit dont-require-permissions=no owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source={
{...     :global ghwmodel                                                                                                                                                 
{...     :global ghwname 
{...     :global fdeviceconfig do={
{{...         :if ([/system routerboard get routerboard] = true) do={
{{{...             :set $ghwname [/system routerboard get board-name]
{{{...             :put "1 HW name $ghwname"                         
{{{...         }                            
{{...         :put "2 HW name $ghwname"
{{...     }                            
{...     $fdeviceconfig
{...     :put "3 HW name $ghwname"
{... }                            
[admin@MikroTik] /system script> /system script print
Flags: I - invalid 
 0   name="rosinit" owner="admin" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon dont-require-permissions=no run-count=0 source=
       
           :global ghwmodel
           :global ghwname
           :global fdeviceconfig do={
               :if ([/system routerboard get routerboard] = true) do={
                   :set $ghwname [/system routerboard get board-name]
                   :put "1 HW name $ghwname"
               }
               :put "2 HW name $ghwname"
           }
           $fdeviceconfig
           :put "3 HW name $ghwname"
[admin@MikroTik] /system script> /system script run rosinit
1 HW name cAP ac
2 HW name cAP ac
3 HW name 
[admin@MikroTik] /system script> 
This testing is on one cAP ac (RBcAPGi-5acD2nD) running 6.48.3 (stable) of RouterOS. Connected via SSH.

So that helped but wasn't a functional fix, and it irked me that the need for a $ was was contray to the Mikrotik documentation in the wiki https://wiki.mikrotik.com/wiki/Manual:S ... #Variables
But it did help me debug it. I have fixed the issue be re-delaring global variables and functions within the functions, even through it has to be re-declared within the context of the function it is keeping the value of the global variable that is set outside the function... a little weird but it works

For example
:global ghwmodel                                                                                                                                                 
:global ghwname 
:global fdeviceconfig do={
  :global ghwname
  :if ([/system routerboard get routerboard] = true) do={
    :set $ghwname [/system routerboard get board-name]
    :put "1 HW name $ghwname"                         
  }
  :put "2 HW name $ghwname"
  }                            
$fdeviceconfig
:put "3 HW name $ghwname"
Since RouterOS supports both gobal and local variables I found it weird that global ≠ all contexts within the script/session/device, but that seems to be the answer as the script is working perfectly now. As functions are also a :global declaration the same was true for them (i.e. I needed to re-declare the function names, within each function that invoked them), this included where a line within the function invokes itself (think a function with multiple sub-functions where the sub-functions may use each other). Confusing ciruclar logic? yes, but it works.

Thanks for your help
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Syntax error in script file due to encoding?

Mon Jun 28, 2021 3:01 pm

When you use directly on global context "$" can be omitted:
:global example
:set example 123
:global example2
:set $example2 123
/environment print

But if you use same var, probably not initialized, $ must be use to "say" at the "compiler" to search outside the local context

example:
both do noting if "exampleX" do not exist, but first line generate error, second not:
:set example3 123
:set $example4 123
first line generate errors if example3 do not exist,
the second, instead, is resolved if example4 not exist like:
:set nothing 123

Who is online

Users browsing this forum: Bing [Bot] and 22 guests