스크립트 내의 별칭이 명령을 찾을 수 없음을 반환합니다.

스크립트 내의 별칭이 명령을 찾을 수 없음을 반환합니다.

데비안 시스템에서는 bash를 사용하세요.

bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

alias함수 내부에 하나를 정의했습니다 . 이 별칭을 사용하여 로그 파일에 기록합니다. 권한이 없는 사용자로 이 명령을 실행하고 있으므로 이 작업을 수행하기 위해 tee를 사용하고 있습니다. 별칭을 찾을 수 없습니다.

나는 얻다:

./test.sh 
Preparing Environment...
/tmp/support/20200525_074655
./test.sh: line 19: WRITE_LOG: command not found
./test.sh: line 20: ifconfig: command not found
./test.sh: line 20: WRITE_LOG: command not found

테스트 파일

#!/bin/bash


function prepare_environment() {
    echo "Preparing Environment..."
    TICKET_ID=$(date '+%Y%m%d_%H%M%S')
    LOG_LOCATION=/tmp/support/"${TICKET_ID}"
    sudo mkdir -p "${LOG_LOCATION}" 
    echo "${LOG_LOCATION}"
    alias WRITE_LOG='sudo tee -a "${LOG_LOCATION}"/report.log  > /dev/null'
}

function write_log() {
    sudo tee -a "${LOG_LOCATION}"/report.log  > /dev/null
}


function collect_information() {
    echo "Current Report time: $(date '+%Y/%m/%d %H:%M.%S')" | WRITE_LOG
    ifconfig | WRITE_LOG
}   

prepare_environment
echo "Current Report time: $(date '+%Y/%m/%d %H:%M.%S')" | write_log
collect_information

대안:

  • sudo command > file.log더 깔끔한 접근 방식이기는 하지만 이 작업을 수행하는 대신 다양한 명령을 사용합니다 .
  • 저 할 수 있어요sudo command | write_log

비슷한질문

답변1

기본적으로 Bash는 대화형인 경우에만 스크립트의 별칭을 확장하지 않습니다..

별칭 확장을 활성화할 수 있지만 아무 소용이 없습니다. 이 기능을 사용하면 됩니다.


의 경우 ifconfig권한이 없는 사용자로 사용하여 정보를 얻을 수 있지만 시스템 구성을 수정할 수는 없습니다. 많은 배포판에서는 PATH권한이 없는 사용자에게 이것을 넣지 않습니다 . 스크립트 sbin에 디렉터리를 추가합니다 .PATH

PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH

관련 정보