在 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