Bash 스크립트에서는 명령을 사용할 수 없습니다.

Bash 스크립트에서는 명령을 사용할 수 없습니다.

우리 회사에는 이라는 디렉토리에 파일을 업로드하기 위해 Linux에 사용자 정의 도구가 설치되어 있습니다 . oTools새 터미널을 열면 (모든 폴더에서)oTools upload file문서서버에 업로드되었습니다.

하지만 이 도구에는 여러 파일을 한 번에 업로드할 수 있는 옵션이 없습니다. 그래서 이를 위해 bash 스크립트를 작성하려고 합니다. 이것은 내가 만든 코드입니다.

#!/bin/sh

for file in ./folder/*
do
  oTools upload $file
done

하지만 다음과 같은 오류가 있습니다.

./upload-all.sh: oTools: 찾을 수 없음

내 파일을 확인한 결과 .bashrcoTools에 대한 경로가 포함되어 있습니다.

alias oTools="/home/user/folder/oTools-cli"

또한 스크립트에 전체 경로(위의 경로, 즉 .bashrc파일의 경로)를 입력하려고 시도했지만 동일한 문제가 발생했습니다. ls내가 설치한 도구 대신에 동일한 코드를 실행해 보았 더니 제대로 작동했습니다.

그렇다면 내 사용자 정의 도구를 인식하는 bash 스크립트를 어떻게 만들 수 있습니까?

답변1

최소한 두 가지 문제에 직면합니다.

  • 쉘이 비대화형인 경우 expand_aliases쉘 옵션을 설정하는 데 사용되지 않는 한 별칭은 확장되지 않습니다 shopt.

  • .bashrc일반적으로 스크립트 구성(비대화형 셸이라고도 함) 대신 대화형 셸 구성이 저장됩니다.

몇 가지 해결책이 있습니다:

# Set expand_aliases option and add the alias (in your script)
shopt -s expand_aliases
alias oTools="/home/user/folder/oTools-cli"

# Create a function instead of an alias (in your script)
oTools() { /home/user/folder/oTools-cli "$@"; }

# Add /home/user/folder to your PATH (in your .profile)
PATH="/home/user/folder:$PATH"

답변2

스크립트를 작성할 때 일반적으로 별칭이 도입되지 않습니다.

스크립트에서 명시적으로 명령을 지정하는 것을 고려할 수 있습니다.

#!/bin/sh
oTools="/home/user/folder/oTools-cli"
for file in ./folder/*
do
    ${oTools} upload "${file}"
done

답변3

이것은 cron을 통해 스크립트를 실행할 때 발생하는 문제입니다. 여기에 적용되는지는 잘 모르겠지만 여기에서는 스크립트 시작 부분에 경로를 추가해 보세요. 그것은 마치 ...

    #!/bin/bash

    PATH="/your/path"
    ...

관련 정보