- 浏览: 4754249 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bzhao:
你也应该可以这样:(not tested)./rbtunnel ...
在Bash脚本中怎么关闭文件描述符? -
bzhao:
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则 ...
在Bash脚本中怎么关闭文件描述符? -
Master-Gao:
楼主咋没分析下源码呢?
我使用过的Linux命令之dirname - 截取给定路径的目录部分 -
jiedushi:
tail -F 就可以吧
Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能 -
java_is_new:
新手学习了,就是不明白为一个网卡配多个ip有什么用
我使用过的Linux命令之ifconfig - 网络配置命令
我使用过的Linux命令之source - 在当前shell环境中执行指定文件中的命令
本文链接:http://codingstandards.iteye.com/blog/837935 (转载请注明出处)
用途说明
source命令是bash中的内建命令,它等同于点命令(.),用于读取和在当前shell环境中执行指定文件中的命令,执行完毕之后退出码为该文件中的最后一个命令的退出码(Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.)。指定的文件可以没有执行权限。
在当前shell中执行和在子shell中执行的区别是,后者定义的变量和函数在执行结束后就消失了,而前者却可以保留下来。有时候我们修改了/etc/profile里面的内容,如增加了环境变量,那么要立即生效的话,就必须使用source命令或者点命令在当前shell中执行一下。
常用参数
格式: . filename [arguments]
格式: source filename [arguments]
在后面的示例中会分别对各种情况举例演示。
使用示例
示例一
[root@web imx_web3q]# help source
source: source filename [arguments]
Read and execute commands from FILENAME and return. The pathnames
in $PATH are used to find the directory containing FILENAME. If any
ARGUMENTS are supplied, they become the positional parameters when
FILENAME is executed.
[root@web imx_web3q]#
示例二 修改/etc/profile之后使之立即生效
[root@web imx_web3q]# vi /etc/profile
[root@web imx_web3q]# . /etc/profile
[root@web imx_web3q]#
示例三 在PATH中搜索命令
man source中说道:如果filename不包含斜杠(/),那么从PATH环境变量指定的那些路径搜索filename,这个文件不必是可执行 的。(If filename does not contain a slash, file names in PATH are used to find the directory containing filename. The file searched for in PATH need not be executable.)如果在PATH中找不到指定文件,当bash不是posix模式时,将在当前目录下搜索该文件。(When bash is not in posix mode, the current directory is searched if no file is found in PATH.)如果shopt里的sourcepath关闭,则不在PATH中搜索指定文件。(If the sourcepath option to the shopt builtin command is turned off, the PATH is not searched.)
[root@new55 ~]# shopt
cdable_vars off
cdspell off
checkhash off
checkwinsize on
cmdhist on
dotglob off
execfail off
expand_aliases on
extdebug off
extglob on
extquote on
failglob off
force_fignore on
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete off
huponexit off
interactive_comments on
lithist off
login_shell on
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
[root@new55 ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/opt/apache/apache-ant-1.8.1/bin:/usr/java/jdk1.6.0_21/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
:/root/bin
[root@new55 ~]# ls -l /usr/bin/sj.sh
-rwxr-xr-x 1 root root 453 09-15 04:46 /usr/bin/sj.sh
[root@new55 ~]# cat /usr/bin/sj.sh
#!/bin/sh
listpids()
{
#ps -ef|grep java|grep -v grep
COLUMNS=1024 ps h -C java -f
}
showpids()
{
while read u p pp t1 t2 tty cpu cmd;
do
ls -l /proc/$p/cwd
echo $p $cwd $cmd
echo
done
}
showpidof()
{
while read u p pp t1 t2 tty cpu cmd;
do
if ls -l /proc/$p/cwd | grep -q $1; then
echo $p
elif echo $cmd | grep -q $1; then
echo $p
fi
done
}
if [ "$1" ]; then
listpids | showpidof $1 | xargs
else
listpids | showpids
fi
[root@new55 ~]# sj.sh
lrwxrwxrwx 1 root root 0 12-09 19:11 /proc/6832/cwd -> /root/work55/cms_server
6832 0:02 /usr/java/jdk1.6.0_21/jre/bin/java -classpath /opt/apache/apache-ant-1.8.1/lib/ant-launcher.jar -Dant.home=/opt/apache/apache-ant-1.8.1 -Dant.library.dir=/opt/apache/apache-ant-1.8.1/lib org.apache.tools.ant.launch.Launcher -cp start
[root@new55 ~]# listpids
-bash: listpids: command not found
[root@new55 ~]# chmod -x /usr/bin/sj.sh
[root@new55 ~]# source sj.sh
lrwxrwxrwx 1 root root 0 12-09 19:11 /proc/6832/cwd -> /root/work55/cms_server
6832 0:02 /usr/java/jdk1.6.0_21/jre/bin/java -classpath /opt/apache/apache-ant-1.8.1/lib/ant-launcher.jar -Dant.home=/opt/apache/apache-ant-1.8.1 -Dant.library.dir=/opt/apache/apache-ant-1.8.1/lib org.apache.tools.ant.launch.Launcher -cp start
[root@new55 ~]# listpids
root 6832 5994 0 19:11 pts/2 Sl+ 0:02 /usr/java/jdk1.6.0_21/jre/bin/java -classpath /opt/apache/apache-ant-1.8.1/lib/ant-launcher.jar -Dant.home=/opt/apache/apache-ant-1.8.1 -Dant.library.dir=/opt/apache/apache-ant-1.8.1/lib org.apache.tools.ant.launch.Launcher -cp start
[root@new55 ~]# chmod +x /usr/bin/sj.sh
root@new55 ~]#
示例四 位置参数
If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged.
[root@new55 ~]# cat >source.sh
XYZ=123
echo "args: $@"
Ctrl+D
[root@new55 ~]# ./source.sh
-bash: ./source.sh: 权限不够
[root@new55 ~]# . source.sh
args:
[root@new55 ~]# echo $XYZ
123
[root@new55 ~]# . source.sh hello world
args: hello world
[root@new55 ~]#
示例五 退出码
The return status is the status of the last command exited within the script (0 if no commands are executed), and false if filename is not found or cannot be read.
[root@new55 ~]# ls x.sh
ls: x.sh: 没有那个文件或目录
[root@new55 ~]# . ./x.sh
-bash: ./x.sh: 没有那个文件或目录
[root@new55 ~]# echo $?
1
[root@new55 ~]# cat >x.sh
return 13
Ctrl+D
[root@new55 ~]# . ./x.sh
[root@new55 ~]# echo $?
13
[root@new55 ~]#
问题思考
相关资料
【1】笑遍世界的测试技术 Linux Source命令及脚本的执行方式解析
【2】Simon的专栏 Linux中source命令的用法
【3】LinuxSense linux的source命令
【4】jiakechong linux source命令
发表评论
-
在Linux用tar归档压缩文件时忽略某些文件和目录
2013-02-01 10:19 17053在Linux下,常用tar对文 ... -
使用nmap扫描服务器端口的一次操作
2012-11-01 17:00 15139使用nmap扫描服务器端口的一次操作 本文来自:http ... -
我使用过的Linux命令之wget - ooo
2011-09-14 13:10 0我使用过的Linux命令之wg ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:53 9149简明 Vim 练级攻略 http://coolshell.c ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:49 1简明 Vim 练级攻略 http://coolshell.c ... -
我使用过的Linux命令之:(冒号) - 啥也不做(除了……)
2011-08-29 13:18 12101我使用过的Linux命令之: ... -
我使用过的Linux命令之date - 显示、修改系统日期时间
2011-08-25 09:21 41985我使用过的Linux命令之da ... -
我使用过的Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令)
2011-08-16 09:22 21831我使用过的Linux命令之declare - 声明shell变 ... -
我使用过的Linux命令之alias - 设置命令的别名,让 Linux 命令更简练
2011-08-11 09:31 28828我使用过的Linux命令之alias - 设置命令的别名,让 ... -
我使用过的Linux命令之ar - 创建静态库.a文件
2011-08-08 10:40 51934我使用过的Linux命令之ar - 创建静态库.a文件 本 ... -
我使用过的Linux命令之crontab - 设置例行任务(类似于Windows中的任务计划)
2011-08-04 22:26 9752我使用过的Linux命令之crontab - 设置例行任务(类 ... -
我使用过的Linux命令之chmod - 改变文件/目录的访问权限
2011-08-03 21:33 10706我使用过的Linux命令之chmod - 改变文件/目录的访问 ... -
我使用过的Linux命令之export - 设置或显示环境变量
2011-08-02 19:55 25441我使用过的Linux命令之export - 设置或显示环境变量 ... -
我使用过的Linux命令之wc - 统计文件行数、单词数或字节数
2011-07-26 10:50 29018我使用过的Linux命令之wc - 统计文件行数、单词数或字节 ... -
我使用过的Linux命令之groupdel - 删除群组
2011-07-22 22:13 9693我使用过的Linux命令之gr ... -
我使用过的Linux命令之ifconfig - 网络配置命令
2011-07-21 20:43 60552我使用过的Linux命令之ifconfig - 网络配置命令 ... -
我使用过的Linux命令之ll - 列出文件/目录的详细信息
2011-07-20 21:22 7209我使用过的Linux命令之ll ... -
我使用过的Linux命令之mkdir - 创建目录
2011-07-20 20:58 13686我使用过的Linux命令之mkdir - 创建目录 本文链 ... -
我使用过的Linux命令之perror - 解释错误代码
2011-07-18 20:29 25081我使用过的Linux命令之perror - 解释错误代码 ... -
我使用过的Linux命令之ping - 测试与目标主机的连通性
2011-07-16 10:46 26615我使用过的Linux命令之ping - 测试与目标主机的连通性 ...
相关推荐
- **3.2.1 使用at命令提交命令或脚本**:在指定时间执行命令或脚本。 - **3.2.2 列出所提交的作业**:使用`atq`命令。 - **3.2.3 清除一个作业**:使用` atrm`命令。 **3.3 &命令** - **3.3.1 向后台提交命令**:...
source命令能够读取指定文件中的命令,并在当前shell环境中执行它们。执行命令如下: ```shell source ./SetPath.sh ``` 在source命令执行之后,当前shell及其子进程将会拥有这些设置的环境变量,而不会影响到其他...
以上命令涵盖了Linux Shell中最常用的文件管理、文本查看以及系统信息查询操作,熟练掌握这些命令对于高效地管理和使用Linux系统至关重要。通过实践和不断尝试,你将能够更深入地理解和应用这些命令,从而提高在...
source 命令用来读取并执行指定文件中的命令,在这里我们使用它来读取 .bash_profile 文件中的配置信息。 总结 通过配置 .bash_profile 文件,可以解决 Linux CentOS 下 shell 显示-bash-4.1$ 不显示用户名路径的...
- `$HOME/.bash_logout`:用户级别的配置文件,在用户退出登录时执行。 - **Bash 常用命令**: - `history`:查看历史命令记录。 - `alias`:创建命令别名。 - `fg`:将后台进程切换到前台。 - `bg`:将前台...
Linux Shell命令是Linux操作系统中进行交互式操作和自动化任务的核心工具。它允许用户与系统进行交互,执行各种任务,如管理文件和目录、运行程序、处理文本等。下面将详细介绍这些命令及其用法: 1. **`ls`**:列...
- 使用`set`命令查看当前Shell环境中的所有变量: ```sh set ``` - **示例4:输出多个变量的值** - 可以同时输出多个变量的值: ```sh echo $var_1 $var_2 ``` - **示例5:检查变量是否已设置** - 检查...
- 可以通过`.`或`source`命令在当前Shell环境中执行脚本。 12. **示例和实践**: - 文档可能包含简单的脚本实例,如创建目录、备份文件、搜索文本等。 - 实践是学习Shell脚本的关键,通过解决实际问题加深理解。...
- `source`:执行脚本文件,使其影响当前Shell会话。 5. **高级特性**: - `管道` (`|`):将一个命令的输出作为另一个命令的输入。 - `重定向` (`>`,`):改变命令的输入输出位置。 - `通配符` (`*`, `?`):...
通过`source`或`.`(点)命令执行脚本,这些内置命令不会创建新的子Shell,而是直接在当前Shell环境中执行。如果使用`bash`命令运行脚本,则会启动一个新的子Shell。为了使脚本可执行,你需要使用`chmod +x`命令赋予...
- source:执行指定文件中的Shell命令,常用于加载配置文件。 五、Shell函数和流程控制 - case语句:根据不同的条件执行不同的代码块。 - exit:结束当前Shell脚本或子shell。 - trap:设置信号处理函数,当接收到...
- `source`:在当前shell环境中执行脚本。 以上只是Linux命令海洋中的一部分,学习并熟练掌握这些命令,将极大地提升你在Linux环境中的工作效率。通过“Linux命令速查手册”中的资源,你可以深入理解和实践这些...
在Linux操作系统中,Shell是用户与系统交互的重要接口,它提供了命令行界面,允许用户输入命令来执行各种操作。shell脚本编程则是通过编写一系列的命令来自动化任务,极大地提高了工作效率。本文将全面介绍Linux平台...
### 学习Linux---不得不知的Linux命令 在Linux操作系统中,掌握一系列基本且重要的命令是每个用户必备的技能之一。这些命令可以帮助我们更高效地管理服务器、进行日常操作及故障排查等工作。以下是对给定内容中列出...
此脚本首先定义了源目录和备份目录的位置,然后获取当前时间戳,最后使用`tar`命令创建一个压缩归档文件。 #### 用户权限管理 在Linux环境下,文件和目录的访问控制是非常重要的。通过Shell可以轻松地设置或修改...
- `.` 或 `source` 命令用来在当前Shell环境中执行指定的脚本。 - `\`用于续行,确保命令可以在多行中书写。 - `echo`用于输出字符串,`-n`选项可以防止默认的换行。 - `eval`执行动态生成的命令。 - `exec`...
在Linux中,Shell不仅是一个命令解释器,还可以执行脚本文件、处理复杂的命令序列等功能。 - **登录与注销**:用户可以通过`login`或`ssh`命令登录到Linux系统。登录后,用户可以使用`logout`命令退出当前会话或...