[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/10 13:03 / Filesize : 248 KB / Number-of Response : 977
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト相談室



1 名前:デフォルトの名無しさん [2005/04/04(月) 03:43:03 ]
シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。 


792 名前:779,784 [2008/02/20(水) 14:07:08 ]
>791
ありがとうございます。

自社でちっさいデータセンタを持っています。
で、その中に他の会社のドメインと同居してるんです。

複数ドメインを管理するGUIのソフトが未熟で、
会社に届いたメールを携帯に転送する場合があるんですが、
転送すると全部そっちに転送されちゃうんです。
それを回避するには、今のところCUIで手書きして
あげるしかないんです。

私は情シス部隊所属、DCは開発部隊のもの。
与えられたドメインごとの管理者ユーザは、CUIだと
他のユーザの$HOMEに入れないんですよ。
それで、SUIDつけたスクリプトならイケるんじゃないかと
考えた次第です。

なんか表現が未熟ですがご理解いただけましたでしょうか?


793 名前:デフォルトの名無しさん [2008/02/27(水) 12:09:36 ]
教えてください
日付の切り出しかたわかりません
data.txt
2/1 XXXXXXXX
2/2〜2/5 XXXXXXXXX
2/7〜2/8 XXXXXXX
2/12 XXXXXXXXXX
2/20〜2/28 XXXXXXXXX

と書かれた行があり 今日より以前の日付の行を削除するにはどうすればいいですか

正規表現板で聞いたのですが正規表現の問題と言うよりプログラムの方でたずねる
みたいナノデ
日付に〜が入っているためなおさら難しくさっぱりわかりません

794 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:02:15 ]
シェルスクリプトで実装するのか?そうでないならスレ違いだが

795 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:19:20 ]
>>792
今日より以前を削除とは?

今日が2/27で
2/5〜2/28 xxxxxx
というデータを

2/27〜2/28 xxxx
にしちゃうのか、そのまま生かすのか?

796 名前:デフォルトの名無しさん [2008/02/27(水) 16:57:32 ]
初心者な質問ですみません。
あるディレクトリの中に数百のファイルがあり、
AAA_01.txt
AAA_02.txt
...
のようなファイル名になっています。

それを、下記のように、AAAの箇所をDATE関数で日付を取得したいのです。
20080226_01.txt
20080226_02.txt
...

どのようにすればよろしいでしょうか。


797 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 17:15:22 ]
>>796
日本語で

798 名前:デフォルトの名無しさん [2008/02/27(水) 17:27:00 ]
>>795
今日が2/27だと
2/20〜2/28 XXXXXXXXX
の行を残してそれ以前の日付の行を削除したいのです。

799 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:02:38 ]
あーなるほど、PIMのスケジューラみたいなものを考えているってことか。
シェルスクリプトだけでどうこうできるフォーマットじゃないし、チルダの所為で
awkかなんかの一行野郎で済ませることも難しそうだ。

800 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:11:01 ]
バカみたいにawk使えばいけそうじゃない?
実行して試してないけど下みたいな感じで。

DATE=`date +"%m/%d"`

M=`echo ${DATE} | awk 'BEGIN{FS="/"};{print $1}' `
D=`echo ${DATE} | awk 'BEGIN{FS="/"};{print $2}' `

while read LINE;do

if [[ `echo ${LINE} | awk '{print $1}'` = [*][〜][*] ]] ;then
MM=`echo ${LINE} | awk 'BEGIN{FS="〜"};{print $2}' | awk 'BEGIN{FS="/"};{print $1}'`
DD=`echo ${LINE} | awk 'BEGIN{FS="〜"};{print $2}' | awk 'BEGIN{FS="/"};{print $2}'`
else
MM=`echo ${LINE} | awk 'BEGIN{FS="/"};{print $1}'`
DD=`echo ${LINE} | awk 'BEGIN{FS="/"};{print $2}'`
fi

if [[ ${M}=<${MM} && ${D}=<${DD} ]] ;then
echo ${LINE} >> ${OUT_FILE}
fi

done < ${IN_FILE}

みたいな。





