Cronで起動するシェルスクリプト(bash)がいくつかあります。スクリプトが実行されるたびに、「stdin:is notatty」というメールが届きます。誰かがこれを修正する方法を教えてもらえますか?すべてのスクリプトは正常に実行されますが、これらのメールによってメールフォルダが強制終了されます。
私はDebianWheezyを使用しています。 「/root/.bashrc」は空です。 cronエントリは次のようなものです。
/bin/bash --login /root/script.sh > /dev/null
このスクリプトでもエラーメッセージが表示されます。
#!/bin/bash
ls
.profileの内容:
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
mesg n
.bashrc
の何かが、シェルが端末で実行されていることを前提としています。これはまったく問題ありません。.bashrc
はインタラクティブシェルでのみ実行されることになっており、インタラクティブシェルは端末でのみ実行されることになっています。
問題は、.bashrc
から.profile
を体系的に含めていることです。それは間違っています。インタラクティブシェルには.bashrc
のみを含める必要があります。
.profile
をに変更します
# Bash doesn't load its interactive initialization file if it's invoked as
# a login Shell, so do it manually.
case $- in
*i*) if [ -n "$BASH" ]; then . ~/.bashrc;; fi
esac
mesg n
を.bashrc
に移動します。これは端末関連のコマンドであり、セッション関連のコマンドではありません。
.bashrc
に環境変数の定義がある場合は、それらを.profile
に移動します。 .profile
ファイルは、セッションの開始時に実行されるもの、通常は主に環境変数の定義用であり、セッション中に実行するアプリケーションによって使用されます。 .bashrc
ファイルは、インタラクティブに実行する場合のbashの構成ファイルであり、通常、端末のセットアップ、エイリアス定義、シェルオプションと完了設定、およびシェルのインタラクティブな使用に関連するその他のものが含まれています。
背景については、以下を参照してください。