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
.