shell

shell一个命令解释器,就是对于用户输入的命令进行解释后执行;
所以shell解释的命令有一定的格式;
我们在终端中输入的命令就是被shell所解释执行的...........................
所以在终端中输入的命令是有格式的!!!!!
而cd,sed,grep,vim,ls这些都是一些tools!
所以我们可以做一个shell+许多的untils,在windows下使用,这样看起来像linux的终端下执行!!!!!
shell脚本,就是shell从文件中读入命令,然后执行而已!!!

1. Linux的标准输入0,标准输出1,错误输出2.
2>&1,代表错误输出重定向到标准输出!
2.  标准输出 /dev/stdout 是指向/proc/self/fd/1 的连接,而/proc/self/fd/1又指向了/dev/pts/0
3. a='echo "HELLO"|tr A-Z a-z' ,怎么把a当做命令行来使用??
     echo $a |sh 这个就可以产生hello了,把echo $a的输出作为输入进入sh中,就ok了
4. 执行脚本出现/bin/sh: Syntax error: "(" unexpected错误
   
Dash Shell 是一个Unix Shell,比Bash Shell 小的多,符合POSIX标准。Debian曾经采用/bin/bash的更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过shell脚本测试存在运行问题。因为原先在bash shell 下可以运行的shell script (shell  脚本),会出现一些意想不到的问题,不是100%的兼用。
Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。
解决办法:重新配置shell
1. sudo dpkg-reconfigure dash
选择NO,不使用Dash Shell。
2.采用链接指向
ln -s /bin/bash /bin/sh
检查是否正确:ls -l /bin/sh
5. 上面的那个解决方案不行呀!!
      只要makefile中出现 $(shell gcc -v 2>&1)就挂掉,报错为/bin/sh: -c: line 0: syntax error near unexpected token `(' ,但是ls ,pwd之类都没问题!!gcc -V也可以呀,gcc -v为啥不行呢???
#!/usr/bin/sh
ifneq ($(CC),)
xxx=1;
endif
CC:=gcc
CC_LONGVER:=$(shell gcc -v 2>&1)
FILES:=$(shell ls)
all: main.o
#	$(CC) main.o -o main
main.o:main.c
#	@echo $(xxx)
	echo $(CC_LONGVER)
	$(CC) -c main.c -o main.o
clean:
	rm main.o
	rm main


必须这么写: echo "$(CC_LONGVER)", 必须双引号才行!!!

偶的神呀,怎么这个样子呀!!
当定义 xxx=1;时,echo $(xxx),打印出1
当使用echo "$(xxx)"时,打印出1; 多个冒号呀
难道函数的执行必须在command(recipes)处? 也就是通过makefile中的函数的处理函数的想要的结果a, 在recipes处使用时才去计算!!!这时make调用的shell的东西!!!!
make中的函数不是真正的函数,而是shell脚本实现的????
没办法,只能作此解释!
6.  sh "gcc"时,弹出无法执行二进制文件/usr/gcc,不明白为什么!!!
     这是因为sh只能执行脚本文件,当我们使用终端敲入命令时,其实sh在执行标准输入这个文件!!!

2013.3.27
7.  $(DIR_OBJS)/%.o:%.c foo.h
               $(CC) -o $@ -c $<
   这里gcc -c 编译,居然不用指定.h头文件??也就是编译时,不用把头文件写这里,因为已经include了,哈哈
8. gcc -M和-MM列出某个.c文件所依赖的头文件! -MM不列出系统头文件,如stdio.h等
9. grep只能检索吧,sed 既可以检索,也可以编辑文件!!!!
10. 
2013.3.28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值