有些地方不明白...

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
Yume
帖子: 1015
注册时间: 2010-05-24 12:16
送出感谢: 0
接收感谢: 0

有些地方不明白...

#1

帖子 Yume » 2011-05-11 15:26

这些命令都是 Linux 系统终端执行 help 命令之后出现的...
下面的命令都是直接从终端复制的,但是括号标点太多,空格都不起作用,至此带来的不便之处还请见谅...
问题一: Bash 脚本的命令是不是就这些啊?
问题二: 如果这些命令是 Bash 脚本的,那么其它的命令是不是就是调用的?
问题三: 这些命令是不是 Bash 内嵌的?
问题四: find / -name fg -print 为什么找不到 fg 可执行文件?
问题五: find / -name echo -print 能找到 echo 可执行文件,那么,这个命令是调用的吗?
Linux 系统终端... 写了:GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

JOB_SPEC [&] (( expression ))
. filename [arguments] :
[ arg... ] [[ expression ]]
alias [-p] [name[=value] ... ] bg [job_spec ...]
bind [-lpvsPVS] [-m keymap] [-f fi break [n]
builtin [shell-builtin [arg ...]] caller [EXPR]
case WORD in [PATTERN [| PATTERN]. cd [-L|-P] [dir]
command [-pVv] command [arg ...] compgen [-abcdefgjksuv] [-o option
complete [-abcdefgjksuv] [-pr] [-o continue [n]
declare [-afFirtx] [-p] [name[=val dirs [-clpv] [+N] [-N]
disown [-h] [-ar] [jobspec ...] echo [-neE] [arg ...]
enable [-pnds] [-a] [-f filename] eval [arg ...]
exec [-cl] [-a name] file [redirec exit [n]
export [-nf] [name[=value] ...] or false
fc [-e ename] [-nlr] [first] [last fg [job_spec]
for NAME [in WORDS ... ;] do COMMA for (( exp1; exp2; exp3 )); do COM
function NAME { COMMANDS ; } or NA getopts optstring name [arg]
hash [-lr] [-p pathname] [-dt] [na help [-s] [pattern ...]
history [-c] [-d offset] [n] or hi if COMMANDS; then COMMANDS; [ elif
jobs [-lnprs] [jobspec ...] or job kill [-s sigspec | -n signum | -si
let arg [arg ...] local name[=value] ...
logout popd [+N | -N] [-n]
printf [-v var] format [arguments] pushd [dir | +N | -N] [-n]
pwd [-LP] read [-ers] [-u fd] [-t timeout] [
readonly [-af] [name[=value] ...] return [n]
select NAME [in WORDS ... ;] do CO set [--abefhkmnptuvxBCHP] [-o opti
shift [n] shopt [-pqsu] [-o long-option] opt
source filename [arguments] suspend [-f]
test [expr] time [-p] PIPELINE
times trap [-lp] [arg signal_spec ...]
true type [-afptP] name [name ...]
typeset [-afFirtx] [-p] name[=valu ulimit [-SHacdfilmnpqstuvx] [limit
umask [-p] [-S] [mode] unalias [-a] name [name ...]
unset [-f] [-v] [name ...] until COMMANDS; do COMMANDS; done
variables - Some variable names an wait [n]
while COMMANDS; do COMMANDS; done { COMMANDS ; }
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: 有些地方不明白...

#2

帖子 lilydjwg » 2011-05-11 15:38

有些命令只能内嵌,比如 cd 和 fg。有些命令很常用,所以内嵌了加快运行,如 [ 和 echo。另外,找命令对应的可执行文件,可以用 which xxx。列出所有能找到的,用 which -a xxx

PS: which bash 也应该内嵌了。
头像
Yume
帖子: 1015
注册时间: 2010-05-24 12:16
送出感谢: 0
接收感谢: 0

Re: 有些地方不明白...

#3

帖子 Yume » 2011-05-11 15:52

谢谢好心人指教...

另外,我用的这个版本的 Bash 里没有内嵌 which 命令到 Bash 里...
find / -name which -print
/bin/which
愿好人一生平安...
头像
Yume
帖子: 1015
注册时间: 2010-05-24 12:16
送出感谢: 0
接收感谢: 0

Re: 有些地方不明白...

#4

帖子 Yume » 2011-05-11 15:57

是不是放在 /bin 目录里的就是内嵌的?您刚刚说的 echo 正是在 /bin 目录里的,但是 [ 不在...
头像
remeber
论坛版主
帖子: 13005
注册时间: 2009-01-06 15:18
来自: 人间
送出感谢: 1 次
接收感谢: 22 次

Re: 有些地方不明白...

#5

帖子 remeber » 2011-05-11 16:02

内部命令与外部命令区别
当你执行一个命令的时候.系统的寻找方式是:
alias / function / 内部命令/外部命令
速度有差别,内部命令不用启动一个子shell来执行,外部命令则需要启动一个子shell执行它。比如命令basename的执行速度明显不入${var##*/}
/bin目录一说 是路径问题 存在于PATH中
“有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 有些地方不明白...

#6

帖子 eexpress » 2011-05-11 16:08

Yume, type xxx 看吧。所谓内部,也只是当前shell的内部而已。别当回事。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: 有些地方不明白...

#7

帖子 lilydjwg » 2011-05-11 16:32

Yume 写了:谢谢好心人指教...

另外,我用的这个版本的 Bash 里没有内嵌 which 命令到 Bash 里...
find / -name which -print
/bin/which
愿好人一生平安...
Yume 写了:是不是放在 /bin 目录里的就是内嵌的?您刚刚说的 echo 正是在 /bin 目录里的,但是 [ 不在...
看来只有 zsh 的 which 是内嵌的。[ 不在 /bin 下。是否内嵌和它的外部命令版所在的位置没有特别的关系。

代码: 全选

>>> which -a [
[: shell built-in command
/usr/bin/[
头像
Yume
帖子: 1015
注册时间: 2010-05-24 12:16
送出感谢: 0
接收感谢: 0

Re: 有些地方不明白...

#8

帖子 Yume » 2011-05-11 16:40

谢谢各位回帖者的热心帮助,愿好人一生平安...
看来我还有好多路要走啊... 写了:
remeber 写了:内部命令与外部命令区别
当你执行一个命令的时候.系统的寻找方式是:
alias / function / 内部命令/外部命令
速度有差别,内部命令不用启动一个子shell来执行,外部命令则需要启动一个子shell执行它。比如命令basename的执行速度明显不入${var##*/}
/bin目录一说 是路径问题 存在于PATH中
eexpress 写了:Yume, type xxx 看吧。所谓内部,也只是当前shell的内部而已。别当回事。
lilydjwg 写了:看来只有 zsh 的 which 是内嵌的。[ 不在 /bin 下。是否内嵌和它的外部命令版所在的位置没有特别的关系。

代码: 全选

>>> which -a [
[: shell built-in command
/usr/bin/[
死亡阴影
帖子: 130
注册时间: 2007-11-28 8:52
送出感谢: 0
接收感谢: 1 次
联系:

Re: 有些地方不明白...

#9

帖子 死亡阴影 » 2011-05-20 0:56

额 内嵌什么的没看懂
回复

回到 “Shell脚本”