heredoc in shell

heredoc 参考下面几个链接 http://en.wikipedia.org/wiki/Here_document http://tldp.org/LDP/abs/html/here-docs.html $ cat « EOF > Working dir $PWD > EOF Working dir /home/user 不解释变量 $ cat « “EOF” > Working dir $PWD > EOF Working dir $PWD 创建脚本的脚本 #!/bin/bash OUTFILE=generated.sh # Name of the file to generate. ( cat «‘EOF’ #!/bin/bash echo “This is a generated shell script.” # Note that since we are inside a subshell, #+ we can’t access variables in the “outside” script. echo “Generated file will be named: $OUTFILE” a=7 b=3 let “c = $a * $b” echo “c = $c” exit 0 EOF ) > $OUTFILE if [ -f “$OUTFILE” ] then chmod 755 $OUTFILE else echo “Problem in creating file: "$OUTFILE"” fi exit 0 ...

July 28, 2009 · notsobad

Action script的作用域

在看action script,看到了变量作用域,实际上和javascript是一样的。 查看原文 变量的"作用域"是指可在其中通过引用词汇来访问变量的代码区域。“全局"变量是指在代码的所有区域中定义的变量,而"局部"变量是指仅在代码的某个部分定义的变量。在 ActionScript 3.0 中,始终为变量分配声明它们的函数或类的作用域。全局变量是在任何函数或类定义的外部定义的变量。例如,下面的代码通过在任何函数的外部声明一个名为 strGlobal 的全局变量来创建该变量。从该示例可看出,全局变量在函数定义的内部和外部均可用。 var strGlobal:String = “Global”; function scopeTest() { trace(strGlobal); // 全局 } scopeTest(); trace(strGlobal); // 全局 可以通过在函数定义内部声明变量来将它声明为局部变量。可定义局部变量的最小代码区域就是函数定义。在函数内部声明的局部变量仅存在于该函数中。例如,如果在名为 localScope() 的函数中声明一个名为 str2 的变量,该变量在该函数外部将不可用。 function localScope() { var strLocal:String = “local”; } localScope(); trace(strLocal); // 出错,因为未在全局定义 strLocal 如果用于局部变量的变量名已经被声明为全局变量,那么,当局部变量在作用域内时,局部定义会隐藏(或遮蔽)全局定义。全局变量在该函数外部仍然存在。例如,下面的代码创建一个名为 str1 的全局字符串变量,然后在 scopeTest() 函数内部创建一个同名的局部变量。该函数中的 trace 语句输出该变量的局部值,而函数外部的 trace 语句则输出该变量的全局值。 var str1:String = “Global”; function scopeTest () { var str1:String = “Local”; trace(str1); // 本地 } scopeTest(); trace(str1); // 全局 与 C++ 和 Java 中的变量不同的是,ActionScript 变量没有块级作用域。代码块是指左大括号 ({) 与右大括号 (}) 之间的任意一组语句。在某些编程语言(如 C++ 和 Java)中,在代码块内部声明的变量在代码块外部不可用。对于作用域的这一限制称为块级作用域,ActionScript 中不存在这样的限制,如果您在某个代码块中声明一个变量,那么,该变量不仅在该代码块中可用,而且还在该代码块所属函数的其它任何部分都可用。例如,下面的函数包含在不同的块作用域中定义的变量。所有的变量均在整个函数中可用。 function blockTest (testArray:Array) { var numElements:int = testArray.length; if (numElements > 0) { var elemStr:String = “Element #”; for (var i:int = 0; i < numElements; i++) { var valueStr:String = i + “: " + testArray[i]; trace(elemStr + valueStr); } trace(elemStr, valueStr, i); // 仍定义了所有变量 } trace(elemStr, valueStr, i); // 如果 numElements > 0,则会定义所有变量 } blockTest([“Earth”, “Moon”, “Sun”]); 有趣的是,如果缺乏块级作用域,那么,只要在函数结束之前对变量进行声明,就可以在声明变量之前读写它。这是由于存在一种名为"提升"的方法,该方法表示编译器会将所有的变量声明移到函数的顶部 。例如,下面的代码会进行编译,即使 num 变量的初始 trace() 函数发生在声明 num 变量之前也是如此。 trace(num); // NaN var num:Number = 10; trace(num); // 10 但是,编译器将不会提升任何赋值语句。这就说明了为什么 num 的初始 trace() 会生成 NaN(而非某个数字),NaN 是 Number 数据类型变量的默认值。这意味着您甚至可以在声明变量之前为变量赋值,如下面的示例所示: num = 5; trace(num); // 5 var num:Number = 10; trace(num); // 10 ...

July 27, 2009 · notsobad

php模块的调试

python里面有这样的用法 #a.py if __name__ == "__main__": print "test" //只有直接python a.py 才会打印test 意思就是当前脚本独立运行时,才会运行print “test”,这在编写模块,并被其他程序调用时,可以用来调试。 php中没有对应的,今天想起来可以这样做: ...

June 18, 2009 · notsobad

psql中的函数

psql支持PL/pgSQL - SQL 过程语言, 所以可以编写一些自己的函数以供调用。 具体语法可以参考这里 #要查询已经定义的函数可以: \df #查用户定义的函数 \df+ func_name

