スクリプト内のエイリアスがコマンドを見つけられないことを返します。

スクリプト内のエイリアスがコマンドを見つけられないことを返します。

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関数内に1つを定義しました。このエイリアスを使用してログファイルに書き込みます。許可されていないユーザーとしてこのコマンドを実行しているので、これを実行するために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

関連情報