스크립트를 실행할 때 다음 메시지가 나타납니다. 엄밀히 말하면 이후에도 실행이 계속되므로 오류가 아닙니다.
myScript -s test -u test2
pk_copylogs[2]: hist: :: not found
그런데 이 메시지가 왜 나타나는지 아시나요?
답변1
이 hist
명령은 korn 쉘(ksh93) 내장 명령이며 bash에서는 사용할 수 없습니다.
귀하의 스크립트는 ksh가 아닌 bash에서 실행되는 것으로 보입니다.
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
.
이 문제의 가장 가능성 있는 원인은 내가 사용한 대부분의 셸에서 바로 가기를 구성할 필요가 없었지만 나보다 앞선 사람들이 바로 가기를 구성했고 hist
편의를 위해 명령이 명령으로 별칭이 지정되었기 때문입니다. history
그러나 쉘 스크립트를 시작하면 별칭이 사라집니다. 물론 상황은 완전히 다를 수 있지만 참조하는 두 스크립트(예: 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