标签: ksh

有没有办法总结列出的文件的大小?

这是我用来列出一些文件的命令:

find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \;
-rw-r--r--   1 qa1wrk15   test       1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys
-rw-r--r--   1 qa1wrk15   test       1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys
-rw-r--r--   1 qa1wrk15   test       1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys
-rw-r--r--   1 qa1wrk15   test       1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys
Run Code Online (Sandbox Code Playgroud)

等等。

现在我想通过总结第 5 列来计算这些文件的总大小。我想使用awk, 来做到这一点,所以我在特定目录中测试了以下内容

>ls -lrt | awk `{ print $1 }`
ksh: syntax error at line 1 : `{' unmatched
Run Code Online (Sandbox Code Playgroud)

我不明白有什么问题,为什么这个语法错误

我想试试

ls -lrt | awk …
Run Code Online (Sandbox Code Playgroud)

ksh hp-ux shell-script

21
推荐指数
4
解决办法
4万
查看次数

for(( ... )){ ... ;} 是一个有效的 shell 语法吗?在哪个贝壳里?

表达式:

$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

工作正常。

我没有在手册中找到{...;}替换 的语法的描述; do ...; done

手册上有参考吗?对于哪些外壳可以正常工作?

shell bash ksh zsh

21
推荐指数
1
解决办法
1317
查看次数

两行长管道的首选语法

写一个长管道时,将它分成两行通常会更清楚。

这个长命令行:

ruby -run -e httpd -- -p 5000 . 2>&1 | tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 
Run Code Online (Sandbox Code Playgroud)

可以分为:

ruby -run -e httpd -- -p 5000 . 2>&1 \
   | tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 
Run Code Online (Sandbox Code Playgroud)

或者:

ruby -run -e httpd -- -p 5000 . 2>&1 |
    tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 
Run Code Online (Sandbox Code Playgroud)

简而言之:

command1 \
    | command2
Run Code Online (Sandbox Code Playgroud)

或者:

command1 |
    command2
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是一个风格(意见)问题,但是:有没有更喜欢的方式,如果有,为什么?

shell bash ksh syntax

20
推荐指数
4
解决办法
2188
查看次数

如何使用正则表达式 scp

我正在尝试在 ksh 中复制所有不以字母“a”开头的文件。

从源机器复制到目标机器工作正常

scp -p !(a*) user@machine:/path/directory/.

但是,如果我在目标服务器上并想从源服务器复制,则失败:

scp -p user@machine:/path/!(a*) .

有任何想法吗?

scp ksh

19
推荐指数
3
解决办法
3万
查看次数

//1/是什么意思

使用 Korn Shell 的 QNX4 操作系统。这是在 .profile 文件中。

export VARDIR=//1/usr/pvcs
Run Code Online (Sandbox Code Playgroud)

//1/ 代表什么?

ksh qnx

19
推荐指数
1
解决办法
2867
查看次数

为什么 a=0; 让a++返回退出代码1?

尝试一下:

$ a=0
$ let a++
$ echo $?
1 # Did the world just go mad?
$ echo $a
1 # Yes, it did.
$ let a++
$ echo $?
0 # We have normality.
$ echo $a
2
Run Code Online (Sandbox Code Playgroud)

对比一下:

$ b=0
$ let b+=1
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

这(来自Sirex):

$ c=0
$ let ++c
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

bash ksh arithmetic

17
推荐指数
1
解决办法
3386
查看次数

跳过文件的前 3 个字节

我正在使用 AIX 6.1 ksh shell。

我想用一个班轮做这样的事情:

cat A_FILE | skip-first-3-bytes-of-the-file
Run Code Online (Sandbox Code Playgroud)

我想跳过第一行的前 3 个字节;有没有办法做到这一点?

shell ksh aix text-processing

17
推荐指数
2
解决办法
2万
查看次数

如何在算术表达式中安全地使用关联数组?

一些类似 Bourne 的 shell 支持关联数组:(ksh93自 1993 年以来)、zsh(自 1998 年以来)、bash(自 2009 年以来),尽管 3 之间的行为存在一些差异。

一个常见的用途是计算某些字符串的出现次数。

但是,我发现以下内容:

typeset -A count
 (( count[$var]++ ))

对某些值不起作用$var,我听说如果 的内容处于或可能处于攻击者的控制之下,它甚至会构成任意命令执行漏洞$var

这是为什么?有问题的价值观是什么?我该如何解决它?

security bash ksh zsh associative-array

17
推荐指数
1
解决办法
610
查看次数

删除超过 6 个月的文件的脚本

设置每月通过脚本运行的 cron 作业。

该脚本是每个月轮换一个文件,因为它变得太大并重命名旧文件。当文件超过六个月时,我希望将其删除。

希望每月运行一次此脚本。旧的可以删除吗?

如果这还不够清楚,请告诉我。

scripting ksh

16
推荐指数
1
解决办法
4万
查看次数

检查变量是像 shell 一样的 Bourne 数组吗?

在支持数组变量的类似 Bourne 的 shell 中,我们可以使用一些解析来检查变量是否为数组。

下面的所有命令都是在运行后运行的a=(1 2 3)

zsh

$ declare -p a
typeset -a a
a=( 1 2 3 )
Run Code Online (Sandbox Code Playgroud)

bash

$ declare -p a
declare -a a='([0]="1" [1]="2" [2]="3")'
Run Code Online (Sandbox Code Playgroud)

ksh93

$ typeset -p a
typeset -a a=(1 2 3)
Run Code Online (Sandbox Code Playgroud)

pdksh 及其衍生物:

$ typeset -p a
set -A a
typeset a[0]=1
typeset a[1]=2
typeset a[2]=3
Run Code Online (Sandbox Code Playgroud)

yash

$ typeset -p a
a=('1' '2' '3')
typeset a
Run Code Online (Sandbox Code Playgroud)

一个例子bash

if declare -p var 2>/dev/null …
Run Code Online (Sandbox Code Playgroud)

shell bash ksh zsh yash

16
推荐指数
3
解决办法
4590
查看次数