シェルスクリプト相談室 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
05/04/04 03:43:03
シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。 


2:デフォルトの名無しさん
05/04/04 04:03:33
2

3:デフォルトの名無しさん
05/04/04 05:08:16
お楽しみいただいた当スレッドもただいまをもちまして終了いたします。
1112553783 シェルスクリプト相談室です。

4:デフォルトの名無しさん
05/04/04 06:04:38
連番エロCGをスクリプトで一発ダウンの俺様が4様GETですよと。

最近本気で自動巡回も作ろうかと思案中です。チェックするのもマンドクセ。

5:デフォルトの名無しさん
05/04/04 09:52:54
UNIX板逝けよ

6:デフォルトの名無しさん
05/04/04 10:29:05
>>5
シェルスクリプトはunixだけじゃないぞ


7:デフォルトの名無しさん
05/04/04 12:16:13
いまだにcshを使っていますが何か?

8:デフォルトの名無しさん
05/04/04 15:47:53
cshじゃなくて今のトレンドは何ですか?

9:デフォルトの名無しさん
05/04/04 15:49:05
bash

10:デフォルトの名無しさん
05/04/04 15:49:12
bash

11:デフォルトの名無しさん
05/04/04 15:52:03
          ,,..--―-、 
         /, -----、.ヽ,     / ̄ ̄ ̄ ̄ ̄ ̄ ̄
         |  i_,,,,_  __゙l |    |   bash!
         ,!、i'゙-‐-: '-、|/   /  ______
        /'') ..., '‐-‐、.j     ̄ ̄
        / ,‐!::...`'''''''`ノ
      _,,,l ;! ::|ヽ、二 イ
   , -‐'゙゛ i::..  | .ヽ/;ヽj!`‐-、_
   l     ノ::. .:|、 .ヽ,:ヽ|  <゛~ヽ、
 

    ⌒ ⌒ ⌒
   _⌒ ⌒ ⌒__
  /:::::Λ_Λ:::::::::::::::/
 /::::::(∩;´Д`)∩ :::::/
/:::::::(  >>1  /::::/  チャラッチャラッチャーン

12:デフォルトの名無しさん
05/04/04 19:11:51
ワロタ

13:デフォルトの名無しさん
05/04/05 00:48:46
dsh


14:デフォルトの名無しさん
05/04/05 02:00:34
>>7「ところで海原先生、UNIXにはシェルが欠かせませんが、いったいどんなシェルが一番流行なんでしょうか?」
>>8「それは私も知りたいですな!シェルを極め尽くした海原先生なら、その答えをお出しになれるんじゃないでしょうか!」
海原「さよう‥どれが一番二番と順位はつけられんが、五本の指に入るものをあげると‥」
「まずBourne Shell、それもXPG4のBourne Shellだな」
「csh、ksh、tcsh、ash、まあ、このあたりが間違いのない本道というところだが‥」
「gnuのbashは別格だし、debianのbash、dashも面白い。emacsをシェルで使うのも捨てがたいな」
>>9「なるほど、どれもこれも聞いただけでよだれが出そうですわい」
>>10「しかし同じシェルでもピンからキリまであるようで、海原先生は何でも飛び切り上等のシェルを使っておられるからなあ」
山杉「お若い方などはいかがです、どんなシェルがお好きですかな?」
山岡「今まで使ったshellの中ではzshが一番使いやすかった‥」
山杉「は?zsh?」
山岡「そうzsh」
海原「うわあっはっはっはっは!」
「だからシェルのわからぬUnixヲタだと言うんだッ、zshだと、馬鹿も休み休み言え!」
山岡「と言うからには、使ったことはあるんだろうな」
海原「誰がそんなシェルを使うか、無駄な機能だらけのシェルなど使ったら、10分で済む事が1時間かかるわ!」
>>11「まったく聞いただけでジンマシンが出ますよ」
>>12「最高のシェルを聞いているときにzshなんて、気分がだいなしよ」
>>13「Unixヲタは哀れなもんだ」
海原「いい恥さらしだな、自分の特殊な趣味をさらしおって!」


15:デフォルトの名無しさん
05/04/05 03:11:24 BE:91214093-
zsh

16:デフォルトの名無しさん
05/04/05 11:54:16
zsh って実は Windows 版もあるんだよな(Cygwin ではなく)。

17:デフォルトの名無しさん
05/04/05 15:54:28
シェルスクリプトならbsh、プロンプトならcshの方がいいなぁ。

18:デフォルトの名無しさん
05/04/05 17:03:48
>>14
確かに鯖の話だな

bash以外シェル使った記憶ねぇな

19:デフォルトの名無しさん
05/04/09 10:09:37
>>14
面白いぞ!
久々に和炉他


20:デフォルトの名無しさん
05/04/09 10:14:10
>>14
ということは幻のzshとか出てくるのか?

21:デフォルトの名無しさん
05/04/10 05:29:46
ls > /dev/null
の> /dev/nullってどういう効能があるのですか?

22:デフォルトの名無しさん
05/04/10 05:58:09 BE:67566454-
シェルが fork(2) して 標準出力を /dev/null に dup(2) して ls(1) を exec(2) してる

23:デフォルトの名無しさん
05/04/10 06:17:35
さっぱりわからないのですが

24:デフォルトの名無しさん
05/04/10 06:37:15
各コマンドを調べりゃいいだろ

25:デフォルトの名無しさん
05/04/10 09:55:50
システムコールをコマンドと言っちゃう奴って

26:デフォルトの名無しさん
05/04/11 00:22:14
田畑「国際シェル会議ですって!?」
花村「何なのよそれ!」
ブラック「文字通りシェルに関する色々な問題を国際的なレベルで検討しようとする会でして‥」
花村「シェルに関する問題って何よ?」
ブラック「ですから例えば、bashとzshとどちらがいいかとか‥」
花村「そんな問題を大勢集まって議論する訳?」
ブラック「今度東京で開かれる会議には全世界75か国から300人以上の委員が集まります」
田畑「あっきれた!なんてヲタが多いの!」
ブラック「そんなこと仰いますが、シェルてえものは一番簡単でしかもいろいろと奥が深いんでゲスよ」
富井「しかし驚いたなあ、そんな会議があるなんて!」
谷村「一度のぞいてみる価値はあるね」

記者A「あの‥さっきのシェルの件だけどね‥」
 「bash使ってるけど、僕はいつも.bashrcでsetenvを定義してるよ」
ブラック「ええっ本当ですか!ありがたい、日本にもsetenvファンがいてくれた」
記者B「setenvなんて邪道だよ。環境変数ってのはシェル変数から取り込むの
がいいんで、その場で定義するような構文はダサイよ」
記者A「そんなことはない。むしろシェル変数と環境変数の使い分けが曖昧な
のがBシェル系の悪いところだろう」
記者C「Cシェル使えばCに似た構文になるだろ」

花村「あら、Cシェル使ったら標準エラーのリダイレクトが大変じゃない」
記者C「標準出力も標準エラーも同じファイルにリダイレクトすればいいじゃないか」
田畑「わあ嫌だ、リダイレクトはファイルデスクリプタごとに定義、これが鉄則よ」
富井「田畑くんの言う通り、そしてexec 2> /dev/nullするのが一番いい」
田畑「わあ厨臭い!」
富井「厨ですみませんね!」


27:デフォルトの名無しさん
05/04/11 00:22:48
谷村「やはりkshの、EDITOR=viでいきたいね」
記者D「僕は、shのESC補完が好きで」
記者C「俺はcshが」
花村「きゃあ変態!」
田畑「シェルの楽しさを知らないのね」
記者C「BSD系のデフォルトだぞ。そんな決めつけ方はないだろう!」
ブラック「いやあけっこうけっこう!なかなか良ござんした」
  「皆さんもなかなかシェルにはうるさいじゃありませんか」
記者B「‥結構主張するよね、みんな」
記者A「やっぱり身近なアプリだからね」
ブラック「いかがでゲス、皆さんもISCに参加しませんか?」
山岡「じゃ、どうせなら我々の身の周りの人のシェルに対する意見も聞いて回ったら?」
栗田「面白そう!」


28:デフォルトの名無しさん
05/04/11 00:23:14
社主「なに、シェル?私はごく普通のシェルだよ」
栗田「ごく普通のといいますと?」
社主「bashにomaemonaパッチを当てたものだよ」
山岡「omaemonaパッチ?ごく普通とは思えませんが‥」
社主「どうしてだね?omaemonaパッチを当てていない2chネラなんて考えられんだろうが‥」
山岡「こりゃ、大原社主もISCに参加あるべきだな」
栗田「立派にその資格があるわ」

板山「よくぞこの私に聞きに来てくれたわい、私はシェルではずいぶん苦労した」
山岡「へえ板山社長が‥」栗田「人は見かけに寄らないわね」
板山「私はシェルのプロンプトがいつも同じってのが気に入らなくてね、
毎回変化するプロンプトを作ったんだ」
(dotfiles.comにあるモーヲタ製.zshrcを見せる)
板山「ね、こういろいろなプロンプトって楽しいだろう!」
栗田「まあ面白い!」山岡「これは板山社長もISCに入会だな」

陶人「これがわしの手製のシェルだ」
栗田「わあ可愛らしい!」山岡「staticリンクしてもフロッピー1枚に余裕で入る大きさだね」
陶人「ふっふ、領子がレスキュー用のシェルが欲しいと言ったので作ってやったんじゃよ」
領子「陶人くんの作ってくれたシェルで作業すると、復旧し易いのよねぇ」
山岡「‥あほらし‥よし、これをバンドルした1FDLinuxを売った金で、なにか
うまいものを買いに行こう」
栗田「唐山先生もISCに入会ね」


29:デフォルトの名無しさん
05/04/11 00:23:45
司会「ただ今から「国際シェル会議」日本大会を開きます」
会長「シェルはアプリの中でも一番基本なものであります。しかし単純だからこそ奥が深く難しい」
「本大会はシェルに関する諸問題を議論し尽くしたいと思います」
「世界の平和はシェルから、を合い言葉に、さあ始めましょう!」
三谷「実は僕はzsh派でね」
花村「困っちゃった、私、bashし使ったことないのよお‥」
田畑「さあ大変、徹夜しなきゃ」
司会「まず、フランスのフリット氏に、シェルの設定の仕方についての中間発表をお願いしましょう」
フリット「シェルを設定する際の永遠の課題は、どのファイルで何の設定をするかということであります」
  「設定項目毎にファイルを分けるのもみっともないし‥」
  「といって、1ファイルに全部の設定をするのも下品です」
  「これはあるアメリカ人の例です、アルファベット名のファイルを作っ
てrcファイル中で順番に読み込むようにして‥」
  「コマンド名のアルファベット順に対応するファイルに書いていくやり方もあります」
会場(ブーブー)


会場「今の最後の設定方法は許せない!あんなやりかたでは、ログインシェル
もただの対話式シェルも関係なくなってしまう」
会場「私は環境変数は、.zshenvに、zsh固有の定義は.zshrcに、ログインシェル用
の設定は.zlogin、ttyの設定やBシェル系でも使える設定などは.zprofile
で設定します。こうするとメンテナンスや移行が容易になる」
会場「それは、私たちbashユーザーには不可能だ。シェルはzshだけではないことをお忘れなく」
会場「デフォルトの設定が十分なら、どのファイルで何を設定するとか心配しないですむんだ!」
会場「ちょっと待って、デフォルト設定がいいのか悪いのかは別の問題だ!」

会場「私はaliasでc="LANG=C LC_ALL=C"と設定しています」
「英語ロケールでアプリを起動するときは、c appで起動するだけなので最高です」
栗田「みんなすごいわ、ケンケンガクガクねっ」



30:デフォルトの名無しさん
05/04/11 00:24:13
司会「さて、シェルの設定の仕方についてはこれくらいにして‥」
「次はzshがいいかbashがいいか、議論したいと思います」
「それでは、日本におけるzshとbashの実状についてブラック委員から報告して頂きましょう」
ブラック「快楽亭ブラックでございます。さて私は日本に来て以来あちこちで
調べた結果、日本ではシェルといえばbashのことでありまして、zshは厨
以外にはほとんど普及しておりませんでゲス」
会場「bashだと、スクリプトでよく使われている/bin/shと互換性があるから、
シェルスクリプトの勉強がし易くて、その分使い勝手が良いわ」
会場「日本人がbashを好むのは、シェルの名前が、米大統領ブッシュに似ているからであります」
「いわば、敗戦コンプレックスに強く訴えるのであります」
会場「拡張性の高さがzshの良さだっ!」
会場「しかし問題があります。設定が難しい。manも項目毎に11種類もあるし‥」
花村「私もそうなんです!誰か、設定のコツを教えてくださいっ!」
「‥あら、私、思わず 興奮しちゃって‥」
会場「あれこれいっぺんに設定すると失敗するんですよ、1つ1つ試していくことです」
会場「最初の設定を最小にして、使いながら気にいった機能を設定していくといい」

山岡「拡張性の高さなら、こんなシェルがあるよ」
「pythonのインタラクティブ版、ipython‥」
花村「pythonをシェルとして使えるのか!」
山岡「一番の利点は、ログをそのままpythonプログラムにもできることだね」
ブラック「ただ今のシェルは、bashともzshとも違います」
  「これからbashとzshの他に、このシェルも論議の対象に加えることを提案します!」
会場「異議なし!」「賛成!」
司会「それでは、ターミナルは何をや使うべきかを論議する前に、皆さんそれ
ぞれ好きなシェルをコンパイルしてインストールしましょう」
会場「異議なーし!」「インストールしましょう!」
花村「楽しい会議ねえ」
田畑「全然結論を出さないところが、犯罪的だけど‥」
山岡「結論は各々が自分で出せばいいんじゃないの」



31:デフォルトの名無しさん
05/04/11 06:10:42
長すぎ

32:デフォルトの名無しさん
05/04/11 09:04:13
>>26-30
お前、文才ありすぎw
しかも、おもろい。

シェルを知ってるようだしな。
しっかし、会話の最初にもあったけどシェル変数と環境変数って
なんか、ぱっとせんなぁ。


33:デフォルトの名無しさん
05/04/11 16:07:43
…質問して良いのかな?

ファイルを読み込んで、各行の先頭文字を判定し、コメント文でなければ表示
をするというものを作っています。現在、以下のようにして判定しているので
すが、これでは、「空行があるとファイルはそこで終わり」だと判断されてし
まい、最後までいってくれません。全行を見るためには、どう書けば良いので
しょうか?bsh使いです。

while read KEY
do
#判定
done < test.dat

お願いします。

34:デフォルトの名無しさん
05/04/11 18:06:01
>>33
シェルスクリプト総合 その1
スレリンク(unix板)

35:デフォルトの名無しさん
05/04/11 21:12:58
shはなんであんなにキモイんですか?

36:デフォルトの名無しさん
05/04/11 21:40:16
>>33
判定がおかしいんじゃないの?
#判定 の部分を、echo $keyに変えてみ。
それ以前に、
grep -v "^#" < input.txt
でええやん。(行頭文字「#」がコメント開始の場合)



37:デフォルトの名無しさん
05/04/11 21:53:09
>>35
けっこー美しいと思うおいらは変態でつか?(゚◇゚;      

38:デフォルトの名無しさん
05/04/11 22:22:30
UNIX使ってるやつがキモイから

39:デフォルトの名無しさん
05/04/11 23:18:10
CreateGameー陸海空オンラインー
URLリンク(www112.sakura.ne.jp)
2chスレ
スレリンク(mmominor板)

ただ今、即戦力募集中!歴史に残るMMOを作ってみないか!!

40:デフォルトの名無しさん
05/04/11 23:37:30
>>26-30
海原と山岡のシェル対決キボンヌ

41:デフォルトの名無しさん
05/04/12 01:05:20
究極シェルと至高シェル対決キボン


42:33
05/04/12 08:24:26
>>36

>>34氏の誘導先で、自己解決できました。
自己解決というか、何もコードは変えていないのですが意図する結果を出すようになりました。
(それはそれで可笑しいのですが…)

> grep -v "^#" < input.txt
>でええやん。(行頭文字「#」がコメント開始の場合)
シェルスクリプト勉強中の身でして、「caseで一行ずつ判定させてみよう」と
思い立って、作ってみたものなのです。

ありがとうございました。


43:デフォルトの名無しさん
05/04/14 02:01:50
質問させて下さい。

シェルスクリプトからPHPを呼び出す際、
/usr/bin/php /home/id/public_html/test.php
↑の様に普通に呼び出すと問題ないのですが、

↓の様に、引数付きで呼び出すと正しく認識してくれません…
/usr/bin/php /home/id/public_html/test.php?mode=1

シェルスクリプトから引数付きでPHPを呼び出すにはどうしたらよいのでしょうか?

44:デフォルトの名無しさん
05/04/14 10:54:18
>正しく認識してくれません
そりゃそうだ。
そのままではシェルからはtest.php?mode=1というファイルを探しに行ってしまう。
私ゃphpは知らんが、コマンドライン引き数として渡せばいいのなら
/.../test.php mode=1
でいいかと。
そうでないなら標準入力? cgiに詳しい人の降臨待ちかな。

45:43
05/04/15 07:36:31
>>44
なるほど、そうですよね。
シェルスクリプトってDOSでいうバッチファイルみたいなもんなんですよね…
なんだかおバカな質問してしまってました。
どうもありがとうございました。

46:デフォルトの名無しさん
05/04/18 22:25:35
Cygwin上のbashでスクリプトを組んでいるのですが教えてください
あるデータ
1,2,3 abc
があってこれをカンマを区切り文字として
それぞれを変数に代入したいのですが、どうやればいいんでしょうか

DATA="123,456,789 abc"
set -- ${DATA}
for i in $@; do
echo $i
done
上の様にやると
123,456,789
abc
と空白で区切られてしまいます

setコマンドで読み込む時に区切り文字は指定できないんでしょうか
IFS変数をいじってみたけどダメでした
あるいは他の方法(コマンド)があるんでしょうか


47:デフォルトの名無しさん
05/04/18 22:47:48
awkでやれば?
それよりもUNIX板で聞いた方が確実。

48:デフォルトの名無しさん
05/04/18 22:53:12
>>46
$ IFS=, ; for i in "$*" ; do echo $i ; done
123 345 678 abc

$ IFS=, ; for i in $* ; do echo $i ; done
123
345
678
abc


49:デフォルトの名無しさん
05/04/18 22:55:05
>>26-30 ワロタ

50:デフォルトの名無しさん
05/04/18 23:06:22
「シェルの比較」はスレ違いだな

51:デフォルトの名無しさん
05/04/18 23:34:18
>>47
>>48
アドバイスありがとうございます
なんとかできました

52:デフォルトの名無しさん
05/05/22 13:10:43
tcshなんてヽ( ・∀・)ノ●ウンコー

53:デフォルトの名無しさん
05/05/22 13:17:36
kshなんてヽ( ・∀・)ノ●ウンコー

54:デフォルトの名無しさん
05/05/22 14:56:59
ashなんてヽ( ・∀・)ノ●マンコー

55:デフォルトの名無しさん
05/05/23 22:52:38
ヽ( ・∀・)ノ●ウンコーbashで質問です
引数に与えられたファイルの最終更新時刻から現在までの時間を求める
関数fooを作成したのですが
function foo(){
  local nowtime=$(date '+%s')
  loca lfiletime=$(date -d "$(ls --full-time $1 | cut -d' ' -f8,9)" '+%s')
  let difftime=$nowtime-$filetime
  let h=${difftime}/3600
  let m=${difftime}%3600/60
  let s=${difftime}%3600%60
  echo ${h}:${m}:${s}
}
使い方:
foo filename
処理速度が遅くていけてません
もっといい方法があったら教えてください

56:デフォルトの名無しさん
05/05/23 23:19:21
速度を求めるなら C で書くのがいいと思う


57:デフォルトの名無しさん
05/05/25 20:33:15
>>55
スクリプトに速度を求めるのは間違い。
difftime以外の変数を全廃してそれでも遅ければ別の方法を検討するべき

>>56
おおむね同意

58:55
05/05/26 00:13:13
>>56
>>57

まぁそりゃそうなんですけどね Cで書いた方が(この処理に関しては)楽だし
もっとエレガントにできちゃう方法があるのかなと聞いてみますた

アドバイスありがとうございました

59:デフォルトの名無しさん
05/05/27 20:24:26
つまり役立たずは消えろってことだよ
わかった?>>56-57

60:デフォルトの名無しさん
05/05/27 21:02:35
なんかほのぼの…

61:デフォルトの名無しさん
05/06/06 21:18:28
bashなんですが教えてください
シェルスクリプトソースに含まれる変数を抽出しようとして
ますが、いい方法が思いつきません

cat hoge.sh | grep '\$.+' | 'ここがわからんぽ' | sort | uniq

'ここがわからんぽ'を'
sed 's/\$.\+/'にすれば「変数」だけ取り除けるんですが
sedの置換条件を反転すればいいんでしょうけどやり方がわからん・・


62:デフォルトの名無しさん
05/06/06 22:22:49
とりあえず俺が思いついたの。でもこれでは一行につき一個しか取り出せない。

sed 's/.*\(\$\w\+\).*/\1/p'

63:デフォルトの名無しさん
05/06/06 23:06:57
sedではツールの仕様上、一行に一つだと思うけど。
awkとかperlとか。もっと本格的にlex(もしくはその親戚)とか

64:デフォルトの名無しさん
05/06/07 00:01:32
>>61-63
どれどれ、じいにやらしておくれでないかい?
以下のスクリプトをファイルに書き込んで、sed -n -f に渡してみ。-nは重要さの。

:restrt
s/^[^$]*\$/$/
texist
bend
:exist
h
s/\(\$[a-zA-Z0-9_{}]*\)/\1\
/
P
s/.*\
//
trestrt
:end

65:64
05/06/07 00:05:59
>>64
見直すと、6行目の「h」は全く要らんのお。取り去っておくれや。

じいの時代はの、
・ラベルは6文字まで。
・sedの扱う正規表現には\wとか+とかなかった。
・sedにグループ化の記号{}とかはなかった。
だったので読みにくくてすまんのお。

若い人が現在のモダンなsed向きに綺麗に書き直しておくれ。

66:62
05/06/07 00:06:41
むはは。ダメダメだわこれ。つか変数部分の終了を検知するのマンドクセ
>>63
sedでも不可能ではないと思う。けど相当にややこしい。

67:62
05/06/07 00:08:06
あ、いつのまにか偉い人が。

68:64
05/06/07 00:08:29
それから、じいの時代には改行に\nとか使えなかったのも
sコマンドの切れ目のわかりにくさに影響しとるのお。

年寄りの話は長くていかんってか?まあ先が短いんだから大目に見ておくれ。

69:デフォルトの名無しさん
05/06/07 00:46:39
:restrt
s/^#//
tend

冒頭にこう入れちゃうのはどうでしょ。
あとbashでは${}の中に%#:-=+*?!/がありだから、
凝ったスクリプトだと途中で切れちゃう変数が出ますね。

70:デフォルトの名無しさん
05/06/07 23:48:04
kshですが教えてください。
cat TEST* > test_all.dat
としたいのですが
TEST*にマッチするファイルが多すぎてエラーに
なってしまいます。
初心者の私では
ls > file.list
としてfile.listに該当ファイル名を出力し
そこから一件づつtest_all.datに追記する方法しか
考えられませんでした。
何かいい方法があれば教えてください。

71:デフォルトの名無しさん
05/06/08 00:05:49
>>70
man find

72:デフォルトの名無しさん
05/06/08 00:46:02
>>70
ls -1 | grep ^TEST | xargs cat > test_all.dat
lsがaliasされてる場合は注意。

73:デフォルトの名無しさん
05/06/08 19:02:57
>>71
findでなんとかなるのでしょうか?

>>72
ありがとうございます。
試してみます。

74:デフォルトの名無しさん
05/06/08 19:10:27
>>71
すみません。わかりました。
72とほぼ同じ方法ですね

75:デフォルトの名無しさん
05/06/08 22:28:02
少し知恵を貸してほしいのですが・・・

SQLで吐かしたテーブルのカラム名を
単純にカンマで区切って連結させたいのだけど
どうすればいいでしょうかね?



76:デフォルトの名無しさん
05/06/08 23:02:57
>>75
> SQLで吐かしたテーブルのカラム名

というのはどうでもよくて、

それがどういうフォーマットなのか
を書かないと訳がわかりません

77:デフォルトの名無しさん
05/06/09 00:12:57
>>72
> ls -1 | grep ^TEST | xargs cat > test_all.dat
> lsがaliasされてる場合は注意。
\ls みたいにエスケープすれば、エイリアス展開を抑制できるよ
スクリプトなら必須


78:デフォルトの名無しさん
05/06/09 01:36:07
し、知らなかった…

79:デフォルトの名無しさん
05/06/10 01:35:51
つか、スクリプト書くのにaliasされてしまう設定って・・・

80:デフォルトの名無しさん
05/07/11 23:17:23
サーバーにパスワードでログインして
サーバのシェルからpingをどこどこに何回打って
そのlogを保存する
とかのスクリプトの書き方を教えてください。
よろしくお願いいたします。


81:デフォルトの名無しさん
05/07/11 23:29:00
おれはその手の作業はteratermマクロでやってるから。
shより便利だから!

82:デフォルトの名無しさん
05/07/11 23:29:00
>>80
サーバーが送ってくる文字列(Login:とか)を待って、それに応じて
こっちから文字列を送り返す作業が必要。これにはexpectが便利。
いろんな言語用にいろんなバリエーションがあるけど、
シェルスクリプトでということだからexpect(1)だろうな。後はググれ。

pingの結果を保存する方法はexpect(1)がわかれば自然にわかっから。

それから、パスワードをスクリプト中に書いたり、ファイルに保存したりは
すんなよ(なるべく)。これもexpec(1)ならユーザに入力させるように書ける。

83:デフォルトの名無しさん
05/07/12 00:52:08
ping -t 5 > a.txt

84:デフォルトの名無しさん
05/07/12 21:51:39
>>81
>>82
>>83
レスありがとうございます。
今、telnet(5のサーバに連続で)で接続して、
pingとかを打ってそのログがどうだったら
この値を返すとか
考えてまして。。。
まったくシェルスクリプト書いた事ないので。。。
今、cygwinで少し理解できるようになりました
この文字を返す

85:デフォルトの名無しさん
05/07/12 22:25:25
teraterm便利だよね
UNIXもこれなかったら死滅してたよ

86:84
05/07/12 22:49:38
telnet でサーバに接続して
loginIDとパスワードを打ち込むシェルスクリプトはどの様に書けばよろしいのでしょうか?


87:84
05/07/12 23:43:50
( sleep 5 ; echo user; sleep 1 ; echo pass; sleep 1 ;

echo ipconfig ) | telnet host

であってますでしょうか?

88:デフォルトの名無しさん
05/07/13 02:12:17
上のsleepみたいな不確実なことしないといけないのでしょうか。
出力から何か文字列がきたら切り分けるって風に組みたいんですが。

89:デフォルトの名無しさん
05/07/13 03:09:15
expect使えばって書いてあるのに何で使わないの?

90:デフォルトの名無しさん
05/07/13 03:44:51
もはやシェルスクリプトじゃないじゃn

91:デフォルトの名無しさん
05/07/13 04:30:02
横レスだが、expect はバランスが悪くないか
追加でプログラムをインストールする程の機能でもないし
個人で使ってるマシンなら良いけど

92:デフォルトの名無しさん
05/07/27 07:40:54
複数ディレクトリ以下の文字コードを一度に全部変換したいのですが、
うまい方法あったら教えてください。
シェルスクリプト、もしくはperlで実現したいです。
よろしくお願いします。

93:デフォルトの名無しさん
05/07/27 10:37:25
>>92
変換対象はファイル名か? それともテキストファイルか?
いずれにしても、perlなんぞを持ち出すまでもないだろ。

94:デフォルトの名無しさん
05/07/27 15:08:00
>>92
find directories -type f -exec ...

... の部分はいろいろ。元ファイルを新文字コードの内容で置き換えてくれる
プログラム(やスクリプト)なら自明。だけど、別なファイルに書き込む場合でも
-exec mv {} {}.orig \; -exec コード変換 {}.orig {} \;
とか書けばいい。

95:92
05/07/27 18:41:15
すいません。説明不足でした。
ファイル名がわからない状態で変換したいです。
.exeファイルなどは無視して
.cpp .hppファイルとかだけを全部検索して
順番に文字コードを変換していきたいです。

96:デフォルトの名無しさん
05/07/27 19:15:59
>>95
だったら
find ... -name '*.cpp' -o -name '*.hpp' ...
とか。
portability気にしなくていいなら -o 使わずファイル名パターンに凝ってもよい。

後は適当にman findして。

97:92
05/07/27 22:04:12
>>96
基本はfind使っていくのがよさそうということですね。
今からman findがんばって読みます。
ありがとうございました。

98:デフォルトの名無しさん
05/08/05 16:35:18
age

99:デフォルトの名無しさん
05/08/05 20:00:08
なんでfindみたいなクソコマンドがいまだに残ってるのか不思議でしょうがない
そんなUNIX

100:デフォルトの名無しさん
05/08/05 22:41:37
釣れますか?

101:デフォルトの名無しさん
05/08/05 23:44:45
DOSのfindコマンドよりはまし。

102:デフォルトの名無しさん
05/08/07 12:49:43
tacコマンドに相当する機能を実現したいのですが、
どう実装するのが一番効率がいいんでしょうか

シェルはbashです

103:デフォルトの名無しさん
05/08/07 13:44:39
>>102
シェルスクリプトだけじゃなんともならないような。
awk使えばなんとでもなるけど。

104:デフォルトの名無しさん
05/08/07 14:37:16
findのオプション並べるの面倒だから
GUIで作ってくれないかな

105:デフォルトの名無しさん
05/08/07 14:40:31
>>104
シェルスクリプトでは無理。

106:デフォルトの名無しさん
05/08/07 15:03:29
>>102
一番効率が良いかどうかは知らない。
cat -n file | sort -nr | cut -f2-
100万行超えないなら sort -r にすれば速くなる。

107:デフォルトの名無しさん
05/08/07 17:09:13
それのどこがシェルスクリプトなんだか。

108:デフォルトの名無しさん
05/08/07 18:27:14
>>107
シェルの組込みコマンドだけで作るのがシェルスクリプトだと思ってる?

109:107
05/08/07 20:15:58
>>108
いやぁ、3段もプロセスかませてtacの劣化コピー作るメリットがないかと。
とても効率いいとは思えないしね。

110:デフォルトの名無しさん
05/08/07 20:20:47
>>109
誰もそんなこと聞いてないんだが

111:デフォルトの名無しさん
05/08/07 20:24:47
日本語が不自由なんだな

112:デフォルトの名無しさん
05/08/07 20:34:04
違うなぁ、なんか違うんだよ。
シェルスクリプトを名乗るんならなんかこう、ソウルが感じさせて欲しいわけよ。
ただ外部コマンドを並べました。そんな誰でも書けるような単純なものじゃなくてね。
だからってまぁ、シェル組み込みコマンドだけで作らなきゃいけないなんて言う訳じゃないよ。
外部コマンドだって重要なファクターさ。外部コマンドをパイプラインで繋いでいって、
それで素敵なハーモニーが産まれるなら文句は言わないよ。
でもなぁ。cat, sort, cut, なんて響いてこないんだよ。ハートにね。
折角シェルスクリプトでやるんだったら最初にも言ったけど、ソウルを感じさせてよ。

113:デフォルトの名無しさん
05/08/07 22:21:37
>>112
シェルスクリプトが一番流行って発展したのは1980年代だと
思うけど、その頃のソウルって結構>>106みたいな感じよ。

>>112がソウルを感じるスクリプトの具体例みたいなのってある?


114:113
05/08/07 22:29:17
あと、

>>112 そんな誰でも書けるような単純なもの

このへんが俺のソウルと波が合わないなあ。

JCLと対比してのシェルだとか、
Multicsを踏まえてのUnixとか、
精細粒度のプログラミングと対比してのシェルスクリプトとか、
そういう思想は、むしろ「単純なもの」を目指す哲学だったはずよ。
「誰でも書ける」とまで甘くみてたエンジニアはさすがにいなかったけど。

ま、こんなこと2chで書いても、親父ハケーンとか笑われちゃうんだろうな...

115:デフォルトの名無しさん
05/08/07 23:06:11
単なるツールボックスアプローチにソウルも何もあるかっw

116:デフォルトの名無しさん
05/08/08 00:23:49
>>108が図星で勢いで誤魔化しただけだろ

117:107≠112
05/08/08 02:55:47
>>116
1行野郎をシェルスクリプトと言いたくなかっただけなんですが。
そういう意味では、>113とは思いっきり反りが合わないらしい。
#>112はなんかのコピペみたいで受けたけど。

>>113
えーと、>112じゃないけどwhatisとか?


118:デフォルトの名無しさん
05/08/08 03:16:19
効率のいいスクリプト引っさげて再登場するのかと思ったら…

119:107≠112
05/08/08 05:01:01
だって>103なんだもの。お目汚しにawkの例。
--
{
line[NR] = $0;
}
END {
for (ic = NR; ic > 0; --ic) {
print line[ic];
}
}
--
行数多くて泣いても知らない。

120:デフォルトの名無しさん
05/08/08 07:38:13
ひっくり返すだけなら
reverse() {
local line
if read line; then
reverse
echo $line
fi
}
reverse

121:デフォルトの名無しさん
05/08/10 21:06:35
インラインにすりゃいいってもんじゃなだろ的なものをわざわざ淫乱で書く

それがシェル|スクリプト|クオリティ

122:デフォルトの名無しさん
05/08/11 09:50:15
曰く「○○があるだろ」
曰く「○○で十分」
曰く「車輪の再発明はするな」
大人は誰もわかっちゃくれない

123:デフォルトの名無しさん
05/08/13 03:03:47
これを仕事にしているから。
仕事だから「実現する事」がなによりも優先されるのだよ。

124:デフォルトの名無しさん
05/08/14 09:17:58
ソウルってチョンだろ

125:デフォルトの名無しさん
05/08/14 09:52:03
>>123 子供が遊んでる横でそれを言うのはナンセンス。

126:デフォルトの名無しさん
05/08/17 13:06:26
sshやtelnetでリモート端末にログインしたあと、さらにその端末でコマンドなどを実行するにはどのようにしたらよいのでしょうか?

127:デフォルトの名無しさん
05/08/17 13:23:07
>>126
ログインシェルに実行したいコマンドを書いておくとか、
ログイン時に実行したいコマンドも指示するとか。

128:デフォルトの名無しさん
05/08/17 13:33:06
man sshすると書いてある。

ssh [-l login_name] hostname | user@hostname [command]

% ssh nanasi@server "ping -c 5 www.example.com" > logfile

とやると手元のlogfileにpingの結果が残る。




129:デフォルトの名無しさん
05/08/17 13:52:42
>>128
灯台もと暮らしでした

130:デフォルトの名無しさん
05/08/17 14:19:11
>>129
>灯台もと暮らしでした
あんたは灯台守かい。

131:デフォルトの名無しさん
05/09/06 01:37:49
C言語のライブラリをシェルスクリプトで使う(呼び出す)方法知ってますか?

ライブラリの中にchar *moji( char *, int, char ) が有った場合の
呼び出し方がわかりません。
(昔作った事があったのですが、ど忘れ…)

詳しい方、教えて下さい。お願いします。

132:デフォルトの名無しさん
05/09/06 01:43:52
>>131
無理なので諦めましょう

133:デフォルトの名無しさん
05/09/06 01:48:08
>>132
無理じゃないんだよ。
昔、新人の時に教わって作った事があるけどシェルスクリプト久しぶりで…
ネットで検索しても引っかからないから、詳しい人に教えて貰いたいです。

134:デフォルトの名無しさん
05/09/06 02:51:38
新人の頃の先輩に聞けよ

135:デフォルトの名無しさん
05/09/06 05:59:40
「printfとかmkdirとか、ライブラリと同名のプロセスを呼んでいた」に一票。

136:デフォルトの名無しさん
05/09/06 10:48:06
ニ票

137:デフォルトの名無しさん
05/09/06 13:04:09
三票

138:デフォルトの名無しさん
05/09/06 13:23:49
もしかしてrundll32.exeのことかね。
C言語のライブラリではたぶん使えないが。

139:デフォルトの名無しさん
05/09/06 19:39:47
>>138
シェルスクリプトと言ってる時点でUN*Xでしょ?
スレ的にも。

140:デフォルトの名無しさん
05/09/06 21:31:34
誰もUN*Xなんて断ってないが。
もし132の言う物が別にあったとしても原理は同じ様なものだろ。

141:デフォルトの名無しさん
05/09/06 22:27:20
ウホっ良い強弁

142:デフォルトの名無しさん
05/09/07 10:23:50
>>140
> もし132の言う物が

132が何を言ったって?

> From: [132] デフォルトの名無しさん <sage>
> Date: 2005/09/06(火) 01:43:52
>
> >>131
> 無理なので諦めましょう


143:デフォルトの名無しさん
05/09/07 23:36:32
>>131の者です。
解決しました。違う掲示板で回答が有りました。
共通関数 . にするよに、やり方は簡単でした。(方法は.ではないよ)
どももお騒がせしました。

144:デフォルトの名無しさん
05/09/07 23:39:03
>>143
僕らの手の届かない所に逝ってしまったみたいですね.
さようなら...

145:デフォルトの名無しさん
05/09/19 01:54:44
うわぁ、イタい質問w

146:デフォルトの名無しさん
05/10/04 13:24:56
クストン
肝心なことが抜けていた

atコマンドでは

at -f <filename> "13:00"
という具合に指定はできても、

at -f <filename> <指定ファイル> "13:00"

みたいなことが出来ないみたいなんだ。
つまりayasii_shという実行ファイルには必ず参照するファイルを指定しないといけないわけ

"ayasii_sh ayasii_config"

みたいな。
でもそれを "ayasii_sh ayasii_config" "13:00"という風には入れられないんだ
at -f


147:デフォルトの名無しさん
05/10/04 14:17:30
>>146 肝心なことが抜けていた
???それが肝心なことだというの???

一体 >>146 は何についてのレスなのさ?
何かの誤爆?

148:デフォルトの名無しさん
05/10/04 22:25:28
シングルユーザーモードで立ち上げざるを得ないは、
ボーンシェルじゃないと動かないから、
少なくともシステム管理やる人間は、
ボーンシェル必須って教えられてきたけどね。

149:デフォルトの名無しさん
05/10/05 01:01:04
んなこたーない。

150:デフォルトの名無しさん
05/10/05 01:26:36
仕事でシェルスクリプト書くことになったんだが・・
オススメの参考書を教えてくれぇ。・゚・(ノД`)・゚・。