801 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:14:11 ]
あ、dateコマンドで出てきた数値の頭に0がついてたらだめかも。
そのへんは0区切りで$2を取るとか適当にやってください。

802 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:51:41 ]
bashで数値を10桁程の数値をカンマ区切りにしたいのですが、どのような書き方をしたらできるでしょうか?

803 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:57:06 ]
>>800
それはOneLinerとは言えないんじゃ……と突っ込もうと思ったら
OneLinerを腐るほど呼んでたのねw

804 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 05:18:51 ]
>>802
標準のコマンドで何かありそうなきもするし、
awk とか sed とか perl とかなら OneLiner で済みそうだが
あえて bash 限定で書いてみたぞ。
expr 使えば bourne sh でも動くようになると思う。

#! /usr/bin/env bash
num=$1
result=''
figure=$[ ${#num} % 3 ]
(( figure > 0 )) && read -n "$figure" result <<< "$num"
while read -n 3 i ; do
 [[ -n "$i" ]] && result="${result},${i}"
done <<< "${num:$figure}"
echo "${result#,}

805 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:41:18 ]
expr使っていいんだったらexpr $num : '.*\(...\)'で済んじゃうだろ。
以下1行に詰め込めないこともないawk解。
{
    out=""
    for (l=length(src=$0) - 3; l>0; l-=3) {
        out="," substr(src,l+1,3) out;
        src=substr(src,0,l);
    }
    print src out;
}

806 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 21:28:47 ]
>>804
>>805
なるほど、さまざまな方法があるんですね。
とても参考になりました、ありがとうございました。

807 名前:デフォルトの名無しさん [2008/03/04(火) 17:15:40 ]
cシェルについて質問させてください。
/(スラッシュ)一文字にマッチさせるには
どのように記述すれば良いでしょうか。
以下のようにやりましたが、うまくいきません。
よろしくお願い致します。


#!/bin/csh -f

set etc = /
echo $etc

if ($etc =~ ^/$) then
echo ok
else
echo ng
endif


808 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 17:24:54 ]
sh系みたいにtestコマンドを使って、if [ -$etc == -/ ] then としたらどうだろう。

809 名前:デフォルトの名無しさん [2008/03/04(火) 17:36:26 ]
>>808
即レスありがとうございます!
出来ました<(_ _)>

810 名前:デフォルトの名無しさん [2008/03/10(月) 15:02:33 ]
while read lineでファイルを読み込んで
その行にABCと言う文字があるかないか判定して
あれば 処理1
なければ 処理2という if文での書き方教えてください



811 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:33:37 ]
case $line in
*ABC*)
処理1
;;
*)
処理2
;;
esac

ってif文でかよ!



812 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:20:20 ]
grepと組み合わせないと無理か。
1行ごとにgrepなんか起動したくないが。

813 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:24:46 ]
line2=${line%%ABC*}${line##*ABC}
# で削って
if [ ${line} = ${line2} ]; then
# 処理1
else
# 処理2
fi
# とか?

814 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:49:58 ]
if [[ $line =~ ABC ]]; then
echo matched
else
echo did not match
fi
こういうこと?

815 名前:デフォルトの名無しさん [2008/03/12(水) 23:35:10 ]
1レコードのXMLを、シェルを使って字下げなどを自動で行って表示させたいのですが、
なにかうまい方法はないでしょうか?

---------------------------
<all><a>123</a><b><c>456</c><d>789</d></b></all>



<all>
<a>123</a>
<b>
<c>456</c>
<d>789</d>
</b>
</all>
------------------------

というような感じで・・・

816 名前:デフォルトの名無しさん [2008/03/12(水) 23:37:16 ]

すいません、4タブで字下げされてると思ってください。


817 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:48:55 ]
整形式XML全般を扱うというのは、かなり難しいんじゃないか?
perlとかrubyとか使うべき。
よほど単純化されてるんなら、まずはタグ1個が1行になるように改行して、
開始タグなら字下げを増やして、終了タグなら字下げを減らして、って感じか。
ただこれでは <c>456</c> とか無理だが。

