お願いします。
教えてください。

Bシェルでキーボードからの入力を読み取るreadコマンド
と同じ働きをするCシェルのコマンドが知りたいのです。
よろしくお願いします。

A 回答 (2件)

もう少し詳しく書くと、B シェルでの


  read a
は、C シェルでは
  set a=$<
と書きます。

ただ、C シェルといっても、純正? C シェル(csh)と tcsh では、$< の機能が
少し異なりますので、お使いのシェルのオンラインマニュアルをよく参照された
方がいいでしょう。

この回答への補足

もう少し教えてください。
wcshでスクリプトを作りたいのですが、
ファイル01.ini 02.ini 03.ini .........とある場合、

echo 何番?
set a=$<
cp $a.ini test.ini

としたところtest.iniにコピーされず、test.in ができてしまいます。
文法的に間違っていますか?
それとも、wcshではこのようなことは出来ないのでしょうか?

お願いします。

補足日時:2001/09/07 09:45
    • good
    • 0
この回答へのお礼

ありがとうございます。
さっそく、試してみます。

お礼日時:2001/09/06 13:27

Cシェルでは $< と書きます。

    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。

お礼日時:2001/09/06 13:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qperlのreadコマンドで変数に読み込まずに捨てる方法は?

perlのreadコマンドを使って超でかいファイルを途中までの分(下例では1G分)を一気に読み進めて途中から処理を進めたいです。

処理は下記コーディングで問題なく出来ているのですが、4行目のreadに結構時間がかかります。大量サイズを扱うのでしょうがないのかもしれないですが、もしかしたら、変数$bufに読み込まむから時間がかかるという部分があるなら、変数に読まずに1G分のデータをそのまま捨ててて、より高速化をはかることは可能でしょうか?(UNIXの/dev/nullに出力するみたいなイメージで。)

+1|open (my $if, "< test.dat"); #超でかいファイルを開く
+2|binmode($if);
+3|my $buf;
+4|read $if,$buf,1000000000; #--- 1G分、一気に進める
+5|#--- 以降、読み進めたところから処理を進める。
・・・

Aベストアンサー

seek関数を使ってファイルポインタを進めればいいと思います。
あと、大きな数値にはアンダースコアを入れれば見やすくなります。

read $if,$buf,1000000000;
   ↓   ↓変更
seek $if, 1_000_000_000, 0;

Qperlスクリプト内でシェルコマンドを実行するには??

タイトル通りなのですが、perlスクリプト内でシェルコマンドを実行させる方法が分からなく、困っています。

実行したいシェルコマンドはUNIXのcrontab なのですが・・。

また、perlスクリプト内以外でシェルコマンドを実行する方法はあるのでしょうか??

どなたか分かる方いらっしゃいましたらご教授いただけると幸いです。よろしくお願いします。

Aベストアンサー

system() 関数とバッククォート(`...`の形式)と open() による方法、それと fork 後に子プロセスで exec する方法があります(但しこれはUNIX系OS以外では正常動作するかどうか分かりません)。

system() 関数を使う場合はコマンドラインから打ったのとほぼ同じです。バッククォートの場合はそのコマンドが標準出力に出力した内容を文字列として受け取れます(これはUNIX系OSでよく使われるシェルの動作とほぼ同じということです)。open() でやる場合はコマンドに対する標準入力を与えるか、またはコマンドからの標準入力を受け取れます。これは open(FP, '| command arg ...') または open(FP, 'command arg ... |') のように最初か最後に | を入れてオープンし、その後それに対して print するか <FP> のような方法で読むかします。fork(), exec() の場合はその後の入出力の接続は(pipe()と組み合わせて使うなどして) 自由に行なえます。

で、やることが crontab への設定ということならば open 使った方法が楽なんじゃないでしょうか。但し crontab -l をやった後に crontab で追加する場合はその間に他のプロセスが編集をしてしまうかも知れないので注意が必要です。(全部書き変えていいなら open(F, '| crontab'); でオープンして print F ...; でただ書いてしまえばいいと思いますが)

system() 関数とバッククォート(`...`の形式)と open() による方法、それと fork 後に子プロセスで exec する方法があります(但しこれはUNIX系OS以外では正常動作するかどうか分かりません)。

system() 関数を使う場合はコマンドラインから打ったのとほぼ同じです。バッククォートの場合はそのコマンドが標準出力に出力した内容を文字列として受け取れます(これはUNIX系OSでよく使われるシェルの動作とほぼ同じということです)。open() でやる場合はコマンドに対する標準入力を与えるか、またはコマンドからの...続きを読む

Q正規表現 \b123bと^123$は同じ?

perlの正規表現の部分を勉強しているのですがわからないところがあります。
/\b123\b/と/^123$/は同じ意味ですか?
同じだとしたら、/^~$/という書き方があるのに/\b~\b/はどういう場面で効果的なのでしょうか?

Aベストアンサー

違う意味です。

"/\b123\b/" はワードで区切られた "123" にマッチします。
"/^123$/" は "123" のみの行にマッチします。
つまり、以下のようになります。

123    /\b123\b/,/^123$/ のいずれにもマッチ
ABC 123 abc  /\b123\b/ のみにマッチ

QRead on closed filehandle

ファイルを読み込んで一部を置換するプログラムを書いています。
実行させると「Read on closed filehandle」が出てしまい、正常動作しません。
該当部分は、次のとおりです。

open (PAGE,"$path$filename");
local($/) = undef;
my $pagebody = <PAGE>;
close (PAGE);

##--以下置換
$pagebody =~ s/__str1__/hoge/g;
$pagebody =~ s/__str2__/fuga/g;
以下略

他のところでcloseしているということはないのですが、エラーの原因として
何が考えられるでしょうか。

Aベストアンサー

そもそもopenには成功しているんでしょうか。
絶対失敗しないという思い込みがあったりしません?

Qsysread と read はバイナリ読み込み

のようですが
どのように使い分けたらいいのでしょうか?

Aベストアンサー

binmode(FH);
print FH substr($x, 9, 7);

こんな感じになると思います。


おすすめ情報