这是我用来列出一些文件的命令:
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 -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
工作正常。
我没有在手册中找到{...;}替换 的语法的描述; do ...; done。
手册上有参考吗?对于哪些外壳可以正常工作?
写一个长管道时,将它分成两行通常会更清楚。
这个长命令行:
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)
我意识到这可能是一个风格(意见)问题,但是:有没有更喜欢的方式,如果有,为什么?
我正在尝试在 ksh 中复制所有不以字母“a”开头的文件。
从源机器复制到目标机器工作正常:
scp -p !(a*) user@machine:/path/directory/.
但是,如果我在目标服务器上并想从源服务器复制,则失败:
scp -p user@machine:/path/!(a*) .
有任何想法吗?
使用 Korn Shell 的 QNX4 操作系统。这是在 .profile 文件中。
export VARDIR=//1/usr/pvcs
Run Code Online (Sandbox Code Playgroud)
//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) 我正在使用 AIX 6.1 ksh shell。
我想用一个班轮做这样的事情:
cat A_FILE | skip-first-3-bytes-of-the-file
Run Code Online (Sandbox Code Playgroud)
我想跳过第一行的前 3 个字节;有没有办法做到这一点?
一些类似 Bourne 的 shell 支持关联数组:(ksh93自 1993 年以来)、zsh(自 1998 年以来)、bash(自 2009 年以来),尽管 3 之间的行为存在一些差异。
一个常见的用途是计算某些字符串的出现次数。
但是,我发现以下内容:
typeset -A count(( count[$var]++ ))
对某些值不起作用$var,我听说如果 的内容处于或可能处于攻击者的控制之下,它甚至会构成任意命令执行漏洞$var。
这是为什么?有问题的价值观是什么?我该如何解决它?
设置每月通过脚本运行的 cron 作业。
该脚本是每个月轮换一个文件,因为它变得太大并重命名旧文件。当文件超过六个月时,我希望将其删除。
希望每月运行一次此脚本。旧的可以删除吗?
如果这还不够清楚,请告诉我。
在支持数组变量的类似 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)