818 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 03:26:53 ]
>>815
おおざっぱに手順を考えてみた。
めんどくさそうなので実装はまかせた。

1. 行の最初にあるタグとその閉じタグの間に他のタグがあれば、タグの頭で改行する。
  この時にインデントの深さをタブ幅文プラスしてタグ名を記録する。
2. インデントの深さが 0 以上ならインデントする
3. タグの間にタグが無いなら閉じタグで改行
4. 記録したタグの閉じタグを見つけたらインデントの深さを減らして記録から削除。
5. 1-4 繰り返し

819 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 03:29:03 ]
xmllint --format に食わせればおk

820 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:13:44 ]
cron などによってある時刻に自動的に起動させるプロセスで、
実行開始から xxxx秒 とか経過してもまだ終了しない場合
強制的に終了させる方法にはどんな方法があるでしょうか?

そして、その方法で注意しておかなければならない
点とかあれば教えてください




821 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:00:29 ]
起動したいプロセスをバックグランドで起動して、
必要な秒数sleepしたら問答無用でkillするとか。
そのプロセスが、適切な後処理のために特殊なシグナルを利用できるのなら、
killでそのシグナルを指定すればいい。

822 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:33:55 ]
>>820
ロックファイルを作るタイプはプロセスだけ殺しちゃうと
困った事になるかもしれない。

823 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:44:02 ]
だからそういうプロセスは適切なシグナルハンドラを用意するべきなんだよね。

824 名前:デフォルトの名無しさん [2008/03/25(火) 22:12:46 ]
Cシェル(ソラリス)について教えてください。
test.txtに、helloが入っていたら、OK、
無ければ、NGと判定させたいのですが、
以下のようにしてもIF文が不正ですと言われます。
Bシェルでは、うまくいくのですが、Cシェル用の記述方法等
ありましたらアドバイスください。

if ( cat test.txt | grep "hello" ) then
    echo OK
else
    echo NG
endif

825 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:14:58 ]
$status

826 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 00:19:08 ]
>cat test.txt | grep "hello"
なんでgrep "hello" test.txtにしないんだ?

827 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 08:23:26 ]
B shell 使えばいいじゃん。

828 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 14:06:37 ]
ファイル 1.txt 2.txt 3.txt test.bash が存在するディレクトリで以下の
内容を実行するとなぜ1が返ってきますか?4になぜならないのかわかりません。

--test.bash--
#!/bin/bash
current_files=$(ls)
echo ${#current_files[@]}

829 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 21:32:48 ]
for で current_files の中身を見てみると分かるかと。

for file in "${current_files[@]}"; do echo "[[[$file]]]"; done

830 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:59:01 ]
>>828
× current_files=$(ls)
○ current_files=( $(ls) )

空白入りのファイル名があると期待通り動かないから気をつけろ



831 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 01:19:09 ]
いつもそこで悩むんだけど、
空白入りのファイル名があっても大丈夫な方法ってないの?

832 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 01:46:20 ]
>>831
つperl
つruby
つpython


833 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:49:45 ]
つzsh

834 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:54:25 ]
>>831
あるにはあるが、正直面倒。

1) 一時的 IFS 変更
IFS=$'\n' current_files=( $(ls) )

