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
これはシェルが対話型の場合にのみ得られます。この場合、at
BASH_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"
制限事項:インラインはシェルの置き換えのため、構文が失われる可能性があります。まったく同じように機能しませんat
。exec cat
構文を検証する代わりに使用してくださいexec bash
。