Ksh 脚本警告

Ksh 脚本警告

运行我的脚本时,我收到以下消息(严格来说这不是错误,因为执行之后继续进行):

myScript -s test -u test2
pk_copylogs[2]: hist: :: not found

但是,您知道为什么会出现此消息吗?

答案1

hist命令是 korn shell (ksh93) 内置命令,在 bash 中不可用。

您的脚本似乎在 bash 下运行,而不是 ksh 下。

ksh$ command -V hist
hist is a shell builtin   

bash$ command -V hist
bash: command: hist: not found

请尝试以下操作:

$ ksh myScript -s test -u test2

或者:

$ SHELL=ksh ksh myScript -s test -u test2

但是,hist该命令通常仅在交互模式下使用,我不希望在脚本中使用它。它很少被直接调用,更常见的是作为以下别名之一:

$ alias | grep hist
fc=hist
history='hist -l'
r='hist -s'        

查找fc, history,中的任何一个r

答案2

在您的myScript代码中,调用了另一个名为 的外部脚本pk_copylogs。在 pk_copylogs 的第二行,假设您有一个名为 的命令hist可以从任何地方访问,即在变量中包含的目录之一中$PATH

导致此问题的最可能原因是,在我使用过的大多数 shell 中,我不必配置快捷方式,但在我之前的人却这样做了,为了方便起见,该命令hist被别名为 command 。history但是当您启动 shell 脚本时,该别名就会消失。当然,您的情况可能完全不同,但如果没有看到您引用的这两个脚本(即 myScript 和 pk_copylogs)的实际代码,很难做出任何断言

答案3

查看fc_copylogs脚本的第二行,这是触发错误消息的行。

这是重现与您收到的消息完全相同的消息的一种方法:

$ cd /tmp
$ cat > pk_copylogs <<%
#!/bin/ksh
fc $1
%
$ chmod +x /tmp/pk_copylogs
$ PATH=$PATH:/tmp pk_copylogs ::
pk_copylogs[2]: hist: :: not found

当然,这可能与您的情况不完全相同,但肯定非常接近。

pk_copylogs 的第二行可能只包含这一行

hist ::

这会产生完全相同的错误消息,或者任何会扩展到它的错误消息。

如果您不知道在哪里查找,可以运行以下命令来定位有问题的脚本:

find / -name pk_copylogs -print 

然后看看它的第一行

head /path/to/pk_copylogs

相关内容