sh/bash/dash/ksh/zsh等Shell脚本
-
nothing9k
- 帖子: 2
- 注册时间: 2011-04-13 20:19
#1
帖子
由 nothing9k » 2011-05-19 22:05
在一个软件源码的发布包里,发现一个configure。其内容如下:
代码: 全选
$ cat configure
#! /bin/sh
# run the automatically generated configure script
CONFIG_STATUS=auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
result=$?
# Stupid autoconf 2.5x causes this file to be left behind.
if test -f configure.lineno; then rm -f configure.lineno; fi
exit $result
关于这段SHELL代码里面,CONFIG_STATUS变量的赋值,本人是在看不懂。
不知有没高人能够指点一二?
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#2
帖子
由 eexpress » 2011-05-19 22:10
\是分行,其他是命令和参数。还有一些bash的字符串处理,{}那些,是bash的缺省赋值的写法。
● 鸣学
-
nothing9k
- 帖子: 2
- 注册时间: 2011-04-13 20:19
#3
帖子
由 nothing9k » 2011-05-19 22:21
eexpress 写了:\是分行,其他是命令和参数。还有一些bash的字符串处理,{}那些,是bash的缺省赋值的写法。
你好,谢谢你的回复。
\ 这个代表分行,
那么整个语句应该是
代码: 全选
CONFIG_STATUS=auto/config.status auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
如果暂时不管" "$@" --srcdir="${srcdir:-.}" --cache- "这些东西,那么整个语句应该是:
代码: 全选
CONFIG_STATUS=auto/config.status auto/configure
那么如何去看懂这个呢?
为此我还写了测试程序:
代码: 全选
$ cat configure
#!/bin/sh
CONFIG_STATUS=./test_1.sh \
./test_2.sh "$@"
echo CONFIG_STATUS is ${CONFIG_STATUS}
result=${?}
echo result is ${result}
exit ${result}
$ cat test_1.sh
#!/bin/bash
echo "This is generated by script test_1.sh"
$ cat test_2.sh
#!/bin/bash
echo "This is generated by script test_2.sh"
$ ./configure
This is generated by script test_2.sh
CONFIG_STATUS is
result is 0
我看到的结果是test_1.sh根本不执行,而CONFIG_STATUS也没有赋值成功。
心里为这纠结了好久。

-
死亡阴影
- 帖子: 130
- 注册时间: 2007-11-28 8:52
-
联系:
#4
帖子
由 死亡阴影 » 2011-05-20 1:07
auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
$@ 表示命令行上输入的所有参数串,认为每个参数都一个单独的单词
应该是
auto/config.status auto/configure $@
而--srcdir="${srcdir:-.}" --cache-file=auto/config.cache 都是参数不影响执行
估计要测就要看$@是否有要求了吧
随便侃的

-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#5
帖子
由 fnan » 2011-05-21 18:59
CONFIG_STATUS=auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
先看看这个例子:
kose5@kose5-Aspire-4552:~$ a=12 echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
kose5@kose5-Aspire-4552:~$ a=12; echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
12
kose5@kose5-Aspire-4552:~$
所以个人十分厌恶这种装B写法。实际等效写法为:
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache # CONFIG_STATUS=auto/config.status
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#6
帖子
由 lilydjwg » 2011-05-21 19:06
fnan 写了:CONFIG_STATUS=auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
先看看这个例子:
kose5@kose5-Aspire-4552:~$ a=12 echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
kose5@kose5-Aspire-4552:~$ a=12; echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
12
kose5@kose5-Aspire-4552:~$
所以个人十分厌恶这种装B写法。实际等效写法为:
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache # CONFIG_STATUS=auto/config.status
看不出来。