##// END OF EJS Templates
Merge pull request #11564 from techtonik/patch-3...
Matthias Bussonnier -
r24914:82b515da merge
parent child Browse files
Show More
@@ -1,198 +1,198 b''
1 .. _ipython_as_shell:
1 .. _ipython_as_shell:
2
2
3 =========================
3 =========================
4 IPython as a system shell
4 IPython as a system shell
5 =========================
5 =========================
6
6
7
7
8
8
9 Overview
9 Overview
10 ========
10 ========
11
11
12 It is possible to adapt IPython for system shell usage. In the past, IPython
12 It is possible to adapt IPython for system shell usage. In the past, IPython
13 shipped a special 'sh' profile for this purpose, but it had been quarantined
13 shipped a special 'sh' profile for this purpose, but it had been quarantined
14 since 0.11 release, and in 1.0 it was removed altogether. Nevertheless, much
14 since 0.11 release, and in 1.0 it was removed altogether. Nevertheless, much
15 of this section relies on machinery which does not require a custom profile.
15 of this section relies on machinery which does not require a custom profile.
16
16
17 You can set up your own 'sh' :ref:`profile <Profiles>` to be different from
17 You can set up your own 'sh' :ref:`profile <Profiles>` to be different from
18 the default profile such that:
18 the default profile such that:
19
19
20 * Prompt shows the current directory (see `Prompt customization`_)
20 * Prompt shows the current directory (see `Prompt customization`_)
21 * Make system commands directly available (in alias table) by running the
21 * Make system commands directly available (in alias table) by running the
22 ``%rehashx`` magic. If you install new programs along your PATH, you might
22 ``%rehashx`` magic. If you install new programs along your PATH, you might
23 want to run ``%rehashx`` to update the alias table
23 want to run ``%rehashx`` to update the alias table
24 * turn ``%autocall`` to full mode
24 * turn ``%autocall`` to full mode
25
25
26
26
27 Environment variables
27 Environment variables
28 =====================
28 =====================
29
29
30 Rather than manipulating os.environ directly, you may like to use the magic
30 Rather than manipulating os.environ directly, you may like to use the magic
31 `%env` command. With no arguments, this displays all environment variables
31 `%env` command. With no arguments, this displays all environment variables
32 and values. To get the value of a specific variable, use `%env var`. To set
32 and values. To get the value of a specific variable, use `%env var`. To set
33 the value of a specific variable, use `%env foo bar`, `%env foo=bar`. By
33 the value of a specific variable, use `%env foo bar`, `%env foo=bar`. By
34 default values are considered to be strings so quoting them is unnecessary.
34 default values are considered to be strings so quoting them is unnecessary.
35 However, Python variables are expanded as usual in the magic command, so
35 However, Python variables are expanded as usual in the magic command, so
36 `%env foo=$bar` means "set the environment variable foo to the value of the
36 `%env foo=$bar` means "set the environment variable foo to the value of the
37 Python variable `bar`".
37 Python variable `bar`".
38
38
39 Aliases
39 Aliases
40 =======
40 =======
41
41
42 Once you run ``%rehashx``, all of your $PATH has been loaded as IPython aliases,
42 Once you run ``%rehashx``, all of your $PATH has been loaded as IPython aliases,
43 so you should be able to type any normal system command and have it executed.
43 so you should be able to type any normal system command and have it executed.
44 See ``%alias?`` and ``%unalias?`` for details on the alias facilities. See also
44 See ``%alias?`` and ``%unalias?`` for details on the alias facilities. See also
45 ``%rehashx?`` for details on the mechanism used to load $PATH.
45 ``%rehashx?`` for details on the mechanism used to load $PATH.
46
46
47
47
48 Directory management
48 Directory management
49 ====================
49 ====================
50
50
51 Since each command passed by IPython to the underlying system is executed
51 Since each command passed by IPython to the underlying system is executed
52 in a subshell which exits immediately, you can NOT use !cd to navigate
52 in a subshell which exits immediately, you can NOT use !cd to navigate
53 the filesystem.
53 the filesystem.
54
54
55 IPython provides its own builtin ``%cd`` magic command to move in the
55 IPython provides its own builtin ``%cd`` magic command to move in the
56 filesystem (the % is not required with automagic on). It also maintains
56 filesystem (the % is not required with automagic on). It also maintains
57 a list of visited directories (use ``%dhist`` to see it) and allows direct
57 a list of visited directories (use ``%dhist`` to see it) and allows direct
58 switching to any of them. Type ``cd?`` for more details.
58 switching to any of them. Type ``cd?`` for more details.
59
59
60 ``%pushd``, ``%popd`` and ``%dirs`` are provided for directory stack handling.
60 ``%pushd``, ``%popd`` and ``%dirs`` are provided for directory stack handling.
61
61
62
62
63 Prompt customization
63 Prompt customization
64 ====================
64 ====================
65
65
66 See :ref:`custom_prompts`.
66 See :ref:`custom_prompts`.
67
67
68
68
69 .. _string_lists:
69 .. _string_lists:
70
70
71 String lists
71 String lists
72 ============
72 ============
73
73
74 String lists (IPython.utils.text.SList) are handy way to process output
74 String lists (IPython.utils.text.SList) are handy way to process output
75 from system commands. They are produced by ``var = !cmd`` syntax.
75 from system commands. They are produced by ``var = !cmd`` syntax.
76
76
77 First, we acquire the output of 'ls -l'::
77 First, we acquire the output of 'ls -l'::
78
78
79 [Q:doc/examples]|2> lines = !ls -l
79 [Q:doc/examples]|2> lines = !ls -l
80 ==
80 ==
81 ['total 23',
81 ['total 23',
82 '-rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py',
82 '-rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py',
83 '-rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py',
83 '-rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py',
84 '-rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py',
84 '-rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py',
85 '-rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py',
85 '-rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py',
86 '-rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py',
86 '-rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py',
87 '-rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py',
87 '-rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py',
88 '-rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc']
88 '-rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc']
89
89
90 Now, let's take a look at the contents of 'lines' (the first number is
90 Now, let's take a look at the contents of 'lines' (the first number is
91 the list element number)::
91 the list element number)::
92
92
93 [Q:doc/examples]|3> lines
93 [Q:doc/examples]|3> lines
94 <3> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
94 <3> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
95
95
96 0: total 23
96 0: total 23
97 1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
97 1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
98 2: -rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py
98 2: -rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py
99 3: -rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py
99 3: -rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py
100 4: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
100 4: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
101 5: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
101 5: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
102 6: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
102 6: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
103 7: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
103 7: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
104
104
105 Now, let's filter out the 'embed' lines::
105 Now, let's filter out the 'embed' lines::
106
106
107 [Q:doc/examples]|4> l2 = lines.grep('embed',prune=1)
107 [Q:doc/examples]|4> l2 = lines.grep('embed',prune=1)
108 [Q:doc/examples]|5> l2
108 [Q:doc/examples]|5> l2
109 <5> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
109 <5> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
110
110
111 0: total 23
111 0: total 23
112 1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
112 1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
113 2: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
113 2: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
114 3: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
114 3: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
115 4: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
115 4: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
116 5: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
116 5: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
117
117
118 Now, we want strings having just file names and permissions::
118 Now, we want strings having just file names and permissions::
119
119
120 [Q:doc/examples]|6> l2.fields(8,0)
120 [Q:doc/examples]|6> l2.fields(8,0)
121 <6> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
121 <6> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
122
122
123 0: total
123 0: total
124 1: example-demo.py -rw-rw-rw-
124 1: example-demo.py -rw-rw-rw-
125 2: example-gnuplot.py -rwxrwxrwx
125 2: example-gnuplot.py -rwxrwxrwx
126 3: extension.py -rwxrwxrwx
126 3: extension.py -rwxrwxrwx
127 4: seteditor.py -rwxrwxrwx
127 4: seteditor.py -rwxrwxrwx
128 5: seteditor.pyc -rwxrwxrwx
128 5: seteditor.pyc -rwxrwxrwx
129
129
130 Note how the line with 'total' does not raise IndexError.
130 Note how the line with 'total' does not raise IndexError.
131
131
132 If you want to split these (yielding lists), call fields() without
132 If you want to split these (yielding lists), call fields() without
133 arguments::
133 arguments::
134
134
135 [Q:doc/examples]|7> _.fields()
135 [Q:doc/examples]|7> _.fields()
136 <7>
136 <7>
137 [['total'],
137 [['total'],
138 ['example-demo.py', '-rw-rw-rw-'],
138 ['example-demo.py', '-rw-rw-rw-'],
139 ['example-gnuplot.py', '-rwxrwxrwx'],
139 ['example-gnuplot.py', '-rwxrwxrwx'],
140 ['extension.py', '-rwxrwxrwx'],
140 ['extension.py', '-rwxrwxrwx'],
141 ['seteditor.py', '-rwxrwxrwx'],
141 ['seteditor.py', '-rwxrwxrwx'],
142 ['seteditor.pyc', '-rwxrwxrwx']]
142 ['seteditor.pyc', '-rwxrwxrwx']]
143
143
144 If you want to pass these separated with spaces to a command (typical
144 If you want to pass these separated with spaces to a command (typical
145 for lists if files), use the .s property::
145 for lists if files), use the .s property::
146
146
147
147
148 [Q:doc/examples]|13> files = l2.fields(8).s
148 [Q:doc/examples]|13> files = l2.fields(8).s
149 [Q:doc/examples]|14> files
149 [Q:doc/examples]|14> files
150 <14> 'example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc'
150 <14> 'example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc'
151 [Q:doc/examples]|15> ls $files
151 [Q:doc/examples]|15> ls $files
152 example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc
152 example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc
153
153
154 SLists are inherited from normal Python lists, so every list method is
154 SLists are inherited from normal Python lists, so every list method is
155 available::
155 available::
156
156
157 [Q:doc/examples]|21> lines.append('hey')
157 [Q:doc/examples]|21> lines.append('hey')
158
158
159
159
160 Real world example: remove all files outside version control
160 Real world example: remove all files outside version control
161 ------------------------------------------------------------
161 ------------------------------------------------------------
162
162
163 First, capture output of "hg status"::
163 First, capture output of "hg status"::
164
164
165 [Q:/ipython]|28> out = !hg status
165 [Q:/ipython]|28> out = !hg status
166 ==
166 ==
167 ['M IPython\\extensions\\ipy_kitcfg.py',
167 ['M IPython\\extensions\\ipy_kitcfg.py',
168 'M IPython\\extensions\\ipy_rehashdir.py',
168 'M IPython\\extensions\\ipy_rehashdir.py',
169 ...
169 ...
170 '? build\\lib\\IPython\\Debugger.py',
170 '? build\\lib\\IPython\\Debugger.py',
171 '? build\\lib\\IPython\\extensions\\InterpreterExec.py',
171 '? build\\lib\\IPython\\extensions\\InterpreterExec.py',
172 '? build\\lib\\IPython\\extensions\\InterpreterPasteInput.py',
172 '? build\\lib\\IPython\\extensions\\InterpreterPasteInput.py',
173 ...
173 ...
174
174
175 (lines starting with ? are not under version control).
175 (lines starting with ? are not under version control).
176
176
177 ::
177 ::
178
178
179 [Q:/ipython]|35> junk = out.grep(r'^\?').fields(1)
179 [Q:/ipython]|35> junk = out.grep(r'^\?').fields(1)
180 [Q:/ipython]|36> junk
180 [Q:/ipython]|36> junk
181 <36> SList (.p, .n, .l, .s, .grep(), .fields() availab
181 <36> SList (.p, .n, .l, .s, .grep(), .fields() availab
182 ...
182 ...
183 10: build\bdist.win32\winexe\temp\_ctypes.py
183 10: build\bdist.win32\winexe\temp\_ctypes.py
184 11: build\bdist.win32\winexe\temp\_hashlib.py
184 11: build\bdist.win32\winexe\temp\_hashlib.py
185 12: build\bdist.win32\winexe\temp\_socket.py
185 12: build\bdist.win32\winexe\temp\_socket.py
186
186
187 Now we can just remove these files by doing 'rm $junk.s'.
187 Now we can just remove these files by doing 'rm $junk.s'.
188
188
189 The .s, .n, .p properties
189 The .n, .s, .p properties
190 -------------------------
190 -------------------------
191
191
192 The ``.s`` property returns one string where lines are separated by
192 Properties of `SList <https://ipython.readthedocs.io/en/stable/api/generated/IPython.utils.text.html?highlight=SList#IPython.utils.text.SList>`_ wrapper
193 single space (for convenient passing to system commands). The ``.n``
193 provide a convenient ways to use contained text in different formats:
194 property return one string where the lines are separated by a newline
195 (i.e. the original output of the function). If the items in string
196 list are file names, ``.p`` can be used to get a list of "path" objects
197 for convenient file manipulation.
198
194
195 * ``.n`` returns (original) string with lines separated by a newline
196 * ``.s`` returns string with lines separated by single space (for
197 convenient passing to system commands)
198 * ``.p`` returns list of "path" objects from detected file names
General Comments 0
You need to be logged in to leave comments. Login now