Windows 배치 파일을 bash 쉘 스크립트로 변환하려고 합니다. 하지만 다음 명령을 변환하는 방법을 이해할 수 없습니다. 저는 와인을 사용하여 Linux에서 .exe 파일을 실행했습니다. Linux에서 .exe 파일을 실행하는 다른 방법이 있습니까?
쉘 스크립트에서 변환하려는 배치 코드는 다음과 같습니다.
echo Deleting any task..
call schtasks.exe /delete /TN "Task_name" /F
echo Creating new task..
call schtasks.exe /create /RU %computerName% \%UserName% /RP %Password% /TN
"Task_name" /XML "DATA/Task_name.xml"
답변1
OP가 원하는 것은 쉘 스크립트에서 Linux에 예약된 작업을 생성하는 것이라고 생각합니다.
정확한 작업이 무엇이고 그 이유는 게시된 내용에서 전혀 명확하지 않지만 일반적으로 이는 쉘 스크립트에서 "crontab"을 자동화하여 달성할 수 있습니다.
이 작업을 수행하려면 상대적으로 고급 쉘 스크립팅 기술이 필요하므로 쉘 스크립팅을 처음 접하는 사람들에게는 권장되지 않을 수 있습니다.
이를 수행하는 방법의 예는 다음과 같습니다.
#!/bin/bash
# Create empty temporary file with safe name
TEMPFILE=$(mktemp)
# Put current crontab for user into the temporary file
crontab -l > $TEMPFILE
# Append new command to end of the created file using a shell 'here document'
cat << EOF >> $TEMPFILE
0 0 * * * /bin/df > /tmp/df-date-$(date +%d%b%Y)
EOF
# Load the new extended file in as the crontab for the user
crontab $TEMPFILE
이것은 단지 예일 뿐이므로 직접 복사해서는 안 됩니다. 시연되는 각 개념을 연구하고 이해하는 데 사용하세요.
사용자에게 crontab 파일이 아직 없으면 문제가 발생할 수 있습니다. man 5 crontab
내 시스템의 매뉴얼 페이지 에 따르면 또 다른 문제는 일부 Linux 버전이 crontab -l
헤더 라인을 추가한다는 것입니다. 즉 crontab -l | crontab -
, 동일한 데이터를 내보내고 다시 가져오려고 하면 추가 헤더 라인이 계속 추가된다는 의미입니다.
경쟁 조건도 있습니다. 사용자의 crontab은 crontab -l
crontab을 다시 가져오기 위해 해당 줄과 줄 끝 사이의 다른 프로세스에 의해 편집될 수 있습니다. 하지만 저는 이 프로세스와 유사한 것이 실제 환경에서 성공적으로 사용되는 것을 보았습니다.
0 0 * * * /bin/df > /tmp/df-date-$(date +%d%b%Y)
이 줄의 의미에 대해서는 설명서를 참조하세요 . 내 예의 효과는 시스템 명령의 출력을 포함하는 파일을 매일 생성하는 것입니다.cron
crontab
/tmp
df