脚本内的别名返回未找到命令

脚本内的别名返回未找到命令

在 Debian 系统中使用 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

相关内容