2) for + ワイルドカード
for file in * ; do
current_files[${#current_files[@]}]=$file
done

3) while + read + here strings (パイプは不可)
while read file ; do
current_files[${#current_files[@]}]=$file
done <<< "$(ls -1)"

835 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 07:18:29 ]
>>834
ほうほう・・・。3 とか凄いですな。

836 名前:828 mailto:sage [2008/03/28(金) 09:29:29 ]
うぉぉ・・!激しく助かりました。
シェルなんて初めてなんでw奥が深いな。

837 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:14:01 ]
ファイルから読んだ文字列をfindに引数として渡して、
ファイル一覧を取得するスクリプトを作りたいのですが、うまくいきません。
以下の内容でおかしな部分があったら指摘をお願いします。

ディレクトリ構成
dir
+---nkf_args
+---filelist.sh
+---a.cpp
+---b.cpp
+---a.h
+---b.h

----------------------------
nkf_argsファイル
-name "*.cpp" -or -name "*.h"
----------------------------
filelist.shファイル
#!/bin/sh

#nkf_argsファイルから引数文字列取得
nkf_args=`cat nkf_args`

#findで条件に一致したファイルリスト取得
files=`find ./ $nkf_args`
for filename in files
do
echo "$filename"
done


838 名前:837 mailto:sage [2008/03/30(日) 23:16:40 ]
続き

スクリプト実行結果

予想値
a.cpp
a.h
b.cpp
b.h

結果
出力無し

ここまで
--------------------------------



839 名前:837 mailto:sage [2008/03/30(日) 23:19:28 ]
ちなみに引数ファイルに書かれているものの
ダブルクォーテーションを外すことで
*.cppに関する結果は得られましたが、
*.hに関する結果は得られませんでした。

840 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 00:03:22 ]
取り敢えず、filelist.shの1行目を#!/bin/sh -xにして実行してみたら?



841 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 00:32:52 ]
そのfindでのORって-oだったりしませんか?

842 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 00:35:38 ]
>>841
POSIXのfindなら、-orは-oと同じ(とmanに書かれている)だから大丈夫。

843 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 01:12:40 ]
>>839
そのやり方を試してみました。
--------------------------------------
出力
++ cat nkf_args
+ nkf_args='-name "*.c" -or -name "*.cpp"'
++ find ./ -name '"*.c"' -or -name '"*.cpp"'
+ files=
--------------------------------------

出力結果を見るとダブルクォーテーション部分が、
さらにシングルクォーテーションで囲まれるから駄目なのかと思い、
ダブルクォーテーションを外してやってみました。
--------------------------------------
出力
++ cat nkf_args
+ nkf_args='-name *.cpp -or -name *.h'
++ find ./ -name a.cpp b.cpp -or -name a.h b.h
find: paths must precede expression
Usage: find [path...] [expression]
+ files=
--------------------------------------
ダブルクォーテーションを外した結果は
作業ディレクトリにあったファイル名に置き換えられて
無効な引数になってしまいました。

以上の結果を踏まえて、条件に合うファイルがないディレクトリから
スクリプトを実行した結果、想定していた結果が得られました。
ただ、根本的な解決になっていない(どういう動作をするか分かっていないと、正しい結果が得られない)ので、
これをディレクトリ状態に依存しないようにしたいのですが、どういう方法があるのでしょうか?
よろしくお願いします。

844 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 02:42:39 ]
files=`find ./ $nkf_args`

files=`eval find ./ $nkf_args`
としたらうちでは上手くいったよ。

845 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 02:56:20 ]
>>844
試してみたところ、想定している結果が得られました。
皆さんありがとうございました。


846 名前:デフォルトの名無しさん [2008/04/02(水) 09:40:50 ]
Cシェルで、以下のようなテキストファイルに保存した内容と
コマンドを組み合わせた処理をしたいと考えています。

・command.txtの内容
 grep httpd

/bin/csh -f
set command = `cat command.txt`
ps -ef | "command" > kekka.txt

上記のように試したのですが、書式が不正の為、
エラーとなります。
ps -ef | grep httpdの実行結果を、kekka.txtに保存したのですが、
どのようにすれば良いでしょうか。アドバイスお願いいたします。



847 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 09:51:35 ]
"command" → $command

848 名前:デフォルトの名無しさん [2008/04/02(水) 10:44:30 ]
>>847
即レスありがとうございます。
ps -ef | "$command" > kekka.txt としても
grep httpd: コマンドが見つかりません。という
エラーが発生します。
ps -ef | grep httpdの実行は可能です。
何が問題となっていますでしょうか。


849 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:52:50 ]
アホ

850 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 11:38:28 ]
847のすべての文字を100回音読しなさい



851 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 11:38:37 ]
>>848
#!/bin/sh
command=`cat command.txt`
ps -ef | $command > kekka.txt


852 名前:848 [2008/04/02(水) 16:06:20 ]

