+ -
当前位置:首页 → 问答吧 → 配置shell时遇到的关于$的问题

配置shell时遇到的关于$的问题

时间:2008-10-21

来源:互联网

昨晚按BLFS手册配置shell,在创建/etc/profile等文件时使用cat > /etc/profile << "EOF"
然后就一行行敲,结果因为输入的内容里包含${xxxx}这样的东西,被shell给解释成了空(没有定义的变量),最后没办法只好用vim一个个更正。我想问一下,如何阻止shell解释我的输入?BLFS手册应该没问题吧,可为什么我不能照抄还得自己处理这事?

郁闷呢,一开始我还想偷个懒,在windows下直接把BLFS手册上的代码复制到文本文件中,然后在LFS下把文件弄到适当的位置,结果不行,反复检查了个把小时,才搞明白原来是window的回车换行符跟linux不一致,导致出错,这个有没有更好的解决办法?(我后来没办法了,那台机器的windows下也没装什么高级编辑软件,只好在LFS下就手抄了一遍,幸好我把鼠标先装好了,还可以复制粘贴)

作者: wangjt   发布时间: 2008-10-21

引用:
作者: wangjt
昨晚按BLFS手册配置shell,在创建/etc/profile等文件时使用cat > /etc/profile << "EOF"
然后就一行行敲,结果因为输入的内容里包含${xxxx}这样的东西,被shell给解释成了空(没有定义的变量),最后没办法只好用vim一个个更正。我想问一下,如何阻止shell解释我的输入?BLFS手册应该没问题吧,可为什么我不能照抄还得自己处理这事?

郁闷呢,一开始我还想偷个懒,在windows下直接把BLFS手册上的代码复制到文本文件中,然后在LFS下把文件弄到适当的位置,结果不行,反复检查了个把小时,才搞明白原来是window的回车换行符跟linux不一致,导致出错,这个有没有更好的解决办法?(我后来没办法了,那台机器的windows下也没装什么高级编辑软件,只好在LFS下就手抄了一遍,幸好我把鼠标先装好了,还可以复制粘贴)
看来楼主对SHELL编程还不是很清楚,需要继续加强学习啊!

BLFS手册是最难的,因为它不像LFS那样,可以“照抄“,步骤也是相当灵活的,不是LFS那样一步步来,复制命令照做都没关系。

BLFS很灵活,所以你需要对LINUX和SHELL要有更深入的认识。很多人在做BLFS时还是一个个照抄,结果肯定是出问题!特别在配置X系统的时候,手册把脚本分成了几部分,如果不清楚SHELL脚本,那肯定是搞错的。

作者: ti8er   发布时间: 2008-10-21

引用:
作者: ti8er
看来楼主对SHELL编程还不是很清楚,需要继续加强学习啊!

BLFS手册是最难的,因为它不像LFS那样,可以“照抄“,步骤也是相当灵活的,不是LFS那样一步步来,复制命令照做都没关系。

BLFS很灵活,所以你需要对LINUX和SHELL要有更深入的认识。很多人在做BLFS时还是一个个照抄,结果肯定是出问题!特别在配置X系统的时候,手册把脚本分成了几部分,如果不清楚SHELL脚本,那肯定是搞错的。
我只是想确认一下BLFS手册里的代码是不是有瑕疵,因为那些代码是以代码的格式出现的,按理说应该照着抄过去就没什么问题的,否则给出那些代码就没有意义的,那些代码是错误的,执行那种代码得到的结果是不可预期的。

还有就是按照自动脚本的运行原理,好像是直接从手册的xml文件中抽取代码去执行,但这些代码有问题,自动脚本配置BLFS是不是也会遇到这个问题?

作者: wangjt   发布时间: 2008-10-21

引用:
作者: wangjt
我只是想确认一下BLFS手册里的代码是不是有瑕疵,因为那些代码是以代码的格式出现的,按理说应该照着抄过去就没什么问题的,否则给出那些代码就没有意义的,那些代码是错误的,执行那种代码得到的结果是不可预期的。

