at コマンドの設定に使用したコードはここにあります。
at -f noti.sh -t ${sleepTimes[$i]}
成功した使用を使用してリストされた場所を表示できるので、タイミングはうまく機能しますatq
。
noti.shファイルには、atコマンドが使用されているのと同じディレクトリにあり、次のものが含まれています。
if [[ "$OSTYPE" == "linux-gnu" ]]; then
notify-send "Insomnia" "Time to take a rest" -u critical -t 7000 -i sleep.ico
elif [[ "$OSTYPE" == "darwin"* ]]; then
terminal-notifier -title "Insomnia" -message "Time to take a rest" -sound "default" -group rest -timeout 7 -appIcon sleep.png
fi
私がテストした2つのプラットフォームには、Terminal Notifierと通知配信の両方がインストールされています。関数が正しく実行されないのはなぜですか(通知バブルを表示)?
答え1
あなたの質問は次のようになります(ソースman at
:)。
説明する
at
batch
標準入力または指定されたファイルから後で実行するコマンドを読みます。 使用/bin/sh
。
また、実行するとat -f noti.sh -t 2...
次の警告が出力されます。
warning: commands will be executed using /bin/sh
job 4 at Mon May 8 13:51:00 2017
/bin/sh
Debian ではシンボリックリンクです/bin/dash
。私の考えbash
では、あなたはスクリプトをテストしたと思います。POSIX 未定義機能つまり、では動作しないか、dash
通常は動作しません/bin/sh
。
あなたの特定の場合の問題は、および[[ ]]
がOSTYPE
サポートされていないことですdash
。走りましょう
$ sh noti.sh
次のエラーが返されます。
noti.sh: 2: noti.sh: [[: not found
noti.sh: 4: noti.sh: [[: not found
ただし、スクリプトを実行すると、bash
必要に応じて適している可能性があります。
期待どおりにスクリプトを実行するには、互換性を持たせるように書き直す必要があるかもしれません/bin/sh
(dash
あなたの場合)。shellcheck.netこれについての助けを探しています。