すみません。よく読んでダブルクォーテーションを外したところ、
正常に実行できました。ありがとうございます。
恥の書き捨てでもう一つ質問させてください。
コマンドにパイプ繋ぎで複数の指定をしたいと思ってます。
command.txtの内容が、grep httpdであれば実行できるのですが、
grep httpd | grep -v grepとすると、以下のようなエラーになります。

> grep httpd | grep -v grep
> grep: | をオープンできません。
> grep: grep をオープンできません。
> grep: -v をオープンできません。
> grep: grep をオープンできません。

これを防ぐ方法は無いでしょうか。
もしくは、command.txtに「ps -ef | grep httpd | grep -v grep > kekka.txt」と
書いてあって、それをそのまま、Cシェルで実行する方法は無いでしょうか。

853 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 16:13:03 ]
csh -f command.txt
csh -fc "$command"
csh -fc "`cat command.txt`"


854 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 16:14:04 ]
>>852
ttp://www.kiso.tsukuba.ac.jp/~makimura/text/node239.html

855 名前:848 [2008/04/02(水) 17:07:37 ]
>>853
ありがとうございます。<(_ _)>

856 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 00:08:25 ]
>>848
source command.txt

857 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:56:01 ]
シェルでroot権限で実行してるのに、
ファイルが作れないとか、パーミッションエラーが出る
場合があるんだけどどうしてなの?
OSが同じ他のマシンじゃ正常に実行できる
細かいところでマシンの仕様がちがってるんだろうけど
なんでなんだよ。root権限なのに。。。

858 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:29:17 ]
>>857
情報が少ないな。少なくとも
# ls -ld .
位は欲しい。

859 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:36:06 ]
root でも root の書き込み属性がないと書き込めないよ

860 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:18:59 ]
BSD系ならchflagsあたりが関係してるかもしれん



861 名前:デフォルトの名無しさん [2008/04/29(火) 22:02:37 ]
bashなのですが
$ tgts=`find . -name \*.\[hc\]`
$ for tgt in $tgts; do
cp ${tgt} ${tgt}.orig
done

cp: `ここにファイル名ずらずら` にアクセス中: File name too long
と言われてしまいます。

tgts=`find . -name \*.\[hc\] -printf "%p "`としてIFS=" "でも同じでした。
tgts=`find . -name \*.\[ch\] -print0`だと
cp: `./aaa.h' と `./aaa.h' は同じファイルですとか言われてしまいます><

862 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:08:13 ]
エラーの原因はよくわからないけど、パイプするかfind -execするかしたらどう

863 名前:861 mailto:sage [2008/04/29(火) 22:27:15 ]
すみません
bashでなくてzshでした
bashだとちゃんと動きました

864 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:29:44 ]
zshなら$tgtsが単語に分割されないから。${=tgts}だといい

865 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:00:56 ]
シェルスクリプト修正の工数見積もりにあたって、修正対象のスクリプトのステップ数を出したいのですが、みなさんはどのような方法で行っているのでしょうか?
よろしくお願いいたします。

866 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 20:17:06 ]
>>865
先に(こっそり)スクリプトを書いて、実績を「工数見積」として出す。

シェルスクリプトを「ステップ数」で見積もるなど馬鹿馬鹿しくてやってられない。
ステップ数換算で、ど〜の・こ〜の言うのは太古のCOBOLの悪習。

867 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 06:24:34 ]
>>865
そういう話はマ板向きじゃないのだろうか。

まあそれはそれとして、シェルスクリプトなんてやってることは
一般のアプリケーションプログラムに比べて小さくて特定されてるんだから
修正するのは新しく作り直すのと同義だろ。
新規作成と同額でいいんじゃね?

/etc/rc.d/並みの複雑怪奇なスクリプトだったらこの話はあてはまらないが、
そういうのはperl,python,rubyで書かないのが間違い。


868 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:10:59 ]
echo "hoge" | read Hage
echo $Hage

これって読み込んでくれないの?

869 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:57:12 ]
>>868
echo "hoge" | (read Hage)
の状態になって、サブシェルの変数をセットして終わる。
echo "hoge" | (read Hage; echo $hage)