还有就是按照自动脚本的运行原理,好像是直接从手册的xml文件中抽取代码去执行,但这些代码有问题,自动脚本配置BLFS是不是也会遇到这个问题?
代码都是对的,只是你不能照抄。
就好比我给你一个代码

cd 你的工作目录

要是你不知道,直接复制粘贴,能行吗?
BLFS中,很多代码都是这样的,你说是它错吗?

那么多人看手册做出了BLFS,从来没有说它错的。要理解,不是照抄。这就是BLFS。

作者: ti8er   发布时间: 2008-10-21

你说的

“以代码形式出现的,按理说抄过去没有问题”

是从哪里看到的?书上原文这么说的,还是你自己的错觉?别拿“经验”去套啊,兄弟。

LFS没错,都可以抄,但是LFS书中也绝对没有提到,“照抄过去没问题”。
BLFS更加没有让你去“照抄”。

作者: ti8er   发布时间: 2008-10-21

引用:
作者: ti8er
你说的

“以代码形式出现的,按理说抄过去没有问题”

是从哪里看到的?书上原文这么说的,还是你自己的错觉?别拿“经验”去套啊,兄弟。

LFS没错,都可以抄,但是LFS书中也绝对没有提到,“照抄过去没问题”。
BLFS更加没有让你去“照抄”。
你这什么跟什么啊,你看没看过BLFS手册,一般情况人家的描述都很精准的,哪像你说的“cd到你的工作目录”这样搪塞人的,肯定旁边标着把“工作目录”换成你的环境设置之类的说明。
对于像这种
cat > /etc/profile << "EOF"
.........${PATH}.........
EOF
这样写图什么?还cat,故意误导我们这种新人?
这如果不算是以代码形式出现,何必要写 cat 那一行?和最后那个EOF?

作者: wangjt   发布时间: 2008-10-22

而且BLFS给出的shell配置脚本是很通用的那种,抄过来绝对没有问题,所以我没有问我该怎么配置shell,因为我抄过去已经配置OK了,起码现阶段我没有什么更高的要求了。我这帖子是想问一下,人家BLFS的作者是不是作了什么设置使书上的代码可以直接执行而不出问题(那不是代码合不合适的问题,那代码根本就是错的,就算在作者自己的机器上如果执行结果是那样的那也不能工作)。

作者: wangjt   发布时间: 2008-10-22

引用:
作者: wangjt
你这什么跟什么啊,你看没看过BLFS手册,一般情况人家的描述都很精准的,哪像你说的“cd到你的工作目录”这样搪塞人的,肯定旁边标着把“工作目录”换成你的环境设置之类的说明。
对于像这种
cat > /etc/profile << "EOF"
.........${PATH}.........
EOF
这样写图什么?还cat,故意误导我们这种新人?
这如果不算是以代码形式出现,何必要写 cat 那一行?和最后那个EOF?
很不认同楼主这些说法!

ti8er 带给你的信息很明确,BLFS 下没有残废餐!必需要自己思考,再按手册的指导去完成自己所需的。
引用:
作者: wangjt
而且BLFS给出的shell配置脚本是很通用的那种,抄过来绝对没有问题,所以我没有问我该怎么配置shell,因为我抄过去已经配置OK了,起码现阶段我没有什么更高的要求了。我这帖子是想问一下,人家BLFS的作者是不是作了什么设置使书上的代码可以直接执行而不出问题(那不是代码合不合适的问题,那代码根本就是错的,就算在作者自己的机器上如果执行结果是那样的那也不能工作)。
我说过很多遍,LFS/BLFS 的精髓在於其过程,思考系统的运作方式,并非按照手册敲(拷)命令把系统做出来就算完事,否则只是浪费了阁下青春,而你也只会觉得折腾自己,没有收获!

作者: d00m3d   发布时间: 2008-10-22

引用:
作者: d00m3d
很不认同楼主这些说法!

ti8er 带给你的信息很明确,BLFS 下没有残废餐!必需要自己思考,再按手册的指导去完成自己所需的。

