---
title:  run
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Execute a set of GFSH commands.

Commands that normally prompt for additional input will instead use default values.

**Availability:** Online or offline.

**Note:**
Some commands specified in the file require online status.

**Syntax:**

``` pre
run --file=value [--quiet(=value)?] [--continue-on-error(=value)?]
```

<a id="concept_970BC9839C8243AF86CAEAAB22FDF40C__table_zyc_clf_2w"></a>

<table>
<caption><span class="tablecap">Table 1. Parameters</span></caption>
<colgroup>
<col width="25%" />
<col width="50%" />
<col width="25%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
<th>Default Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="keyword parmname">&#8209;&#8209;file</span></td>
<td><em>Required.</em> Path of the file scripted with commands that <code class="ph codeph">gfsh</code> recognizes. Path should be relative or absolute.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">&#8209;&#8209;quiet</span></td>
<td>Specifies whether to show command output.
<div class="note note">
<p><strong>Note:</strong> All commands in a script are run non-interactively when the <code class="ph codeph">run</code> command is used. This option does not change that functionality.</p>
</div></td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">&#8209;&#8209;continue-on-error</span></td>
<td>Specifies whether further execution of the script should continue if there is an error while executing one of the commands fails.</td>
<td>false</td>
</tr>
</tbody>
</table>

<span class="tablecap">Table 1. Run Parameters</span>

**Example Commands:**

``` pre
run --file=create-regions.gfsh --quiet=true

(2) From command line:
prompt> /home/user1/gemfire70/bin/gfsh run ./create-regions.gfsh --quiet=true
prompt> /home/user1/gemfire70/bin/gfsh run ./create-regions.gfsh 
--continue-on-error=true
```

**Sample Output:**

``` pre
gfsh>run --file=create-regions.gfsh
1. Executing - create region --name=region4 --type=REPLICATE

Member  | Status
------- | --------------------------------------
server2 | Region "/region4" created on "server2"
server1 | Region "/region4" created on "server1"

2. Executing - create region --name=region1/subregion1 --type=LOCAL

Parent region for "region1/subregion1" doesn't exist. 
```


