Skip to content

Commit ee14ca1

Browse files
committed
docs(script): mv source command to script
1 parent 0bba0ea commit ee14ca1

File tree

2 files changed

+106
-106
lines changed

2 files changed

+106
-106
lines changed

docs/script.md

Lines changed: 106 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -282,62 +282,6 @@ ls: 无法访问'-l': 没有那个文件或目录
282282

283283
上面例子中,变量`myPath`的值为`-l`,不是路径。但是,`--`强制`$myPath`只能作为路径解释,导致报错“不存在该路径”。
284284

285-
## 别名,alias 命令
286-
287-
`alias`命令用来为一个命令指定别名,这样更便于记忆。下面是`alias`的格式。
288-
289-
```bash
290-
alias NAME=DEFINITION
291-
```
292-
293-
上面命令中,`NAME`是别名的名称,`DEFINITION`是别名对应的原始命令。注意,等号两侧不能有空格,否则会报错。
294-
295-
一个常见的例子是为`grep`命令起一个`search`的别名。
296-
297-
```bash
298-
alias search=grep
299-
```
300-
301-
`alias`也可以用来为长命令指定一个更短的别名。下面是通过别名定义一个`today`的命令。
302-
303-
```bash
304-
$ alias today='date +"%A, %B %-d, %Y"'
305-
$ today
306-
星期一, 一月 6, 2020
307-
```
308-
309-
有时为了防止误删除文件,可以指定`rm`命令的别名。
310-
311-
```bash
312-
$ alias rm='rm -i'
313-
```
314-
315-
上面命令指定`rm`命令是`rm -i`,每次删除文件之前,都会让用户确认。
316-
317-
`alias`定义的别名也可以接受参数,参数会直接传入原始命令。
318-
319-
```bash
320-
$ alias echo='echo It says: '
321-
$ echo hello world
322-
It says: hello world
323-
```
324-
325-
上面例子中,别名定义了`echo`命令的前两个参数,等同于修改了`echo`命令的默认行为。
326-
327-
指定别名以后,就可以像使用其他命令一样使用别名。一般来说,都会把常用的别名写在`~/.bashrc`的末尾。另外,只能为命令定义别名,为其他部分(比如很长的路径)定义别名是无效的。
328-
329-
直接调用`alias`命令,可以显示所有别名。
330-
331-
```bash
332-
$ alias
333-
```
334-
335-
`unalias`命令可以解除别名。
336-
337-
```bash
338-
$ unalias lt
339-
```
340-
341285
## exit 命令
342286

