|
お世話になっております。 シェルスクリプトが上手く動作せず困っています。 行っている方法は、 Linux7.1J sendmail-8.11.2-14 procmail-3.21-0.71で ユーザ"XYZ"のホームディレクトリに.procmailrcファイルを置き、 XYZ宛てのメール受信時に条件が合えばシェルスクリプト"ABC"を 実行するようにしています。 メール受信時に条件が合い、シェルスクリプトを実行するところまでは 上手くできたのですが、実行するシェルスクリプトの中の一部分のみ 動作しません。 その部分とはユーザ"mono"に切り替え、さらにシェルスクリプトを実行する以下です。 su - mono -s /home/mono/mno.sh ---(1) ※ユーザ"mono"はパスワードなしです。 ((なお、mno.shの記述は scp /var/XYZ/123.txt abc.world.co.jp:/home/mono/123.txt ssh abc.world.co.jp sh /home/mono/mno2.sh です。 他のLinuxサーバabc.world.co.jpへsshでファイルをコピーし、 他のサーバのシェルスクリプトmno2.shを実行)) (1)の部分に対してエラーでは、 standard in must be a tty と表示されます。 他のサーバではこの記述通りで動作しました。 また、メール受信時にシェルスクリプト"ABC"を実行するユーザ"XYZ" で手動でシェルスクリプトを実行すると(1)の部分も動作します。 Webで調べたところ、同じような現象になっている例もありましたが 解決策がありません。 そしてエラーの意味がよくわかりません。 勝手な推測ですが、実行しているサーバではセキュリティが強いため パスワードなしとしている"mono"ユーザが原因ではないかと思います。 ですが、シェルスクリプトでパスワードも記述した形での"su"の実行は 可能かどうか分かりません。 申し訳ありませんが、何かよい策をお教えください。 |
|
タブ区切りテキストを split /\t/ で切って各フィールドを変数に読み込み、 join "\t" で戻そうとすると、 場合によってはデータが抜けていることがあるので困ります。 タブ区切りデータを a, b, c, d、タブを->であらわすと、 split /\t/, "a->b->c->d" => (a,b,c,d) split /\t/, "a->->c->d" => (a,c,d) split /\t/, "a->b->->d" => (a,b,d) split /\t/, "a->->->d" => (a,d) split /\t/, "a->b->->" => (a,d) ということで、 1 while $str =~ s/\t\t/\t♪\t/; @list = split /\t/, $str; for (@list) { s/♪//; # $_ は @list の要素を参照する。♪がデータにないと仮定 } とかやってるんですが、いかにもダサいですね。 もっと常道はあるんでしょうか? Excel で編集すると a->b->->\n が a->b\r\n となってしまうのも 困る。 |