・・・ちなみにBシェルね(゚∀゚)

151:デフォルトの名無しさん
05/10/05 01:55:04
>>150
man bash
いや、マジで。

152:デフォルトの名無しさん
05/10/05 02:14:14
>>151
いや、確かにそうなんだが・・
なんというか、その。
手元にある安心感とか・・
ね?

考えるより印刷したほうが早いかな (;´Д`)

153:デフォルトの名無しさん
05/10/05 03:30:18
>>152
URLリンク(www.linux.or.jp)

これ印刷したら結構なページ数になると思うよ。

趣味で書くならともかく、仕事なんだから仕様をきちんと
理解しないといけないわけでしょ。
なら、まずは man を読む事から始めないとね。

154:デフォルトの名無しさん
05/10/05 05:05:19
bashのドキュメントだけどさ、GNU発祥なんだからmanより先に
infoなのでは。少なくとも「公式」の情報はinfoの方でしょ。
どちらも精読したわけじゃないから、違いは知らんとです。(弱っ)

155:デフォルトの名無しさん
05/10/05 08:07:06
Bシェルつってんだから、man sh だろ

156:デフォルトの名無しさん
05/10/05 13:27:31
>>150
「UNIXプログラミング環境」
URLリンク(www.amazon.co.jp)

B-shellの書き方だったらこれがお薦め。
ほかの部分は古くなってるが読んでおいたほうがいい。


157:デフォルトの名無しさん
05/10/05 13:40:11
>>156
それクリックしてマーケットプレースのを注文しちゃった

158:デフォルトの名無しさん
05/10/14 01:35:02
EXPECTでテキストファイルを一行ずつ読む方法を教えてください

159:デフォルトの名無しさん
05/10/14 09:45:17

なぜ?

160:デフォルトの名無しさん
05/10/15 20:35:11
下記のプログラムでX.X.X.Xの所(1.1.1.1,2.2.2.2,3.3.3.3と続く)を
ファイルから読み出して実行する方法を教えてください。
#!/usr/bin/expect
telnet X.X.X.X
expect -ex "login:"
send "UUUUU\r"
expect "Password:"
send "UUUUU\r"
expect "linux$"
send "ifconfig"
expect "linux$"
send "exit\r"
expect eof


161:デフォルトの名無しさん
05/10/15 20:49:18
>>160
expectって俺は使ったこと無いけど
あれはたしかtclの変種でしょ
普通にtclのコマンド使えばいいんじゃないの。
openとかgetsとか

162:デフォルトの名無しさん
05/10/15 21:17:44
>>160
> #!/usr/bin/expect

この時点でシェルスクリプトではないのだが。

163:デフォルトの名無しさん
05/10/15 21:36:41
>>162

書き直します

#!/usr/bin/sh
expect -c
telnet X.X.X.X
expect -ex "login:"
send "UUUUU\r"
expect "Password:"
send "UUUUU\r"
expect "linux$"
send "ifconfig"
expect "linux$"
send "exit\r"
expect eof

よろしいでしょうか?
アドバイスください。

164:デフォルトの名無しさん
05/10/15 21:47:47
で、openだのgetsだのは使ってみたの?
tclはほとんど使わないが、たぶん

set filename ファイルの名前
set fd [ open $filename r ]
while { [ gets $fd line] != -1 } {
  lineを処理
}
close $fd

とかそんな感じだと思われるが。

ま、動的に必要なパラメタがIPだけならargv渡しでもいいだろうし
シェルでラップするんならシェル変数とクォート使って
埋め込んでもいいよな。
好きにしる。

165:デフォルトの名無しさん
05/10/15 21:50:12
>>164
ありがとうございます^^
今から試してみます。
本当にありがとうございました。

166:デフォルトの名無しさん
05/11/01 23:36:11
お世話になります。
LynxOSでシリアル経由にて装置を制御する
シェルスクリプトを考えています。
STTYコマンドで調歩同期の設定しようと思いますが
なかなかうまくいきません。
どなたかご存知の方ご教諭くださいますようお願いします。

167:デフォルトの名無しさん
05/11/11 10:47:24
すみません。息詰ってしまいました。
質問させてください。
B-Shellで与えられたホスト名、ユーザー名、パスでFTPログインできるか
確認だけ行いたいのですがやり方がわかりません。
ログインエラーも判断させる感じで作りたいのです。
シェル初心者で恐縮なのですが
どなたかご存知の方いらっしゃいましたらご教授お願いします。

168:デフォルトの名無しさん
05/11/11 11:52:07

>>167
君がやり方を分からなかろうと知ったことでは無いし、"初心者"が免罪符になると思っているなら書き込むな

169:デフォルトの名無しさん
05/11/11 14:39:13
>>166
ここじゃなくて、使っているOSの端末ドライバについて
質問するようなスレに行ってください

--
それは端末ドライバのせいなんだよ


170:デフォルトの名無しさん
05/11/11 17:14:36
>>167
それは質問ではなく「作ってよこせ」というお願いですよ。

171:デフォルトの名無しさん
05/11/19 15:19:56
最近bashを勉強中ですが、ちょっと質問させてください

シェルスクリプトでコマンドを実行して
失敗したら強制終了させたいのですがどうしたらいいでしょうか?

COMMAND=mkdir test
if ! $COMMAND
then
echo "失敗"
exit 1
fi
echo "成功"
これじゃ、だめですよね?

172:デフォルトの名無しさん
05/11/19 16:12:54
ヒント:直前のコマンドの終了ステータスは変数 $? に格納される。

173:デフォルトの名無しさん
05/11/19 17:00:01
ありがとう>>172さん
親切な方がいて助かりました
ついでにもう1つ質問させてください
シェルスクリプトでヒアドキュメントを使ってファイルに書き込むにはどうしたらいいでしょうか?


174:デフォルトの名無しさん
05/11/19 17:08:01
>>173
command > file <<EOF
...
...
...
EOF


175:デフォルトの名無しさん
05/11/19 17:30:08
>>174ありがとうございますー!
素敵です・・・


176:デフォルトの名無しさん
05/11/20 10:21:45
いや、manページを読めば判ることで素敵って言われても。

177:デフォルトの名無しさん
05/11/20 12:24:42
>>176すいません
何のmanページ見たらいいのかわかりませんでした・・・

そこでまた質問させてください
useraddを実行したとき自動でパスワードを入力させるにはどうしたらいいでしょうか?


178:デフォルトの名無しさん
05/11/20 12:53:51
つ[man bash]

179:デフォルトの名無しさん
05/11/21 19:49:25
仏の顔もってやつだなw

180:177
05/11/21 23:41:48
ちょっと質問間違えました
シェルスクリプトでpasswd hogeを実行した場合
パスワードを求められますが、これを全部シェルスクリプトで行いたい。
これって無理でしょうか?

181:デフォルトの名無しさん
05/11/22 00:58:02
このスレで、passwordとかパスワードとか検索して、その前後100回読んで、
あと、UNIX板のシェルスクリプトスレでも同じことして、
それでもわからなければあきらめろ

182:177
05/11/22 01:48:17
>>181
ありがとう
がんばってみます

183:デフォルトの名無しさん
05/11/22 02:18:59
なんかUNIX板で似たような質問を見てきた気がするけど、気のせいかな?

184:デフォルトの名無しさん
05/11/22 04:40:34
>>183
がんばる=他のスレでも質問する だったみたいだな。w

185:デフォルトの名無しさん
05/11/26 11:08:04
shellスクリプトの開発環境ってありますか?
べた打ち、ベタ読みは不便で・・・

命令文や変数に色がつく程度でも良いのですが・・・

186:デフォルトの名無しさん
05/11/26 11:33:47
>>185
お使いのエディタに、キーワードを登録してください。
登録済みキーワードに色がつかないエディタをお使いなら、適宜乗り換えてください。

187:デフォルトの名無しさん
05/11/26 17:29:36
試しにxyzzy bash-mode でぐぐったら引っかかった。
いいかも、これ。

188:デフォルトの名無しさん
05/11/26 20:10:23
何で色が付かないと不便なんだろう
漏れは逆に色が付いてると禿しく見にくい

189:デフォルトの名無しさん
05/11/26 21:31:21
色使いが悪いだけじゃないのか

190:デフォルトの名無しさん
05/11/26 22:30:11
エディタ操作って「慣れ」とか「親しんだ環境」が最重要事項だから

191:デフォルトの名無しさん
05/11/26 23:20:32
>>186
えーとえーと、
viエディタでガリガリ書いて、コンパイルして
ってのに疲れたんです。
teratarm君はお目目に優しくないし・・・
エディタが擬似的に実行したりしてくれないかなあ・・・

>>187
情報ありがとうございます。

でもエディタそのものの使用で挫折しました。

192:デフォルトの名無しさん
05/11/26 23:23:07
>>191
コンパイル?


193:デフォルトの名無しさん
05/11/27 00:05:10
>>192
まちげーた・・・

sh ほにゃらら で、毎回実行して

ってのが正解です。
別にshって打つのは辛くないです。パス通す方が雌鳥なだけです。

まあその程度の人間だってことです。俺は。

194:デフォルトの名無しさん
05/11/27 00:14:21
パス通す?

195:デフォルトの名無しさん
05/11/27 00:44:41
実行権限与えるのがめんどくさい、じゃねーのか?
パスが通ってなかったら、sh 打ったって実行できん。

chmod 777 hoge するのが面倒なら、それこそシェルスクリプト組んどけ。

196:デフォルトの名無しさん
05/11/27 00:50:44
#!/hoge
すら書いてなさそうな香具師だな

197:デフォルトの名無しさん
05/11/27 01:28:22
まあ何だか知らないが、今までvi使ってたんならvimはどうよ。あれ
色つくだろ。

198:デフォルトの名無しさん
05/11/27 01:32:53
なるほどー。
でも何でか、sh でカレントから新しくシェルを起動できるんだけどな?
ファイル名単体で打ったらダメだけど・・・環境変数に書いた覚えないし。

と思ったら、スクリプトの一行目が #!/bin/sh だったことを思い出した。
なるほど。そうか、パスは通してるのか。ふむふむ。
「実行権限を与えてパスを通す」。なるほどなるほど。

いやー、どれだけ自分の知識が曖昧か再認識しましたよ。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5089日前に更新/248 KB
担当:undef