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