我说过很多遍,LFS/BLFS 的精髓在於其过程,思考系统的运作方式,并非按照手册敲(拷)命令把系统做出来就算完事,否则只是浪费了阁下青春,而你也只会觉得折腾自己,没有收获!
作为新人,我很不认同你的观点,BLFS上的代码基本可以照抄的,不会出什么问题,收不收获那是时间的问题。如果要赶时间,完全可以不抄,让自动脚本去干就行了,自动脚本都能干,你手抄还能出问题?所以我的问题很明确,自动脚本是怎么做到的?

你们这些高手平时就是这么回答新人的问题?我水平差、对Shell不熟这用证明吗?我要水平高我会问这问题?你正正经经答我的问题不行?你不知道就说不知道嘛。

强调一下我的疑问:BLFS的自动脚本根据xsl文件从手册中抽取代码执行,为什么它可以这样做,我手动抽取就不行?这个自动脚本对这段代码做了什么处理?这个处理我可以手动进行吗?

就算是我不抄BLFS,我一样要面对这样的问题啊?我要用cat 命令住文本文件中输入大量的带$和各种其它特殊符号的东西我怎么办? -- 不用回答了,有人告诉我了,转义或用单引号。

你看了很多遍就可以装牛B了?你连人的代码都没抄过你怎么知道对还是不对?

作者: wangjt   发布时间: 2008-10-22

有话好好说 甭一上来就火气冲天~~

作者: lofeng410   发布时间: 2008-10-22

不好意思,怎么帮助新人的贴变成吵架了?

为了确定BLFS的代码是否正确,我刚才专门确认了一下。结果,BLFS的代码是正确的!

我实验的方法如下:

首先,到BLFS 6.3 手册的第3章:The Bash Shell Startup Files

它会给出配置/etc/profile的代码。

然后,我打开了终端,第一行代码输入了:

cat>>temp<<"EOF"

我用temp文件代替/etc/profile

接着,我用鼠标复制了下面所有的代码,一直到EOF

然后粘贴到终端。

最后两行显示将是:
> # End /etc/profile
> EOF

然后我回车确认。当前目录下生成了temp文件。

然后我less了temp文件

less temp

和BLFS手册上的代码认真对照。结果是完全一样的。所有的代码,包括$号和{}号,都准确地输入了temp文件。

下面是输出结果。

因为我在BLFS过程中,根本没有进行第三章,因此并没有认真去校验过代码是对是错。现在校验的结果,这个/etc/profile的代码应该是正确的。

同时我直接从X window system开始的,我可以保证那章的代码都是正确的。我是“参照”那些代码做出了我自己的X window。

最后,谁都不是高手。只是有时候可能用词不当,或者热心过头而已。望见谅!

cat temp
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <[email protected]>
# modifications by Dagmar d'Surreal <[email protected]>

# System wide environment variables and startup programs.

# System wide aliases and functions should go in /etc/bashrc. Personal
# environment variables and startup programs should go into
# ~/.bash_profile. Personal aliases and functions should go into
# ~/.bashrc.

# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}

pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}

pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}


# Set the initial path
export PATH=/bin:/usr/bin

if [ $EUID -eq 0 ] ; then
pathappend /sbin:/usr/sbin
unset HISTFILE
fi

# Setup some environment variables.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"

# Setup a red prompt for root and a green one for users.
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done

# Now to clean up
unset pathremove pathprepend pathappend

# End /etc/profile

作者: ti8er   发布时间: 2008-10-22

引用:
作者: lofeng410
有话好好说 甭一上来就火气冲天~~
兄弟进行到哪一步了?最近不见你上来喊救命了,估计进展顺利嘛哈哈。

作者: ti8er   发布时间: 2008-10-22

下次出问题,请给出LFS book的相关页面,这样也好判断。
至于你想学习Ctrl-C Ctrl-V 还是想学习linux搭建或者说锻炼写自动脚本的能力,那是你自己的选择,:)。

作者: 晨想   发布时间: 2008-10-22

引用:
作者: ti8er
兄弟进行到哪一步了?最近不见你上来喊救命了,估计进展顺利嘛哈哈。
还没有完整的完成过一次,在理解那些指令的意思中。因为一直都不是很明白自己敲入的命令是什么意思,越到后面就越困惑,所以就回头了。呵呵~~

作者: lofeng410   发布时间: 2008-10-22

