Perlでunix writeコマンドを実行する方法

このQ&Aのポイント
  • 上手くいかないwriteコマンドをPerlから実行する方法を知りたい
  • writeコマンドのプログラミングに関して詳しい人に助けを求めています
  • ディスク使用状況をチェックし、ユーザーに通知する方法についてアドバイスをいただきたい
回答を見る
  • ベストアンサー

unix writeコマンドをPerlから

unixで、ログインしている誰かにメッセージを送信するwriteコマンドをPerlから実行したいのですが、上手くいきません。 `write john\nThis is test msg`; では、sh[2] This ....とエラーとなります。 writeコマンドは、 write ユーザーid <CR> メッセージ<CR> ctl-D とするようですが、そのあたりが上手くプログラミングできない のが原因のようですが、良く判りません。 判るかた、宜しくお願い致します。 定期的のDISK使用状況をチェックし、FULLになりそうなら、 ログインしているユーザーに通知したいのです。

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

「write ユーザーid 」はコマンドですが、続くメッセージ本文は write が読むデータであってコマンドはありません。 もしもコンソールでは無くて stdin からの入力なら、以下でできるかも知れません。 open(my $write, "|write john") or die("open() failed. $!"); print $write "This is test msg\n"; close $write;

guci-ok
質問者

お礼

有り難う御座いました。 すんなり出来ました。

