at
내 스크립트에서 이것을 사용하여 인쇄하려고 합니다.
경고: 명령은 /bin/sh를 사용하여 실행됩니다.
원하는 경우 다른 쉘을 어떻게 사용합니까?
답변1
Linux에서는 즐겨 사용하는 셸이 아닌 at
지정한 명령을 실행할 것이라는 경고가 항상 표시됩니다 . /bin/sh
이 메시지는 숨길 수 없으며 소스 코드에 하드코딩되어 있습니다.
전달한 명령이 해석됩니다 /bin/sh
. 원하는 경우 이 명령은 스크립트에 대한 경로가 될 수 있습니다. /bin/sh
그러면 스크립트 프로그램이 실행되어 스크립트의 해석기가 스크립트를 시작하고 해석하게 됩니다. 스크립트의 언어는 이를 실행하는 프로그램과 완전히 독립적입니다. 따라서 예를 들어 bash 스크립트(예: 로 시작하는 스크립트)를 실행하려면 #!/bin/bash
스크립트 경로를 at
( echo /path/to/script | at 3:42
)에 전달하고 관련 없는 메시지를 무시하세요.
답변2
스크립트를 변경하여 다른 쉘에서 실행할 수 있습니다셰르본. 몇 가지 일반적인 shebang 라인:
#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell #!/bin/csh -f — Execute the file using csh, the C shell, #!/usr/bin/perl -T — Execute using Perl with the option for taint checks #!/usr/bin/php — Execute the file using the PHP command line interpreter #!/usr/bin/python -O — Execute using Python with optimizations to code #!/usr/bin/ruby — Execute using Ruby
주어진 시간에 스크립트를 실행하려면 다음을 추가하는 것이 좋습니다.예약 된 일들
예:
다음 줄은 자정, 오전 2시, 오전 4시, 오전 6시, 오전 8시 등 2시간마다 사용자 프로그램 test.pl(표면적으로는 Perl 스크립트)을 실행합니다.
0 */2 * * * /home/사용자 이름/test.pl
답변3
한 가지 옵션은 명령 자체를 bash에 전송되는 스크립트로 만드는 것입니다(다른 쉘의 예).
주문하다:
<<'EOD' at now
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
EOD
산출:
warning: commands will be executed using /bin/sh
job 148 at Sat Feb 13 00:24:00 2021
1에서)그런 다음 /bin/sh
내부 명령을 사용하여 실행됩니다.
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
실행중인에코bash-shell 특정 $BASH
변수 및 위치 인수 와 일치시험( /bin/bash
다른 껍질의 예).
그게 다야.
하드 코딩된 오류 메시지를 표시하지 않으려면 복잡한 명령에 다음 접두사를 추가하세요.
2> >(sed '/warning: commands will be executed using \/bin\/sh/d' )
실행에 대한 경고만 제거 /bin/sh
하고 다른 경고는 제거하지 않기 때문입니다.
주문하다:
2> >(sed '/warning: commands will be executed using \/bin\/sh/d' ) \
<<'EOD' at now
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
EOD
산출:
job 150 at Sat Feb 13 00:26:00 2021
답변4
이것존재하다명령은 다음을 사용합니다/bin/sh추가해도#!/bin/bash스크립트에. bash를 사용하려면 다음을 수행해야 합니다.
echo script.sh | at now+x minutes
이 경우 다음을 포함하면 bash가 사용됩니다.#!/bin/bash스크립트 상단에 있습니다.
또한 참고하시기 바랍니다/bin/sh심볼릭 링크가 다음과 같은 경우/bin/bash예를 들어, 이런 식으로 호출하면 bash와 정확히 동일하게 동작하지 않습니다. 따라서 스크립트가 bash 특정 기능을 사용하는 경우 다음과 같이 실행하면 오류가 발생합니다.
at -f script.sh now+x minutes
이러한 오류는 (로컬) 이메일을 확인할 때만 나타납니다. 대개/var/메일/사용자 이름센드메일 같은 게 있었다면. 이메일을 보낼 수 없는 경우존재하다출력과 오류는 삭제됩니다.
놓치기 쉽습니다. 스크립트를 수동으로 테스트하면 런타임을 사용하면 제대로 작동합니다.존재하다오류가 있을 수 있습니다. 왜냐하면 후자의 경우에는/bin/sh.