데비안 시스템에서는 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