forked from drush-ops/drush
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshellscripts.html
80 lines (79 loc) · 2.88 KB
/
shellscripts.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<h1>Drush Shell Scripts</h1>
<p>
A drush shell script is any Unix shell script file that has
its "execute" bit set (i.e., via `chmod +x myscript.drush`)
and that begins with a specific line:
<pre>
#!/usr/bin/env drush
</pre>
- or -
<pre>
#!/full/path/to/drush
</pre><p>
The former is the usual form, and is more convenient in that
it will allow you to run the script regardless of where drush
has been installed on your system, as long as it appears in
your PATH. The later form allows you to specify the drush
command add options to use, as in:
<pre>
#!/full/path/to/drush php-script --some-option
</pre><p>
Adding specific options is important only in certain cases,
described later; it is usually not necessary.
<p>
Drush scripts do not need to be named "*.drush" or "*.script";
they can be named anything at all. To run them, make sure they
are executable (`chmod +x helloworld.script`) and then run them
from the shell like any other script.
<p>
There are two big advantages to drush scripts over bash scripts:
<ul>
<li>They are written in php
<li>drush can bootstrap your Drupal site before
running your script.
</ul><p>
To bootstrap a Drupal site, provide an alias to the site to
bootstrap as the first commandline argument.
<p>
For example:
<pre>
$ helloworld.script @dev a b c
</pre><p>
If the first argument is a valid site alias, drush will remove
it from the arument list and bootstrap that site, then run
your script. The script itself will not see @dev on its
argument list. If you do not want drush to remove the first
site alias from your scripts argument list (e.g. if your script
wishes to syncronise two sites, specified by the first two
arguments, and does not want to bootstrap either of those
two sites), then fully specify the drush command (php-script)
and options to use, as shown above. By default, if the drush
command is not specified, drush will provide the following default
line:
<pre>
#!/full/path/to/drush php-script --bootstrap-to-first-arg
</pre><p>
It is the option --bootstrap-to-first-arg that causes drush to
pull off the first argument and bootstrap it. The way to get rid
of that option is to specify the php-script line to run, and leave
it off, like so:
<pre>
#!/full/path/to/drush php-script
</pre><p>
Note that 'php-script' is the only built-in drush command that
makes sense to put on the "shebang" ("#!" is pronounced "shebang")
line. However, if you wanted to, you could implement your own
custom version of php-script (e.g. to preprocess the script input,
perhaps), and specify that command on the shebang line.
<p>
Drush scripts can access their arguments via the drush_shift()
function:
<pre>
while ($arg = drush_shift()) {
drush_print($arg);
}
</pre><p>
Options are available via drush_get_option('option-name').
<p>
See the example drush script in `drush topic docs-examplescript`,
and the list of drush error codes in `drush topic docs-errorcodes`.