June 16, 2009 · notsobad

从头学C

我也开始学C了,从头开始 在看Linux C编程一站式学习 写了这么简单一个程序居然也出错: #include <math.h> #include <stdio.h> /* main */ int main(){ int i; double pi = 3.1415; printf("sin(pi/2)=%f", sin(pi/2)); for (i=0; i<123; i++){ printf("%d => %c\n", i, i); } return 0; } 编译: 507 ~/script/cpp>gcc -Wall wang.c /tmp/ccuCPK1g.o: In function main': wang.c:(.text+0x29): undefined reference to sin’ collect2: ld 返回 1 google了一下,原来还是个FAQ 这样就ok了 514 ~/script/cpp>gcc -Wall -lm wang.c && ./a.out sin(pi/2)=1.000000 这个网站不错: c-faq.com ...

June 12, 2009 · notsobad

Lisp

最近在用emacs,看了些lisp的东西 原来现代语言的很多特性最早是从lisp中来的 找到几篇很好的文章: 十年学会编程 Lisp之根源 1. 条件语句。当初的语言是没有if else的,goto统治世界。 2. 函数类型。函数成了语言里的类型,可以被变量指代,可以被当成参数传来传去(的一类公民的必要条件,参考SICP第一章)。这一条可以极大简化编程,让我们写出非常漂亮的程序。所以现在的流行语言纷纷加入了这个特性(可惜Java没有)。 3. 递归。这个不用说了吧。 4. 动态类型。smalltalk, python, ruby。。。连C#也有一个类似的var了。 5. 垃圾收集。不要以为GC是Smalltalk的发明哈,更不是Java的。 6. 基于表达式的编程。任何表达式都可以成为另一个表达式的一部分。不像很多语言,把表达和陈述分开。 7. 符号类型。这个在python和ruby里被采用,广受欢迎。 8. 代码即解析树。这个让LISP能方便地定义新的句法,操作程序本身,编写元程序,生成真正意义上的宏。 9. 语言无时不在。代码运行/解析可以在任何时候发生。这点和8.配合可以让语言的扩展和交流变得非常容易。 ...

June 9, 2009 · notsobad

emacs vs vi

emacs与vi的对比 我习惯用vi,但一直想尝试下emacs,屡次失败 vi下的常用的几个操作,然后找出emacs对应操作就会简单的多了 VI EMACS -- ----- Right one column k ^f Right one word w Esc,f Left one word b Esc,b Next sentence ) Esc,e Previous sentence ( Esc,a Save file :w ^x,^s Delete paragraph d} Esc,x,kill-p[TAB],[RET] Edit a new file :ename ^x,^f,name RegEx search for "foo" /foo Esc,^sfoo Repeat search n ^s,[RET] Exit :q or QQ ^x,^c Save and Exit :x ^x,^s,^x,k,[RET] Repeat last search n ^s,[RET] Paste from clipboard p ^y Delete 7 lines 7dd ^a,Esc,7,^k Undo u ^x,u or ^/ Change a letter to "x" rx ^d,x Go to line 6 :6[RET] Esc,<,Esc,5,^n ..or 6G Esc,x,goto-l[TAB][RET],6[RET] 另外和bash里面的几个快捷键一样: 到行首:^a 到行尾:^e 删除行: ^k 粘贴:^y undo: ^x u 参考: http://www.grok2.com/vi-emacs.html http://www.io.com/~dierdorf/emacsvi.html <http://www.cs.rutgers.edu/LCSR- Computing/some-docs/emacs-chart.html> http://www.wlindley.com/gnu/vi.htm ...

June 8, 2009 · notsobad

php中的会话阻塞

php中exec, system调用其它脚本,脚本中又将一些脚本放入后台,可能会话会被挂起,也就是其它所有的请求都会被阻塞,点任何链接都没反应。 似乎与这个问题有关: What happens is that the child process which is called by the system() ,exec() or shell_exec() command holds the file lock on the parent process, thus locking the session file. Thus, the session file being locked session_start(); function cannot access the file. This is due to to open file descriptors locking the session file.Your entire session will be locked, so none of the pages of the website can be opened ( which are under session control ) unless you change the browser or delete cookies. ...

June 1, 2009 · notsobad

用umask来定义权限

在linux下,有时需要多人改一个文件, a, b在同一个组内,但是默认的a创建的文件权限是“-rw-r–r–”,组用户是没有写权限的。 我希望修改默认的创建文件的权限,这样不用手动去改,今天发现umask就是干这个事的 这篇讲得很详细 http://linux.vbird.org/linux_basic/0220filemanager.php#umask 所以只要在.bashrc里面写: umask 0002 或者: umask g=rw doubanclaimdcac3ef1e9a427da ...

May 25, 2009 · notsobad

Javascript 来判断网络通断

一项应用可能会导致 web server 重启, 我需要检测这个重启过程,重启完毕能够给用户以通知 思路: js的生存期是在客户端,即使服务器已经重启,js仍可运行,所以用js是可以实现的 因为server上存在着favicon.ico文件,可以以检测是否能取得这个文件,来判断网络的通断。 ...

May 20, 2009 · notsobad