우리 회사에는 이라는 디렉토리에 파일을 업로드하기 위해 Linux에 사용자 정의 도구가 설치되어 있습니다 . oTools
새 터미널을 열면 (모든 폴더에서)oTools upload file
문서서버에 업로드되었습니다.
하지만 이 도구에는 여러 파일을 한 번에 업로드할 수 있는 옵션이 없습니다. 그래서 이를 위해 bash 스크립트를 작성하려고 합니다. 이것은 내가 만든 코드입니다.
#!/bin/sh
for file in ./folder/*
do
oTools upload $file
done
하지만 다음과 같은 오류가 있습니다.
./upload-all.sh: oTools: 찾을 수 없음
내 파일을 확인한 결과 .bashrc
oTools에 대한 경로가 포함되어 있습니다.
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"
...