'at'コマンドでbashエイリアスや機能を理解させるにはどうすればよいですか?

'at'コマンドでbashエイリアスや機能を理解させるにはどうすればよいですか?

bashrc私はその中に次のような関数を書きました。

function build_image ()
{
 ...
}

この関数はソースコードのコンパイルをトリガします。

今、真夜中にこのイメージのビルド/コンパイルプロセスをトリガーする必要があります。だからat命令を使用します。

だから私はこうして走る-

-bash-4.4 $at midnight
warning: commands will be executed using /bin/sh
at> build_image
at> <EOT>
job 4 at Thu Feb 11 00:00:00 2021

使用されたシェルatはshのようです。エイリアスと関数が正しく機能するようにatコマンドにシェルを使用するように指示するにはどうすればよいですか?bash

答え1

マニュアルページから:

atが呼び出されると、SHELL環境変数の値によって、at jobコマンドの実行に使用されるシェルが決まります。 atが呼び出されたときにSHELLが設定されていない場合は、ユーザーのログインシェルが使用されます。

ただし、.bashrcこれはシェルが対話型の場合にのみ得られます。この場合、atBASH_ENV変数を設定するか、別のメカニズム(たとえば、別のシェルスクリプトで関数を実装する)を使用する必要があります。よりファイルセクションの開始Bashのマニュアルにあります。

答え2

at/bin/sh代わりに使用するように設計されているため、/bin/bash使用可能なコード序文が前に追加されます。何かを接続して使用するには、次の簡単な機能を使用してください。at -c {jobnumber}bash

at_with_bash_alias_and_functions(){
  ( 
    echo "exec /bin/bash <<END"
    alias
    typeset -f
    cat
    echo END
  ) | sed 's/\$/\\$/g' | at "$@"
}

エイリアスと関数が存在するかどうかを表示します。

at_with_bash_alias_and_functions now <<< "alias;typeset -f"

制限事項:インラインはシェルの置き換えのため、構文が失われる可能性があります。まったく同じように機能しませんatexec cat構文を検証する代わりに使用してくださいexec bash

関連情報