引用:
作者: lofeng410
还没有完整的完成过一次,在理解那些指令的意思中。因为一直都不是很明白自己敲入的命令是什么意思,越到后面就越困惑,所以就回头了。呵呵~~
恩,这么做非常好!

我也是这么做的,我LFS总共做了2次,第1次也是像你一样非常认真地想每个命令,经常回头,而且还不按书上的做。

经过多次的试验和失败后,终于明白,还是得按书上的做哈哈。因为我所实验的东西,那些家伙也早试验过了,上当了多少回才做出LFS手册:)

不过可不是说让你抄书哦,多反复几次多想还是需要的。老复制粘贴,结果会什么都学不到。

其中我觉得最难的命令就是gcc那里的,一长串,了解了以后,剩下的都很容易了。

作者: ti8er   发布时间: 2008-10-22

多谢了,言语冒犯还望见谅,这时事艰难,你看我真是有点尖酸刻薄了,惭愧惭愧。

但为什么我这里就不行呢?我是在文本模式下做的,Bash Shell,直接输入就是不行,是不是得提前做什么设置?

作者: wangjt   发布时间: 2008-10-22

引用:
作者: wangjt
多谢了,言语冒犯还望见谅,这时事艰难,你看我真是有点尖酸刻薄了,惭愧惭愧。

但为什么我这里就不行呢?我是在文本模式下做的,Bash Shell,直接输入就是不行,是不是得提前做什么设置?
很有可能你输错东西。比如引号、比如全角和半角等等,这些都要注意的。

作者: ti8er   发布时间: 2008-10-22

引用:
作者: wangjt
作为新人,我很不认同你的观点,BLFS上的代码基本可以照抄的,不会出什么问题,收不收获那是时间的问题。如果要赶时间,完全可以不抄,让自动脚本去干就行了,自动脚本都能干,你手抄还能出问题?所以我的问题很明确,自动脚本是怎么做到的?

你们这些高手平时就是这么回答新人的问题?我水平差、对Shell不熟这用证明吗?我要水平高我会问这问题?你正正经经答我的问题不行?你不知道就说不知道嘛。

强调一下我的疑问:BLFS的自动脚本根据xsl文件从手册中抽取代码执行,为什么它可以这样做,我手动抽取就不行?这个自动脚本对这段代码做了什么处理?这个处理我可以手动进行吗?

就算是我不抄BLFS,我一样要面对这样的问题啊?我要用cat 命令住文本文件中输入大量的带$和各种其它特殊符号的东西我怎么办? -- 不用回答了,有人告诉我了,转义或用单引号。

你看了很多遍就可以装牛B了?你连人的代码都没抄过你怎么知道对还是不对?
这不是水平问题,而是求学的应有态度

信息很明确,要思考及去理解,若果只有不经思考的去抄袭,我也看不出有何前途

我不想多说,听不听是阁下的选择。

作者: d00m3d   发布时间: 2008-10-22

引用:
作者: d00m3d
这不是水平问题,而是求学的应有态度

信息很明确,要思考及去理解,若果只有不经思考的去抄袭,我也看不出有何前途

我不想多说,听不听是阁下的选择。
我这不是思考不出来吗?实际上那文件我已经搞定了,cat不行我用vim呗,但问题还是问题啊, 那段命令我还是没不能用啊。 大侠牛x就指点一下啊。

我这是文本模式,想输全角也输不进去,代码我抄完全没有问题,其实根本和抄的对不对没关系,这问题很明显, 所有的$xxx都被bash解释过了,这是行为是预料之中,我只是不明白BLFS书里这么写是什么用意,我查了它的自动脚本所用的xsl,它从 input 域里把代码提取出来,然后在两头加上 “sudo bash -c '” 和 “'”,但我试过这种写法一样不行,我这里没有xml版本的BLFS book,也不知道去哪里下载,所以不确定自动脚本最后生成的代码是什么样的。

哪位知道,那些个求学态度好的,思考过,理解了的,有前途的,说下吧,

作者: wangjt   发布时间: 2008-10-24

无聊的帖子。锁了。

作者: 晨想   发布时间: 2008-10-24