我知道这个问题有点 - 过去开始的"宗教"战争,可能没有一个正确的答案.但是在使用ksh和csh过去3到3年之后,经历了从一个移植到另一个的痛苦或者将一个共同的逻辑应用于多个版本(读作遗留代码),如果我正在编写一个新脚本,我会选择ksh,但是出于强迫而不是选择.除了ksh/csh之外还有更好的选择吗?也可以在Unix(Solaris/HP/IBM/FreeBSD)和Linux上运行(如果我不是要求太多,或者如果所有Linux风格都有意义的话)
等待建议......
和平:) Devang Kamdar
我在Solaris服务器上运行GIT.
从Windows机器上我安装了cygwin来尝试克隆服务器上托管的存储库.
我做以下事情:
$ git clone username@server:project.git ksh: git-upload-pack: not found
所以我试试
$ ssh username@server echo \$PATH /usr/bin
似乎git不在/ usr/bin /中,而是在/ usr/local/bin /中.我尝试在服务器上的主目录中更改.bashrc中的PATH以添加/ usr/local/bin/...但它似乎不起作用.
我究竟做错了什么 ?
我编写了以下脚本,如果 grep 在文件中找不到相关字符串,它会启用 20 秒的超时。
该脚本运行良好,但脚本的输出是这样的:
./test: line 11: 30039: Killed
Run Code Online (Sandbox Code Playgroud)
如何从 kill 命令中禁用此消息?
如果进程不存在,如何告诉kill命令忽略?
THX
耶尔
#!/bin/ksh
( sleep 20 ; [[ ! -z ` ps -ef | grep "qsRw -m1" | awk '{print $2}' ` ]] && kill -9 2>/dev/null ` ps -ef | grep "qsRw -m1" | awk '{print $2}' ` ; sleep 1 ) &
RESULT=$!
print "the proccess:"$RESULT
grep -qsRw -m1 "monitohhhhhhhr" /var
if [[ $? -ne 0 ]]
then
print "kill "$RESULT
kill -9 …Run Code Online (Sandbox Code Playgroud) 我想删除文件中带有单个字符的多个空格.例
cat kill rat
dog kill cat
Run Code Online (Sandbox Code Playgroud)
我使用了以下正则表达式,它似乎在http://www.regexpal.com/中匹配但在sed中不起作用.
([^ ])*([ ])*
Run Code Online (Sandbox Code Playgroud)
我像这样使用了sed命令:
sed s/\(\[\^\ \]\)*\(\[\ \]\)*/\$1\|/g < inputfile
Run Code Online (Sandbox Code Playgroud)
我预计,
cat|kill|rat
dog|kill|cat
Run Code Online (Sandbox Code Playgroud)
但我无法让它发挥作用.任何帮助将非常感激.谢谢.
编辑:请注意猫/狗可以是任何字符而不是空格.
在ksh shell中,我想在运行命令后检查返回值,我写了两个样式:
if [ $? -ne 0 ] ; then
echo "failed!"
exit 1
else
exit 0
fi
[ $? -ne 0 ] && echo "failed!" && exit 1
Run Code Online (Sandbox Code Playgroud)
它们是等价的吗?如果没有,如果我想把它写成一行,我该怎么办?
嗨我正在尝试使用awk命令找到正则表达式后打印5行.我有以下内容:
line_start=$(awk '/regex/{print NR}' file)
let line_end=$line_start+4
awk 'NR==$line_start, NR==$line_end' file
Run Code Online (Sandbox Code Playgroud)
这不会打印任何东西.它没有挂起,只是继续下一行.
我研究了一些类似的问题,并看到人们使用-v选项.我应该在这里使用它,他们的情况是更大的awk脚本.
顺便说一下,我正在使用Kornshell
谢谢!
我想将命令的结果存储到我的shell脚本中的变量中.我似乎无法让它工作.我想要目录中最近日期的文件.
PRODUCT= 'ls -t /some/dir/file* | head -1 | xargs -n1 basename'
Run Code Online (Sandbox Code Playgroud)
它不会工作
我遇到了ksh脚本中的行,这些脚本声明了一个变量并在同一行上提供了另一个shell脚本.例如:
MYVARIABLE="abc" . ~core/script.sh
Run Code Online (Sandbox Code Playgroud)
这是否会产生与单独声明它们不同的行为?例如:
MYVARIABLE="abc"
. ~core/script.sh
Run Code Online (Sandbox Code Playgroud) 当我在终端上运行以下命令时,
awk /984/ $files | awk -F, '{OFS=",";print $1,$4,$17}'
Run Code Online (Sandbox Code Playgroud)
在哪里,
files=`ls`
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
2013/08/18 12:51:37,11,724
2013/08/18 12:48:02,227,84769
Run Code Online (Sandbox Code Playgroud)
我希望创建一个脚本,运行该命令并以这种方式将上述结果分配给一个数组:(将行作为单独的元素)
array[0] = 2013/08/18 12:51:37,11,724
array[1] = 2013/08/18 12:48:02,227,84769
Run Code Online (Sandbox Code Playgroud)
但,
两者都不,
result=($(awk /string/ $files | awk -F, '{OFS=",";print $1,$4,$17}'))
Run Code Online (Sandbox Code Playgroud)
也不,
result2=`awk /string/ $files | awk -F, '{OFS=",";print $1,$4,$17}'`
Run Code Online (Sandbox Code Playgroud)
达到了我的目的。
如何获得我指定的数组?
此 KornShell 代码引发以下错误:
测试文件
#! /usr/bin/ksh
if [ ${fooVariable} = "" ]; then
fooVariable="fooString"
fi
echo "${fooVariable}"
Run Code Online (Sandbox Code Playgroud)
错误:
@:/tmp #./test.ksh
./test.ksh[3]: test: 0403-004 Specify a parameter with this command.
Run Code Online (Sandbox Code Playgroud)
为什么会抛出此错误以及如何修复它?