[讨论]shell 内部命令 "." and "exec"

sh/bash/dash/ksh/zsh等Shell脚本
回复
kadox
帖子: 4
注册时间: 2006-04-03 18:28
送出感谢: 0
接收感谢: 0

[讨论]shell 内部命令 "." and "exec"

#1

帖子 kadox » 2006-06-23 16:41

如题
这两个命令都无法运行shell脚本,谁能给解释一下,是不是ubuntu除去了这两个命令?
kadox
帖子: 4
注册时间: 2006-04-03 18:28
送出感谢: 0
接收感谢: 0

#2

帖子 kadox » 2006-06-23 16:45

在/usr/bin下确实没"exec".
头像
sigma
帖子: 439
注册时间: 2006-06-01 22:45
来自: Fujian
送出感谢: 0
接收感谢: 0

#3

帖子 sigma » 2006-06-24 13:30

./command可以的,你的那个脚本放在哪个分区,和这个可能也有关系的
你把脚本放到/bin下执行下看看
被时间羁绊,被邪恶包围……空气稀薄
头像
zhan
帖子: 1880
注册时间: 2005-08-15 0:04
来自: 南7技校
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 zhan » 2006-06-24 17:46

我用 . 运行过一些的,呵呵,好象还有一些不行。不知道为什么
用 sh ***不就没有问题了么?
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn
kadox
帖子: 4
注册时间: 2006-04-03 18:28
送出感谢: 0
接收感谢: 0

#5

帖子 kadox » 2006-06-25 10:56

多谢两位回复。
./command 和 sh 都能执行,我在一本参考书上看到有4种方法来运行shell脚本,但"."和"exec"不行,前面那两个可以,不知道为什么?
头像
gnix_oag
帖子: 1994
注册时间: 2005-05-19 18:38
来自: 湖南永州
送出感谢: 0
接收感谢: 1 次
联系:

#6

帖子 gnix_oag » 2006-06-25 13:00

ubuntu并没有除去了这两个命令

这两个常见于脚本中

代码: 全选

   .            /脚本文件
是导入脚本文件的函数,或运行脚本,(只能用于脚本)

代码: 全选

  exec   /程序 
是在子进程中运行程序。
echo_mu
帖子: 21
注册时间: 2006-06-03 13:55
送出感谢: 0
接收感谢: 0

#7

帖子 echo_mu » 2006-10-15 17:35

kadox 写了:多谢两位回复。
./command 和 sh 都能执行,我在一本参考书上看到有4种方法来运行shell脚本,但"."和"exec"不行,前面那两个可以,不知道为什么?
. file #在当前shell下执行程序,即不产生子shell执行程序。
exec command #该命令不像其他命令那样以一个新进程运行,而是用command代替当前进程。试试"/bin/sh"以及"exec /bin/sh"。再看看进程表
xdsnet
帖子: 80
注册时间: 2006-02-28 15:44
送出感谢: 0
接收感谢: 0

#8

帖子 xdsnet » 2006-10-27 11:32

估计楼主还没有注意空格问题,其实 . 仅仅是把一段脚本文件引入到当前文件中一起执行,这种方法可以在引入的脚本文件不具有执行权限时仍然执行脚本内容。
Zelgadiss
帖子: 8
注册时间: 2006-11-06 10:25
送出感谢: 0
接收感谢: 0

#9

帖子 Zelgadiss » 2006-11-06 10:46

这二个是bash标准的内嵌脚本命令外部无法调用的

就像楼上所说的 . 是用来引入文件的
就像 bashrc 文件里,或者有些系统脚本里的 . XXX
就是说这里为了引入一段脚本

而我们平常用的 . 其实并不是命令, 而是指路径
./command 执行当前目录下的command命令

由于默认路径中是不可能包含当前路径的(除非你的$PWD在$PATH中)
否则当你输入 command 时, Bash则会在 $PATH 中查找是否则能够找到 command
当找不到的时候就不执行 而 ./command 的作用就是声明command在当前路径下

至于exec 我印象中 我只在IO重定向的时候用过...
回复

回到 “Shell脚本”