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