zshなら大丈夫。


870 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:00:26 ]
読み込むよ。これ試して味噌。
--
echo foo | (read; echo $REPLY)
--
って書くために検証してたら先を越されたw



871 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:37:59 ]
>>869,>>870
thx.
でもよくわからない。

#!/bin/sh
alert --info "Whitch Resolution" "1600x1200" "1280x1024" "1024x768" >RES
read Res <RES && rm RES
echo "Resolusion is "$Res
case "$Res" in
"1024x768" ) echo "mode 1024 768 32" >/boot/home/config/settings/kernel/drivers/vesa ;;
"1280x1024" ) echo "mode 1280 1024 32" >/boot/home/config/settings/kernel/drivers/vesa ;;
"1600x1200" ) echo "mode 1600 1200 32" >/boot/home/config/settings/kernel/drivers/vesa ;;
esac
#shutdown

これの$Resを得たいんだが、パイプで取得できないのかと思ってのですが。

872 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 00:04:03 ]
できないからファイルに入れてるってことでしょ。
ただ、
Res=`alert ...`
とすりゃいいのにとは思う。

873 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 00:25:29 ]
>>872
Res=`alert --info ・・・・`でいきます。
Res= `じゃダメなのか、なるほど。

874 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 06:03:17 ]
bashで乱数を用いてで数値3桁(000〜999)を表示させるにはどうしたらいいでしょうか?
hoge=`${RANDOM} | cut -c 2-4 `
echo $hoge
としてるんですがこれだと表示が2桁や1桁のときに桁数が揃わなくて困っております。

875 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 09:33:30 ]
pりんtf

876 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 09:39:08 ]
”パーセントさんエスバックスラシュn” $ほげ

877 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 09:46:34 ]
あっ、間違った、>>875,876は忘れてくれ。

878 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 10:51:46 ]
あってんじゃん。
printf "%03d\n" $hoge

879 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:32:18 ]
おっ、惜しかった、0が必要なんですね。勉強になった。

880 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 18:39:35 ]
質問した本人はどこに消えたんだろう?



881 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:08:31 ]
/dev/nullの闇に呑まれたのだった・・・


882 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 10:26:59 ]
歓呼工面でなかってよかったのう。

883 名前:デフォルトの名無しさん [2008/05/22(木) 20:42:02 ]
今、プロセス監視ツールについて調べてまして
プロセスに常駐するシェルを作りたいと思ってます。
ps -ef | grep sh を実行して、常時起動しているシェルというのは、
どうやって書けばいいのでしょうか。
また、この際に表示されるPIDは、常時同じ値にしたいと思ってます。
アドバイスお願いいたします。

884 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:58:01 ]
シェルをつくるのですか。
jubilo.cis.ibaraki.ac.jp/~isemba/PROGRAM/CPROG/611.pdf
ここいら辺を参考に頑張ってください。

885 名前:デフォルトの名無しさん [2008/05/22(木) 21:24:52 ]
すみません。プロセスが常駐するシェルスクリプトを
作りたいのです。

886 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:33:17 ]
#!/bin/sh
while :; do :; done

887 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:43:42 ]
OSによってはwatchというコマンドがあるかもしれない。
watch ps -ef

なければ>>886のdoの中身の:をps -ef ; sleep 10とかにすればいいんじゃね。


888 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:05:10 ]
>>886-887
ありがとうございます
今すぐ試せないんですが、Watchやってみます。
sleepはやってみたんですが、シェルスクリプトが
プロセスとして残るのではなく、sleepコマンド自体の
プロセスとして残ってしまいました。
>>886は無限ループというのは分かるんですが、
負荷が上昇したりしないでしょうか。

889 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:18:08 ]
sleepは当然残るけど、親プロセスであるshも残ってないか?

890 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:24:06 ]
#!/bin/sh
kill -19 $$




891 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:36:54 ]
>>889
それが残らなかったんです。linuxなんですが・・・。
ディストリビューションは多分centosです。
SOLARISはshが出てたんですが・・

892 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:46:28 ]
つか、常駐して、何させたいのよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef