'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"

제한 사항: 인라인은 쉘 대체 때문에 구문이 손실될 수 있습니다. 정확히 동일하게 작동하지 않습니다 at. exec cat구문을 검증하는 대신 사용하십시오 exec bash.

관련 정보