343287
`exit`命令用于终止当前脚本的执行,并向 Shell 返回一个退出值。
@@ -412,6 +356,112 @@ cd $some_directory && rm *
412356
cd $some_directory || exit 1
413357
```
414358

359+
## source 命令
360+
361+
`source`命令用于执行一个脚本,通常用于重新加载一个配置文件。
362+
363+
```bash
364+
$ source .bashrc
365+
```
366+
367+
`source`命令最大的特点是在当前 Shell 执行脚本,不像直接执行脚本时,会新建一个子 Shell。所以,`source`命令执行脚本时,不需要`export`变量。
368+
369+
```bash
370+
#!/bin/bash
371+
# test.sh
372+
echo $foo
373+
```
374+
375+
上面脚本输出`$foo`变量的值。
376+
377+
```bash
378+
# 当前 Shell 新建一个变量 foo
379+
$ foo=1
380+
381+
# 打印输出 1
382+
$ source test.sh
383+
1
384+
385+
# 打印输出空字符串
386+
$ bash test.sh
387+
```
388+
389+
上面例子中,当前 Shell 的变量`foo`并没有`export`,所以直接执行无法读取,但是`source`执行可以读取。
390+
391+
`source`命令的另一个用途,是在脚本内部加载外部库。
392+
393+
```bash
394+
#!/bin/bash
395+
396+
source ./lib.sh
397+
398+
function_from_lib
399+
```
400+
401+
上面脚本在内部使用`source`命令加载了一个外部库,然后就可以在脚本里面,使用这个外部库定义的函数。
402+
403+
`source`有一个简写形式,可以使用一个点(`.`)来表示。
404+
405+
```bash
406+
$ . .bashrc
407+
```
408+
409+
## 别名,alias 命令
410+
411+
`alias`命令用来为一个命令指定别名,这样更便于记忆。下面是`alias`的格式。
412+
413+
```bash
414+
alias NAME=DEFINITION
415+
```
416+
417+
上面命令中,`NAME`是别名的名称,`DEFINITION`是别名对应的原始命令。注意,等号两侧不能有空格,否则会报错。
418+
419+
一个常见的例子是为`grep`命令起一个`search`的别名。
420+
421+
```bash
422+
alias search=grep
423+
```
424+
425+
`alias`也可以用来为长命令指定一个更短的别名。下面是通过别名定义一个`today`的命令。
426+
427+
```bash
428+
$ alias today='date +"%A, %B %-d, %Y"'
429+
$ today
430+
星期一, 一月 6, 2020
431+
```
432+
433+
有时为了防止误删除文件,可以指定`rm`命令的别名。
434+
435+
```bash
436+
$ alias rm='rm -i'
437+
```
438+
439+
上面命令指定`rm`命令是`rm -i`,每次删除文件之前,都会让用户确认。
440+
441+
`alias`定义的别名也可以接受参数,参数会直接传入原始命令。
442+
443+
```bash
444+
$ alias echo='echo It says: '
445+
$ echo hello world
446+
It says: hello world
447+
```
448+
449+
上面例子中,别名定义了`echo`命令的前两个参数,等同于修改了`echo`命令的默认行为。
450+
451+
指定别名以后,就可以像使用其他命令一样使用别名。一般来说,都会把常用的别名写在`~/.bashrc`的末尾。另外,只能为命令定义别名,为其他部分(比如很长的路径)定义别名是无效的。
452+
453+
直接调用`alias`命令,可以显示所有别名。
454+
455+
```bash
456+
$ alias
457+
```
458+
459+
`unalias`命令可以解除别名。
460+
461+
```bash
462+
$ unalias lt
463+
```
464+
415465
## 参考链接
416466

417467
- [How to use getopts to parse a script options](https://linuxconfig.org/how-to-use-getopts-to-parse-a-script-options), Egidio Docile

docs/startup.md

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -108,53 +108,3 @@ $include /etc/inputrc
108108

109109
`.inputrc`文件里面的快捷键,可以像这样定义,`"\C-t":"pwd\n"`表示将`Ctrl + t`绑定为运行`pwd`命令。
110110

111-
## source 命令
112-
113-
`source`命令用于执行一个脚本,通常用于重新加载一个配置文件。
114-
115-
```bash
116-
$ source .bashrc
117-
```
118-
119-
`source`命令最大的特点是在当前 Shell 执行脚本,不像直接执行脚本时,会新建一个子 Shell。所以,`source`命令执行脚本时,不需要`export`变量。
120-
121-
```bash
122-
#!/bin/bash
123-
# test.sh
124-
echo $foo
125-
```
126-
127-
上面脚本输出`$foo`变量的值。
128-
129-
```bash
130-
# 当前 Shell 新建一个变量 foo
131-
$ foo=1
132-
133-
# 打印输出 1
134-
$ source test.sh
135-
1
136-
137-
# 打印输出空字符串
138-
$ bash test.sh
139-
```
140-
141-
上面例子中,当前 Shell 的变量`foo`并没有`export`,所以直接执行无法读取,但是`source`执行可以读取。
142-
143-
`source`命令的另一个用途,是在脚本内部加载外部库。
144-
145-
```bash
146-
#!/bin/bash
147-
148-
source ./lib.sh
149-
150-
function_from_lib
151-
```
152-
153-
上面脚本在内部使用`source`命令加载了一个外部库,然后就可以在脚本里面,使用这个外部库定义的函数。
154-
155-
`source`有一个简写形式,可以使用一个点(`.`)来表示。
156-
157-
```bash
158-
$ . .bashrc
159-
```
160-

0 commit comments

Comments
 (0)