标签: ksh

如何从管道分隔文件中打印字段?

我有一个文件,字段由管道字符分隔,我想只打印第二个字段.此尝试失败:

$ cat file | awk -F| '{print $2}'
awk: syntax error near line 1
awk: bailing out near line 1
bash: {print $2}: command not found
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

unix bash shell awk ksh

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

如何计算ksh shell脚本中的上一个工作日?

在shell ksh脚本中计算前一个工作日的最优雅方法是什么?

我到现在所拥有的是:

#!/bin/ksh

set -x

DAY_DIFF=1
case `date '+%a'` in
"Sun")
   DAY_DIFF=2
   ;;
"Mon")
   DAY_DIFF=3
   ;;
esac

PREV_DT=`perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time()-${DAY_DIFF}*24*60*60);printf "%4d%02d%02d",$year+1900,$mon+1,$mday;'`

echo $PREV_DT
Run Code Online (Sandbox Code Playgroud)

如何将$ {DAY_DIFF}变量作为值而不是字符串传输?

shell ksh date

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

如何处理shell脚本中的NFS延迟

我正在编写shell脚本,其中很多时候会将一些东西写入文件,然后执行一个读取该文件的应用程序.我发现,通过我们公司,网络延迟差别很大,因此一个简单sleep 2的例子就不够健壮.

我试着编写一个(可配置的)超时循环,如下所示:

waitLoop()
{
   local timeout=$1
   local test="$2"

   if ! $test
   then
      local counter=0
      while ! $test && [ $counter -lt $timeout ]
      do
         sleep 1
         ((counter++))
      done

      if ! $test
      then
         exit 1
      fi
   fi
}
Run Code Online (Sandbox Code Playgroud)

这适用于test="[ -e $somefilename ]".但是,测试存在是不够的,我有时需要测试某个字符串是否写入文件.我试过了 test="grep -sq \"^sometext$\" $somefilename",但这没用.有人可以告诉我为什么吗?

是否有其他更简洁的选项来执行此类测试?

bash ksh latency

6
推荐指数
1
解决办法
1715
查看次数

在ksh中比较字符串是否相等

我正在测试下面的shell脚本:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi
Run Code Online (Sandbox Code Playgroud)

它在if条件中给出了这个错误:

: ==: unknown test operator
Run Code Online (Sandbox Code Playgroud)

==不是使用正确的语法?我在命令行上运行如下

test_lsn_2 INSTANCE=ALL
Run Code Online (Sandbox Code Playgroud)

有人可以建议一个解决方案.谢谢.

unix bash shell ksh

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

从ksh中的数组中删除特定值

我有一个我在ksh中使用的自定义.profile,下面是我创建的一个函数,可以从具有过于复杂或长名称的目录中来回跳过.

如您所见,路径名存储在数组(BOOKMARKS[])中以跟踪它们并在以后引用它们.我希望能够使用case语句(或必要时的OPTARG)从数组中删除某些值,这样我只需键入bmk -d #即可删除相关索引处的路径.

我已经摆弄了array +A and -A,但它刚刚搞砸了我的阵列(注释掉的代码中剩下的东西可能不太漂亮......我没有校对它).

有关如何创建该功能的任何建议/提示?谢谢!

# To bookmark the current directory you are in for easy navigation back and forth from multiple non-aliased directories
# Use like 'bmk' (sets the current directory to a bookmark number) to go back to this directory, i.e. type 'bmk 3' (for the 3rd)
# To find out what directories are linked to which numbers, type 'bmk -l' (lowercase L)
# For every new directory …
Run Code Online (Sandbox Code Playgroud)

arrays ksh function

6
推荐指数
1
解决办法
8483
查看次数

创建一个写入多个文件的管道(tee)

我想在一个ksh脚本(使用exec)中创建一个管道,将管道连接到一个T形管,并将输出发送到管道.

当前:

#Redirect EVERYTHING
exec 3>&1 #Save STDOUT as 3
exec 4>&2 #Save STDERR as 4
exec 1>${Log} #Redirect STDOUT to a log
exec 2>&1 #Redirect STDERR to STDOUT
Run Code Online (Sandbox Code Playgroud)

什么了我喜欢做的(但我没有语法正确):

#Redirect EVERYTHING
exec 3>&1 #Save STDOUT as 3
exec 4>&2 #Save STDERR as 4
exec 1>tee -a ${Log} >&3  #Redirect STDOUT to a log
exec 2>&1 #Redirect STDERR to STDOUT
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建这个管道?

shell ksh pipe

6
推荐指数
2
解决办法
6109
查看次数

在KornShell脚本中获取函数名称

我想从函数中获取函数名称,以便进行日志记录.

KornShell(ksh)功能:

foo ()
{
    echo "get_function_name some useful output"
}
Run Code Online (Sandbox Code Playgroud)

有什么类似的$0,它返回脚本中的脚本名称,但它提供了一个函数的名称?

unix shell scripting ksh

6
推荐指数
3
解决办法
5184
查看次数

cygwin - 将文件复制到UNC共享

首先,我对CYGWIN一无所知所以请耐心等待......

我们的开发人员需要从我们的DBA中获取一些文本转储.他们通过CYGWIN环境与Windows上的Oracle合作,并且使用kornshell.

问题:我们如何使用kornshell/cygwin将旧式文本文件复制到标准Windows网络共享(UNC地址)?


注意:我们已经讨论过一种解决方法,DBA可以将文本文件放在本地临时文件夹中,然后设置Windows任务以将文本文件复制/移动到UNC地址.我们想避免这种冲击.

windows oracle cygwin ksh unc

6
推荐指数
1
解决办法
7647
查看次数

"test -a file"和"test file -ef file"之间的区别

QNX(Neutrino 6.5.0)使用ksh的开源实现作为其shell.许多提供的脚本(包括系统启动脚本)都使用诸如的结构

if ! test /dev/slog -ef /dev/slog; then
    # do something
fi
Run Code Online (Sandbox Code Playgroud)

检查文件系统中是否存在资源管理器.我搜索过,只能找到非常严厉的解释,-ef检查两个参数是否实际上是同一个文件.由于指定的文件名是相同的,它似乎只是减少到检查文件是否存在.

我检查过的行为test -atest -e(似乎根据我读过的各种文档检查任何类型文件的文件存在),它们似乎也有效.

-ef-a/ 之间执行的检查是否有任何区别-e?是否使用-ef某种尝试来防止文件存在时的竞争条件?

ksh qnx

6
推荐指数
1
解决办法
544
查看次数

混淆输出重定向为2>&1?

我已经在stackoverflow和其他关于2>&1的使用的来源中检查了几个相关帖子.

不幸的是到目前为止还没有彻底解决它.

我知道2是stderr,1是stdout,我们正在与2>&1结合.

但我的问题是:有什么区别:

1. mycommand > /dev/null       
2. mycommand 2> /dev/null      
3. mycommand > /dev/null 2>&1  
Run Code Online (Sandbox Code Playgroud)

我刚在想:

  1. 将stdout和stderr重定向到/ dev/null
  2. 将stderr重定向到/ dev/null
  3. 将stdout和stderr重定向到/ dev/null

相关帖子:

linux bash shell ksh

6
推荐指数
1
解决办法
1865
查看次数

标签 统计

ksh ×10

shell ×6

bash ×4

unix ×3

arrays ×1

awk ×1

cygwin ×1

date ×1

function ×1

latency ×1

linux ×1

oracle ×1

pipe ×1

qnx ×1

scripting ×1

unc ×1

windows ×1