関連するQ&A

  • perl から unix コマンドを入力する方法

    perl から unix コマンドを入力するには、どのようにしたらよいのでしょうか。 具体的には、フォームから受け取った文字列を、useradd に渡して、ユーザーの追加をしたいのです。 perlスクリプトの所有者はrootで、属性はsetuid(4755)にしています。

    • ベストアンサー
    • Perl
  • perlからsystemコマンド呼ばれる時のシェルについて

    HP-UX/perl4 で作成したスクリプトを、Linux(Red Hat)/perl5 へ移植するに当たって、system関数の動作が異なり困っています。 HP-UX では ksh をシェルとして使用していたため、perl からのsysytem関数で実行するsystemコマンドも、kshで動作するものを使っていました。Linuxでもログインシェルをkshに設定しました。 ところが、HP-UXで使っていたprintコマンドが使用できず、以下のエラーメッセージが出ます。 sh: print: command not found シェルはkshを指定していても、perlからsystem関数やバッククウォート`` でシステムコマンドを実行するときは、shが使われるようなのです。 perl内の記述は以下のとおりです。 system("print 'a'"); "print"の前に"ksh "をつけたり、"print"を"echo"に変えると、正しく動作します。 移植するperlの本数が多いのと、print以外にもこの問題が起きるかもしれませんので、できれば perl 内からのシステムコマンド実行時にもログインシェルとおなじ ksh で動くようにしたいのですが、どのようにすればよいのでしょうか? よろしくお願いいたします。

  • perlで変数をunix時間から時刻表示に変換したいがうまくできない

    変数に入ったUNIX時間を下記のようなperlコマンドで普通の時刻表示に変換したいのですが、 変数がうまく展開できません。 (↓のままだと、1970年1月1日になります) 'や"や\を組み合わせたらどうにかなるかと思うのですが、どうすればいいでしょうか? #! /bin/sh UX_TIME=113423423 perl -e 'print localtime($UX_TIME) . "\n"' exit 0 以上、よろしくお願いします。

  • Unix系のレンタルサーバの開発環境について

    Unix系のレンタルサーバでの開発環境についてお伺いします。Unix系ははじめてなので、OSのコマンドも勉強したいし、当面はPerlで、追加モジュールなども使ってプログラミングしてみたいです。どのような条件でサーバを探せばよいでしょうか? オススメのサーバなど教えていただけると助かります。どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • UNIXのユーザに規制をかけたい

    OSはUNIXを使ってtelnetを使い、一般ユーザでサーバにログインして、あるプログラムを起動しているのですが、これを複数の人に使ってもらおうと思ったときに、プログラムを起動する前に、万が一rmやcpなどのコマンドをされると削除やコピーなどセキュリティ上よろしくないので、このようなコマンドを管理者権限でユーザに規制をかけたいのですが可能でしょうか? また、特定ユーザのログイン時にそのプログラムを強制的に起動させることは出来るのでしょうか? できるなら、前者のほうが良いのですが、よろしくお願いします。

  • unixのコマンドでSQLのようにJOINする

    unixのコマンドでSQLのJOIN(直積)と同じことをする方法はありますか? やりたいのは同じ結合キーが複数行ある場合です。 入力ファイル1(結合キーは1列目) 1,AAA 2,BBB 2,CCC 3,DDD 入力ファイル2(結合キーは1列目) 1,PPP 2,QQQ 2,RRR 出力結果 1,AAA,PPP 2,BBB,QQQ 2,BBB,RRR 2,CCC,QQQ 2,CCC,RRR 結合キー「2」は入力ファイル1にも入力ファイル2にも2行づつ存在するので SQLのJOINと同じように組み合わせのパターン全部を出力し、 結合キー「3」は入力ファイル2には存在しないので出力したくありません。 もし簡単なコマンドがなければawkやperlを使うしかないでしょうか・・・。 環境はHitachi系のunixだったと思います(うろ覚え) ちなみにこういう質問はこのカテゴリ(Linux系OS)で合ってますでしょうか。プログラミングと迷ったのですが・・・。

  • UNIXで、あるサーバhogeにログインしているログインIDとユーザの名前だけを表示させたい

    UNIXで、あるサーバhogeにログインしているログインIDとユーザの名前だけを表示させたいのですが、コマンドをどのように入力すればよいでしょうか。

  • Windowsでsuコマンド

    ユーザのパスワードを知ることなくユーザの環境をセットアップ できないかなと考えています。 Unixでは 管理者はsuコマンドを使いユーザのパスワードを知らなくても ログインしてユーザの環境を利用することができます。 似たような機能として runasコマンドや 別のユーザとして実行 という 機能があるのですがパスワードが必要だし、ユーザの環境をセットアップ したい時には意味がありません。 どなたか知っていたら教えてください。 よろしくお願いします。

  • Active Perlでperlccコマンドは使えますか

    次に示すバージョンのActive Perlを利用しています。 This is perl, v5.6.0 built for MSWin32-x86-multi-thread perlccコマンドを使って,*.exeファイルを生成したいのですが。 次に示すようなエラーメッセージが表示されます。 Compiling C(test) for test.pl! D:\Perl\bin\Perl.exe -ID:/Perl/lib -ID:/Perl/site/lib -I. C:\windows\TEMP/test.pl.tst Couldn't open C:windowsTEMP/test.pl.valcl -O1 -MD -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DPERL_MSVCRT_READFIX -ID:\Perl\lib/CORE -o test test.pl.c /link -nologo -nodefaultlib -release -libpath:"D:\Perl\lib\CORE" -machine:x86 -libpath:D:\Perl\lib/CORE D:\Perl\lib\CORE\perl56.lib oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib コマンドまたはファイル名が違います. 原因がわからず戸惑っています。 お忙しいと思いますが,もし良い情報がある方がいましたら,よろしくお願い致します。

  • UNIXコマンド "grep" "find" の使い方教えて下さい。

    1)以下(1)、(2)を検索したいとします。  (1)"wrk_str"という文字列の記述があるファイル名  (2)tmp_file.c という名前のファイル名 2)ディレクトリ構成が以下になってるとします。  /home/users/複数のディレクトリが存在/複数のディレクトリが存在/複数のファイルが存在 3)/home/users/ 配下に検索したい文字列、ファイルがあるとした場合、どのように   探せばいいでしょうか?   /home/users/配下で得に条件なしでgrepすると、"Arg list too long"(量が多い?)の   メッセージが出て、検索できませんでした。 UNIXコマンドに詳しい方、宜しくお願いします。 それ以外にも、色々検索方法知っていたら教えて下さい!!

専門家に質問してみよう