Articles of ksh

如何克服Linux上的ksh与安装在AIX / Solaris / HPUX上的不兼容?

我参与了将包含几百个ksh脚本的系统从AIX,Solaris和HPUX移植到Linux的过程。 我已经遇到了ksh在两个系统上行为方式的差异: #!/bin/ksh flag=false echo "a\nb" | while read x do flag=true done echo "flag = ${flag}" exit 0 在AIX,Solaris和HPUX上,Linux上的输出为“flag = true”,输出为“flag = false”。 我的问题是: 是否有一个环境variables,我可以设置让Linux的ksh行为像其他奥斯的'? 否则: 在Linux的ksh上有没有一个选项来获得所需的行为? 否则: 有一个ksh实现可用于Linux与所需的行为? 其他说明: 在AIX上,Solaris和HPUX ksh是ksh88的变种。 在Linux上,ksh是公有域ksh(pdksh) 在AIX,Solaris和HPUX上,dtksh和ksh93(我安装了它们)与ksh一致 我有权访问的Windows NT系统:Cygwin和MKS NT,与Linux一致。 在AIX,Solaris和Linux上,bash是一致的,给出了不正确的(从我的angular度来看)“flag = false”的结果。 下表总结了系统的问题: uname -s uname -r which ksh ksh version flag = ======== ======== ========= […]

如何将文件从X sub_dir移动到Y sub_dir

我有主DIR X和里面,我有许多子目录像A,B,C,D。 我有主要的目录Y和里面这个我有许多子目录与X主目录子目录像A,B,C,D相同的名称。 现在我只需要将X主dir子目录中的文件移动到Y主目录子目录。 例如: 在主目录X中,子目录A有100个文件 而B有1个文件 C有5个文件 和D有50个文件… 我的光标应该在主DIR X,从那里我需要将所有的子目录文件移动到Y主目录里面的同名的子目录(A,B,C,D)。 我怎么能在SHELL SCRIPTING(KSH​​)或unix中做到这一点?

如何在unix脚本中发送带有消息的邮件

新来unix和学习它的谈话和散步。 我在.ksh中写了一个脚本,并且要求发送一封包含消息的邮件。 目前在我的脚本中使用这个命令: mailx -s"File not found" abc@def.com 这个命令帮助我有一个主题和收件人的名字。 我的问题是,我怎样才能写一条消息。 因为每当我运行脚本暂停,并要求我input消息,然后执行,我想预先包含消息,以便脚本不会暂停之间。

如何在shell脚本中只读一个字符

我想要类似的选项,如c中的getche() 。 我怎样才能从命令行读取一个字符input。 使用read命令我们可以做到吗?

Shell脚本inputredirect怪异

任何人都可以解释此行为? 运行: #!/bin/sh echo "hello world" | read var1 var2 echo $var1 echo $var2 结果没有任何输出,而: #!/bin/sh echo "hello world" > test.file read var1 var2 < test.file echo $var1 echo $var2 产生预期的输出: hello world 在第二个例子中,pipe道不应该在一步中做什么redirect到test.file? 我用同样的代码与破折号和bash炮弹,并从他们得到相同的行为。

`unzip -l`时提取zip文件中的文件名列表

当我做unzip -l zipfilename ,我明白了 1295627 08-22-11 07:10 A.pdf 473980 08-22-11 07:10 B.pdf … 我只想看到文件名。 我试试这个 unzip -l zipFilename | cut -f4 -d" " 但我不认为分隔符就是" " 。

如何recursion列出一个位置的所有目录,宽度优先?

广度优先列表在这里很重要。 此外,限制search的深度将是很好的。 $ find . -type d /foo /foo/subfoo /foo/subfoo/subsub /foo/subfoo/subsub/subsubsub /bar /bar/subbar $ find . -type d -depth /foo/subfoo/subsub/subsubsub /foo/subfoo/subsub /foo/subfoo /foo /bar/subbar /bar $ < what goes here? > /foo /bar /foo/subfoo /bar/subbar /foo/subfoo/subsub /foo/subfoo/subsub/subsubsub 如果可能的话,我想用bash单线程来做这个。 如果有一个JavaScript的shell,我会想像的东西 bash("find . -type d").sort( function (x) x.findall(/\//g).length; )