Category: Study

possible unbalanced brace in comment

我敢打赌,很多用expect写脚本的同学都遇到过这个问题。 一个小例子: [shell] if {$val == 1} { # comments with { send_user "Value is 1\n" } [/shell] 很明显,我们想要的效果是,向用户输出 “values is 1”这句话。可是他会报错: “missing close-brace: possible unbalanced brace in comment” 究其原因,是因为注释最后不能加大括号。。。。。。 这本是tcl和expect脚本的一个bug,但貌似他们为了兼容以前的代码而拒绝修复这个bug,反而说这是语言特色。 whatever,不过在我看来,实在滑稽。

JQuery绑定click事件函数传参问题

最近用JQuery库遇到一个问题: 在给一个button绑定click函数的时候 1. 如果该函数不传递参数,那么可以正常使用 2. 如果该函数接收参数,该函数的响应时间变得非常奇怪   Example: 情况1 我有一个按钮,id为 btn_1,绑定的函数为 [code lang=”js”] function cool_function() { alert("BALA BALA"); } [/code] 绑定的方式为: [code lang=”js”] $("#btn_1").click(cool_function); [/code] 这个时候,当我点击该按钮,可以弹出提示“BALA BALA”   情况2 当我需要传递一个参数给cool_function的时候,问题来了 [code lang=”js”] function cool_function(val) // 接收一个参数 { alert(val); } $("#btn_1").click(cool_function(12345)); // 传递12345进去 [/code] 按预想,应该是单击按钮的时候,弹出提示“12345”,但现在是只要我一进入页面,则自动弹出“12345”提示,而不是等我点击按钮以后提示。   解决方案 该问题是由于JQuery默认只要函数名后面跟了括号则触发的机制造成的。可以采取回调函数的方法来解决。示例代码如下: [code lang=”js”] function cool_function(event) { alert(event.data.para1); alert(event.data.para2); } […]

PHP 调用 SHELL 需要注意的地方

最近需要从前端调用系统命令实现一些东西,然后返回到前端来。 思来想去,觉得 html <-> php <-> shell的模式应该不错。从html到php可以用ajax实现动态交互,但php调用shell的这个过程需要注意一些地方。在这里浪费了不少时间。 第一:调用方式 PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。具体的用法Google一下已经很多了。 第二:权限问题 由于我的web项目是在apache目录下的,但apache并没有足够的权限执行一些诸如mkdir等命令,导致我拔一些东西并储存的时候毫无反应。简单的做法就是修改一下web项目所在目录权限就可以了。 比如 $ chmod -R 777 /home/www/example  

SHELL 脚本从文件中按行读取数据

今天遇到一个问题: 需要给Shell脚本传递参数,一般来说,我们采用 $ ./test.sh para1 para2 para3 para4 这种方式,然后在shell中使用$1, $2, $3, $4 即可获取传入的参数。 但由于这次需要传递的参数实在太多,大约100K个(通过文件给出,每行即为一个参数),所以得变通一下。Google以后,发现通过awk命令可以实现,具体如下: [shell] #! /bin/bash for x in ` awk ‘{print $0}’ number_sub.txt ` { echo $x } [/shell] 接下来就可以做想做的工作了,解决。

Linux系统启动过程

面试的时候被问到Linux启动过程,没有答得很好。回来收集了一些资料,发现有一篇博客写得不错,不过是英文的。特翻译过来供广大小伙伴们参考:) 原文: http://www.thegeekstuff.com/2011/02/linux-boot-process/ ———————————————————- 我是背景 ——————————————————– 通常,我们按下开机键,几秒钟后,我们就能看到Linux的登录界面。 但是你有没有想过,在屏幕的背后,这一切是怎么发生的呢? 下面会为大家分六个阶段简述一下一个典型的Linux操作系统的启动过程。 1. BIOS BIOS,即 Basic Input/Output System BIOS,基本输入输出系统。 对系统做完整性检查,即计算机硬件能否满足运行的基本条件。如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止,比如内存卡没有插好。 查找,加载以及执行引导装载程序。 它会在软盘、光盘或者硬盘驱动器等上查找引导装载程序。你也可以在BIOS启动过程中按F12或者F2(一般来说是这两个键)来改变这个顺序。比如重装系统的时候,你在BIOS阶段按F12,然后选择从U盘启动。 一旦引导装载程序被找到并且加载到了内存中,BIOS就将计算机的控制权交给它了。 简单来说,BIOS阶段就是加载并执行MBR 2. MBR MBR,即Master Boot Record. MBR, 主引导记录。 位于启动盘的第一扇区,一般为 /dev/hda或者/dev/sda MBR 共有512位,由三个部分组成,1)第1-446位,主引导加载程序信息 2)接下来64位存放分区表 3)最后两位用来存储MBR有效标记 它包含了GRUB的信息(或者在一些老系统上的LILO信息) 简单来说,MBR阶段就是加载并执行GRUB 3. GRUB GRUB,即Grand Unified Bootloader,启动管理器。 如果你在操作系统分区中装了好几个内核,通过GRUB,你就可以选择启动哪一个。 GRUB会展示一个初始化的界面,等待你的选择,如果过了等待时间,它就会加载在grub配置文件中指定的默认内核镜像。 GRUB能够识别文件系统(在老Linux系统上的LILO并不能识别文件系统)。 Grub 配置文件在 /boot/grub/grub.conf (/etc/grub.conf 只是一个链接)。下面是一个CentOS中的grub.conf文件信息 #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-194.el5PAE) root […]