シェルスクリプト総合 ..
116:login:Penguin
09/06/24 00:57:03 23DWLrsu
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
117:112
09/06/24 01:41:57 B7cQg4Om
>>114-116 ありがとうございます。
早速、(( ))を使って書き直しました。
10万までインクリメントしていくだけのスクリプトで
速度を計測してみたのですが、全然違うのですね!
./tmp.sh 4.64s user 0.10s system 99% cpu 4.788 total
./tmp.sh 92.07s user 111.03s system 96% cpu 3:31.31 total
exprの方(下の方)が遅いです。
それと一貫性が無いように感じたので、1行目のwhichの文を$(which w3m)としました。
また、bashを見てみると[[ ]]という組み込みの評価式があったので、
if [ \( ! -e "$COMMAND" \) -o \( ! -x "$COMMAND" \) ]; then
という部分を変更しました。
if [[ ( ! -e "$COMMAND" ) || ( ! -x "$COMMAND" ) ]]; then
これも計測してみたら、若干ですが[[ ]]の方が速かったです。
>>116で挙げられた記法を使用したことで変数が1つ減りました。
こんな感じになりました。
#!/bin/bash
# @(#) man on linux.or.jp
#
COMMAND=$(which w3m)
PAGE=
SECTION=
SECT=("on" "on" "on" "on" "on" "on" "on" "on")
SECTURL=
BASEURL="URLリンク(search.linux.or.jp)"
URL=
if [[ ( ! -e "$COMMAND" ) || ( ! -x "$COMMAND" ) ]]; then
echo "not installed w3m"
exit 1
fi
118:112
09/06/24 01:45:08 B7cQg4Om
while getopts S:h OPT
do
case $OPT in
S) SECT=("off" "off" "off" "off" "off" "off" "off" "off")
SECTION=$(expr $OPTARG - 1 2>/dev/null)
if [[ $? == 2 ]]; then
echo "secion number is invalid. exit."
exit 2
fi
SECT[$SECTION]="on";;
h | ?) printf "Usage: %s: [-S secion] page\n" $0
exit 2;;
esac
done
shift $(($OPTIND - 1))
PAGE="$1"
if [[ x$PAGE == x ]]; then
echo "What manual page do you want?"
exit 1
fi
for ((i=1; i<${#SECT[@]}; i++))
do
if [[ x"${SECT[i-1]}" = x"on" ]]; then
SECTURL="$SECTURL"'&Sec'"$i"'='"${SECT[$((i-1))]}"
fi
done
URL="${BASEURL}"'Pagename='"${PAGE}"'&submit=Search%21'"$SECTURL"
$COMMAND "$URL"
変数が空の場合だったらとかスペースが含まれていたらとか、その辺りをよく理解しておらず、
とりあえずダブルクォートしてたりするのですが、無駄な部分があったりしますでしょうか。
細かい部分でも構いませんので、訂正していただけると嬉しいです。長文失礼しました。
119:login:Penguin
09/06/24 02:04:47 aKYWDWvt
そのままでも全然いいと思うよ(^_^)
120:login:Penguin
09/06/24 08:42:54 CrOO7ztU
COMMAND=$(which w3m)
は
COMMAND=$(command -v w3m)
で外部コマンドはサヨウナラ
SECTION=$(expr $OPTARG - 1 2>/dev/null)
if [[ $? == 2 ]]; then
echo "secion number is invalid. exit."
exit 2
fi
も
let SECTION="OPTARG - 1" 2>/dev/null
case $SECTION in
[0-7]) :;;
*) echo "secion number is invalid. exit."
exit 1;;
esac
で外部コマンドはサヨウナラ
if [[ ( ! -e "$COMMAND" ) || ( ! -x "$COMMAND" ) ]]; then
は
if [[ ! -x "$COMMAND" ]]; then
で十分だと思うが
121:login:Penguin
09/06/24 09:19:46 aKYWDWvt
>>120
> COMMAND=$(command -v w3m)
w3mがaliasされてたらwhichと結果がかわるよ
122:login:Penguin
09/06/24 09:37:52 BWmtmrUC
bashってtypeないの?
123:112
09/06/24 13:57:32 qAybS9Ki
>119-122 レスありがとうございます。
今回作ったスクリプトでJMのbashを見ながら、こんな風にしてみました。
INTERRUPT=0
COMMAND=$(
if [[ $(builtin type -t w3m) != "file" ]]; then
echo "may not installed w3m" >&2
INTERRUPT=1
exit 1
fi
IFS=' '
set $(builtin type w3m)
echo $3
)
if [[ $INTERRUPT == 1 ]]; then
exit 1
fi
unset INTERRUPT
こんなトリッキーなものを書いたのは初めてですが、これでエイリアスの場合も大丈夫でしょうか?
# .bashrcにalias w3m='ls -l'と書いてみたのですが、
# type -tの結果がaliasになりませんでした。何故なのでしょうか...
letは目から鱗でした。
「数字じゃない文字列が入力された時」(例えば"aaa"とか)
をキャッチするために$?==2を使いたかったので、敢えて$(( ))を使えず、$( )を使っていました。
ですが、「セクション番号以外が入力された時」とまとめてしまえば、もっと安全ですね。
一貫性持たせるためにletを使わずにSECTION=$((OPTARG - 1));case云々...esac;
とできるか、と思いましたが、letも数字から始まっている文字列("3aa"とか)
だったりすると標準エラーに吐くのですね。便利です。let。
ファイルテストの部分は仰る通りです。わたしの勘違いです。
ご意見ありがとうございます。
124:login:Penguin
09/06/24 14:40:30 BWmtmrUC
>>123
そんな面倒なことはせんでもええ
if ! type -P w3m >/dev/null; then
echo '(# ゚Д゚)'
fi
125:112
09/06/24 17:05:52 qAybS9Ki
何度もすみません。
Pオプションが、原文のman bashにしか書いようで、
書いてある英語がよく分からないのですけれど (-_-A;
こういうことが書いてあるんでしょうか?
pオプションは、エイリアスとか関数があったら何も返さないけれど、
そういう時でもPオプションは、ファイルだけを対象にしてそのパスを表示する。
間違ってたら恥ずかしいです。
if ! COMMAND=$(builtin type -P w3m 2> /dev/null); then
if [[ ! -x $COMMAND ]]; then
echo "not installed w3m" >&2
exit 1
fi
fi
ファイルテストと合わせて、COMMANDを取得するところはこんな感じになりました。
他は、>>117,118と同じです。
126:login:Penguin
09/06/24 19:01:09 h5ARTQfu
aliasにするには同シェルスクリプトファイル内に書くか.を使うか
例えばこう
shopt -s expand_aliases
. ~/.bashrc
type -t w3m
SECTURL="$SECTURL"'&Sec'"$i"'='"${SECT[$((i-1))]}"
みたいなのは
SECTURL="$SECTURL"\&Sec"$i"\="${SECT[$((i - 1))]}"
とエスケープ使ったほうが読みやすいかもな
127:login:Penguin
09/06/24 19:29:28 w4EkT5LC
>>126
俺は関数化して環境登録することが多いです。
function w3m() {
ls -l
}
export -f w3m
128:login:Penguin
09/06/26 01:44:08 +M5S3VDp
質問です。前処理をして、
URLリンク(www.youtube.com)
のようなURLを列挙したファイル(you.txt)を用意してあり、
yt=$(cat you.txt | sed -e "s/&t.*//g; s/^.*video_id=//g") && \
wget -O $yt.flv -c -i you.txt
で動作させた場合、
思惑通り一個目は、-AKQ6CUJa90.flv というファイル名で取ってこれるのですが、
二個目以降はファイル名の抽出が働かず、
ローカルに保存されるのは同名のファイル名となってしまいます。
どのようにすれば思惑通りファイルを取ってこれるのでしょうか?
129:login:Penguin
09/06/26 02:55:31 5uTursO/
for
130:login:Penguin
09/06/26 03:43:24 5uTursO/
for youtube_url in `cat you.txt`; do
wget -c -O "`echo "$youtube_url" | sed 's/video_id=\(.*\)&t\1/g'`.flv" "$youtube_url"
sleep 5
done
でどうでしょうか
131:login:Penguin
09/06/26 06:18:01 3RE4KePV
for youtube_url in `cat you.txt`; do
wget -c -O "`echo "$youtube_url" | sed 's/^.*video_id=\(.*\)&t.*$/\1/'`.flv" "$youtube_url"
sleep 5
done
…でどうでしょうか(^_^;)
132:login:Penguin
09/06/26 06:31:57 3RE4KePV
id変わってる…(^_^;;)
133:128
09/06/26 11:30:36 WtRHx5He
>>130, 131
お知恵を元にして、目的を果たせました。ありがとうございます。
感謝しています。
なお、自分の書き込んだ内容でも、いちおうファイル名の抽出には成功する模様?
試行錯誤してみるのも、面白いですね。ではでは。
134:login:Penguin
09/06/30 11:41:15 Iil9pev3
質問です。
現在、kshを使用してテストをしているのですが、
ステップが多すぎて(1k↑)カバレッジを求められてます。
カバレッジツールが無いかグーグル先生に聞いてみましたが
全く引っかからなく・・・
シェルのカバレッジを求めている人はどんな方法で求めていますか?
135:128
09/07/01 04:20:50 3OeIBl6N
echo "What terms?"; read terms; terms="${terms// /+}"
T="$HOME"
mkdir -p $T/${terms}
for n in $(seq 0 10); do w3m -dump_source \
"URLリンク(images.google.com)" \
| sed -e 's/","http/\n","http/g; s/","/\n","/g' | grep -E -w "\",\"http:.*.jpg" | sed -e 's/^.*http/http/g' | wget -P $T/${terms} -r -l 1 --timeout=60 --tries=3 -c -e robots=off -U 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' -i -
done
136:login:Penguin
09/07/06 22:31:23 tHSUGfrq
( sleep 1h; echo "hello" ) > file
ってやると、fileは1時間openしっ放しになるンすかね?
137:login:Penguin
09/07/07 09:03:43 jQkxOO5Q
>>136
なるだろ。lsofとか使って観察してみるといい。
138:login:Penguin
09/07/08 01:51:04 SE49fktK
sleep 3600 > file でよくないか?
139:login:Penguin
09/07/08 02:18:59 VRCFK11t
お前は何を言っているんだ
140:136
09/07/08 07:54:59 77+BAR3B
>>137
だおうもありまとう
>>138
なんでもいいよ!!
141:login:Penguin
09/07/12 10:36:19 KKJfcIYB
質問があります.
直接スクリプトの話ではないんですが,
あるファイルに xxx という文字が含まれていなければ xxx を末尾に追記したい,
という場合みなさんどうされています?
grep とか使って条件分けすればできるのはわかるんですが,もっとスマートに
やる方法があれば教えてください.
142:login:Penguin
09/07/12 10:37:35 1p3v2qzF
sed
143:login:Penguin
09/07/12 10:41:49 1p3v2qzF
ああファイルの話だったか
じゃあ素直にgrep
144:141
09/07/12 10:44:36 KKJfcIYB
>>142
それよりは
% grep XXX file || echo XXX >> file
の方がわかりやすい気が.
質問の意図としては,下記のように記述できる nanika コマンドのようなもの
がないか知りたかったです.
% nanika XXX file
145:login:Penguin
09/07/12 12:20:21 2S8ITALR
ない
146:login:Penguin
09/07/12 12:53:03 VHWHiWuB
>>144
ない。
なぜ nanika XXX file がスマートなのか知りたい。
147:login:Penguin
09/07/12 18:16:12 elf51XSl
grep --creeping-deth
148:login:Penguin
09/07/12 19:44:16 o8qLTMAv
death
じゃないのか。
149:login:Penguin
09/07/12 20:31:41 elf51XSl
>>148
--orz
150:login:Penguin
09/07/14 14:57:37 gyyoowtT
nanika() {
while read line
do
case "$line" in
*$1*) return
esac
done <"$2"
echo $1 >>"$2"
}
151:login:Penguin
09/07/14 15:44:41 CH7bWn6s
つまらん。
152:login:Penguin
09/07/14 21:42:07 LzAZSljQ
:(){ :|:& };:
153:login:Penguin
09/07/20 15:40:26 K8L8w1qf
age
154:login:Penguin
09/07/20 21:55:40 ae6hxCnx
ps aux | grep processA
でグレップしたプロセスのIDを変数に格納するにはどうかいてやればいいでしょうか?
155:login:Penguin
09/07/20 22:11:42 ODKc/pMj
変数=`ps aux | grep processA | gawk '{print $2}'`
156:login:Penguin
09/07/20 22:32:09 ae6hxCnx
>>155 ありがとう
特定のプロセスAが起動したら、date >> /home/log
としたいと考えています。ただし、プロセスAは、 grep で把握できるとして、
複数の場合があります。
この場合方法ですが、 ps aux | grep processA | gawk '{print $2}'` | wc -l
でこの帰り値が、0でないとき として if 分で、制御すべきでしょうか?(Whileなどで無限ループしたなかにif を配置)
なにかもっとシンプルな方法ないでしょうか?
157:login:Penguin
09/07/20 22:49:46 ODKc/pMj
ああ、改めて見たら
>>154にレスしてるみたいに見えるな。
158:login:Penguin
09/07/20 23:01:27 iUvo3V7o
>>156
以下でできるかも
変数=`pgrep プロセスA`
[ -n $変数 ] && date >> /home/log
159:login:Penguin
09/07/21 10:43:13 BO90gQOW
>>156
変数に入れる必要あるの?
pgrep processA >/dev/null && date >> /home/log
160:login:Penguin
09/07/21 23:11:34 xGYTho7h
pidof
とか使わんの?
161:login:Penguin
09/07/23 17:30:46 WFggSjQ8
ここで聞くべきか若干怪しいかと思うのですが、
sudo 経由した場合のみ、特定コマンド(たとえばps)を
一般ユーザ権限で利用させる方法ってないでしょうか?
ps をパーミッション700にしておき、
root以外は使用できなくなる状態へしたいのですが、
sudo 経由した場合のみ使わせたいと思ってます。
162:login:Penguin
09/07/23 18:06:19 P+5ig7CA
くだ質池
163:login:Penguin
09/07/26 07:44:48 FW8uMlXc
ttaファイルを再生するスクリプトを作ってみました。
一応ちゃんと動くのですが、、、
バックグラウンドで動かしているttaencがエラーで死んだ場合に
(単純な例では$1のファイルがない、とか)
playコマンドが入力を待ち続けてしまうのです。
何かよい方法ないですか?
#! /bin/sh -e
WAV=`mktemp -t $$.wav`
rm -f $WAV
mknod $WAV p
trap "rm -f $WAV" 0
ttaenc -o $WAV "$1" > /dev/null 2>&1 &
play -q $WAV > /dev/null 2>&1
164:login:Penguin
09/07/26 08:26:44 BwoYtVgZ
>>163
ifで$?を判定すればいいんじゃないかな
165:login:Penguin
09/07/26 09:00:23 VmbGTICm
>>164
コア吐いたらダメっしょ。
trapしたほうがよくね?
166:163
09/07/26 09:07:33 FW8uMlXc
>>163 自己レス
playとttaencを両方ともバックグラウンドにし、
ttaencをwaitすることでエラーを捕捉、必要ならplayを停止。
これで解決しました。
#! /bin/sh -e
WAV=`mktemp -t $$.wav`
rm -f $WAV
mknod $WAV p
trap "rm -f $WAV" 0
ttaenc -o $WAV "$1" &
DECODE_PID=$!
play -q $WAV > /dev/null 2>&1 &
PLAY_PID=$!
exec 2> /dev/null
wait $DECODE_PID || (kill -10 $PLAY_PID)
>>164
$?について調べたのですが、バックグラウンドプロセスには効かないようです。
でも、調べる過程で解決の発想を得られました。ありがとう!
167:login:Penguin
09/07/30 18:32:54 8kF2jsLv
シェルスクリプト初めて数日ですが、ファイルの書き換えやなんかは検索すると出てくるんですが
選択肢形式の作り方がいまいちわかりません。
lokkitやsystem-config-networkみたいな選択形式を作りたいのですが
何かヒントをいただけないでしょうか?
168:login:Penguin
09/07/30 18:37:48 3Jkdy3aR
>>167
whiptail とか?
169:login:Penguin
09/07/30 19:33:48 1ZQVAEXh
dialog
170:login:Penguin
09/07/30 19:43:13 fH5JNdXj
$ lokkit
bash: lokkit: command not found
$ system-config-network
bash: system-config-network: command not found
$ whiptail
bash: whiptail: command not found
はう??
$ xmessage -button 'nipple,ass' 'which?'
171:login:Penguin
09/07/30 20:01:21 3Jkdy3aR
>>170
何が言いたいんだ?
172:167
09/07/30 20:08:32 8kF2jsLv
>>168-169
ありがとうございます。
両方とも試してみましたがどちらもライブラリを追加しないと機能しないっぽいですね。
はじめて数日の私にはなかなか敷居が高いようです。
うーん・・・今さわってる環境でライブラリ追加させてもらえると大丈夫だと思いますが
ダメって言われたらアウトっぽいですね・・・。
173:login:Penguin
09/07/30 20:10:01 3Jkdy3aR
引き数で渡すとかじゃだめなん?
174:167
09/07/30 20:21:04 8kF2jsLv
引数で渡してもいいんですが
項目が少し多いので引数を渡すまでに選択肢で絞りたかったというのがあります。
関連ライブラリがいまいちまだ特定できないですが、道のりは遠そうです・・・
175:login:Penguin
09/07/30 20:37:05 w4YhvOQC
>>172
両方とも試してみたって、どうやって試したん?
176:login:Penguin
09/07/30 21:09:43 neY1QnOU
シェルスクリプトに詳しいみなさんに聞きたいのですが、
ユーザ追加して第三者に利用させるときに
これ禁止させておけばよい、といったコマンドありますか?
例えば find などです。
177:login:Penguin
09/07/30 21:17:05 otd/7QOf
>>176
シェルの内部コマンドだけで相当できるから考えるだけ無駄。
178:login:Penguin
09/07/30 21:17:21 uCTsIRNg
なんでfindはだめなの?
TOMOYO入れたら?
179:login:Penguin
09/07/30 21:25:06 wVBjHvC9
>>174
コマンドラインに収まらなくてもいいのなら、zenityは?
echo -e "選択肢1\n選択肢2\n選択肢3" | zenity --list --column="項目"
180:login:Penguin
09/07/30 23:35:05 zSR6vlNV
>>174
bash 限定でいいなら、
select i in "Yes" "No" "Cancel"; do
[ -n "$i" ] && break
done
case "$i" in
Yes) echo "$i, we can.";;
No) echo "$i, it's so hard.";;
Cancel) echo "...";;
esac
181:login:Penguin
09/07/31 00:19:11 eB5hWQQH
$(ls)
と
`ls`
は同じと考えていいの?
182:login:Penguin
09/07/31 01:07:21 dqFrtp13
よくない
183:login:Penguin
09/07/31 08:21:07 Q0h6j6GB
同じじゃないのか?
184:174
09/07/31 10:38:52 unqMPfm1
>>179
zenityもcommand not foundって言われてしまったので入ってないようです。
ですが選択肢としていろいろと勉強になりました。
ありがとうございます。
>>180
サンプルありがとうございます。
大変勉強になりました。
bash限定ならこのあたりが限界っぽいですね。せめて項目の文字を色分け出来るくらいはしたかったですが
モジュール追加出来ないからって事で先方にはあきらめてもらうようにします。
185:login:Penguin
09/07/31 10:47:53 dFOhVUdW
>>182
どう違うの?
186:login:Penguin
09/07/31 11:03:30 JVm6T/2T
Bashで設定を変更するものを作ってるんですがCtrl + C とかでプロンプトに抜けられないようにするにはどうすればいいんでしょうか?
187:login:Penguin
09/07/31 11:08:16 dFOhVUdW
>>186
trap
188:186
09/07/31 11:16:14 JVm6T/2T
>>187
ありがと。
出来ました。
189:login:Penguin
09/07/31 16:40:28 YezVKpJb
コンフィグ情報から
DEVICEとIPADDRだけを抜き出したいのですが下記だとDEVICEの行が5行表示され
ます。
構文が間違っているからだと思いますがアドバイスもらえないでしょうか。
eth0=/etc/sysconfig/network-scripts/ifcfg-eth0
while read eth0
do
echo $eth0 | sed -n '/DEVICE/p' /etc/sysconfig/network-scripts/ifcfg-eth0
done < /etc/sysconfig/network-scripts/ifcfg-eth0
190:login:Penguin
09/07/31 16:49:00 Q0h6j6GB
sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0
191:login:Penguin
09/07/31 16:51:37 dFOhVUdW
なんで何度も /etc/sysconfig/network-scripts/ifcfg-eth0 を書いてんだろ。
192:login:Penguin
09/07/31 16:52:11 sKGfGulX
>>189
答え先に書かれちゃったか。
1行目のeth0はどこで使ってるの?とか、whileでループさせる意味は?とか
ちょっと落ち着いて考えた方が良い
193:login:Penguin
09/07/31 16:56:53 IvZ7j8yJ
>>189
今後の為に基礎から勉強しなおしてきた方がいいよ
194:login:Penguin
09/07/31 16:57:14 6mUE4jrQ
> 1行目のeth0はどこで使ってるの?とか、whileでループさせる意味は?とか
> ちょっと落ち着いて考えた方が良い
落ち着いて考えてもわかんねーよ
1行目のeth0がどこにも使われてないのはわかるけど
195:189
09/07/31 17:37:11 YezVKpJb
みなさん回答ありがとうございます。
改めて見ると意味わからないことしてました。
下記のコードで意図する事ができました。
ありがとうございました。
while read
do
echo | sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0
break
done < /etc/sysconfig/network-scripts/ifcfg-eth0
196:login:Penguin
09/07/31 17:45:29 sKGfGulX
>>195
全力で釣られてやる。
>>190 さんが書いてるように、sed1行でいける
sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0
whileしたあげくに無条件でbreakとか意味わからん。
各行で何をしているのかもう少し考えよう
197:login:Penguin
09/07/31 20:49:41 M2gWEg8T
>>195
まずその「よく分からないけどとにかく丸写しでそれらしく作っとけばいいだろう」
という思想を改めるべきだな。
198:login:Penguin
09/07/31 21:59:52 JVm6T/2T
何やら上でもsedの質問出てますが質問させてください。
sedでtet.txt内にあるhogeをhogehogeに書き換えるものをつくりました。
sed -i 's/hoge/hogehoge/g' /tmp/test.txt
次にhogeとhogehogeの部分を変数にしたのですが今度は書き換わってくれません。
$aにはhoge
$bにはhogehoge
sed -i 's/$a/$b/g' /tmp/test.txt
test.txtを見ると更新はされているので何らかのアクションがあるみたいなんで
すが何か指定方法間違ってますでしょうか?
199:login:Penguin
09/07/31 22:03:23 Y1b6fdMF
sed -i "s/$a/$b/g" /tmp/test.txt
200:login:Penguin
09/07/31 22:06:26 Gbr9waoH
>>199
""だとシェル変数展開されないっすか?
201:sage
09/08/01 01:27:09 2gkCvOw5
シェルでリスタートとかかけると
活性化しますとか表示されるんですが、これ表示させないようにする方法ありますか?
/dev/nullとかしても表示されたので表示させない方法あれば教えてください。
202:login:Penguin
09/08/01 01:38:27 MXySzGMG
>>201
使ってるディストリのスレへ。
203:login:Penguin
09/08/01 02:29:31 SZCdXM7k
>>198
$ a='hoge'
$ b='hogehoge'
$ cat >/tmp/test.txt
hogepiyo$a$b$c
$ sed -i 's/$a/$b/g' /tmp/test.txt
$ cat /tmp/test.txt
hogepiyo$b$b$c # hogeはそのまま、$aは$bに。
$ cat >/tmp/test.txt
hogepiyo$a$b$c
$ sed -i "s/$a/$b/g" /tmp/test.txt
$ cat /tmp/test.txt
hogehogepiyo$a$b$c # hogeがhogehogeに、$aはそのまま。
204:login:Penguin
09/08/01 04:42:15 SZCdXM7k
>>181
入れ子のとき注意がいる。
$ echo $(echo a:$(echo b:$(echo c:$(echo d))))
a:b:c:d
$ echo `echo a:`echo b:`echo c:`echo d````
a:echo b:c:echo d
$ echo `echo a:\`echo b:\\\`echo c:\\\\\\\`echo d\\\\\\\`\\\`\``
a:b:c:d
205:login:Penguin
09/08/02 01:23:15 tM/nSNrk
画面を切り替えたりするとselect文が数行表示されない(実際には選択は出来る)ことが
よくあるんですが、データの受信が表示までに間に合ってないような感じです。
これを避ける方法などはあるんでしょうか?
使用しているターミナルはPoderosaになります。
206:login:Penguin
09/08/03 09:09:05 J0mTyN5X
今までbashでスクリプト組んで表示はExiteで翻訳とか適当にコピペってたのですが
シェルスクリプトって日本語表示出来ますか?
お偉いさんが英語じゃわからんとかぬかしやがったので・・・
207:login:Penguin
09/08/03 09:14:24 +8DYA08E
>>206
文字コード決めうちでよければ比較的簡単だな。
問題はそれで表示できるかどうかは実行する人が
使ってるターミナルに依存するということだ。一般的に
やろうとするとロケール見て切り替えみたいなことを
しなきゃならないが結構面倒だね。
ま、お偉いさんの環境に合わせておけばいいんじゃね?
208:206
09/08/03 09:29:50 J0mTyN5X
>>207
やっぱりそうですよね。
アクセスしてきたターミナルの文字コードを判別してとか切り替えられればいいんですが
さすがに無理ですよね。
お偉いさんだけじゃなくてユーザーも使うんで文字コードって混在してるんですよね。
標準的な文字コードってどんなの使われてるのかはよくわかりませんが
まぁ無理って方向で進めていこうかと思います。
ありがとうございます。
209:login:Penguin
09/08/03 09:57:12 pu8sCNil
ローマ字でいいんじゃね。
210:login:Penguin
09/08/03 10:31:49 3RzsW8i/
exciteのわけわからん翻訳貼り付けるのは
ユーザーが可哀想だろw
自分の英語に自信が持てないなら、いっそ日本語の方がいいんじゃね。
そのディストリビューションで日本語選んでインストールしたとき
デフォルトになる文字コード選んどけば
誰も文句いわないんじゃね?
自分でLANGいじるようなやつは、文字化けのなおしかたぐらい知ってるだろ。
211:login:Penguin
09/08/03 10:52:42 3RzsW8i/
なんか変だ。
ユーザー作ったときデフォルトでなってる文字コードにしとけばいいんじゃね、だ。
LANGとかLANGUAGEとかいじるやつは文字化けの直し方ぐらい知ってるだろ。
デフォルトがCとかenとかなら…シラネ
212:login:Penguin
09/08/04 12:15:50 OyyR8ocQ
動けばいいって程度で作ってたものをどうやら他にもリリースするとかで見栄えをよくしろと言われました。
bashで文字を寄せたり全体を中央寄せにしたりするコマンドとか関数ってありますか?
213:login:Penguin
09/08/04 12:53:29 h5jokg18
COLUMNS見て計算する。
いっそwhiptailやdialog使うとかな。
214:login:Penguin
09/08/04 21:45:57 1cLNSoFd
printf ?
あとよく知らないけど fmt とか groff とか?
215:212
09/08/04 22:25:14 OyyR8ocQ
>>213
文字数はじき出して何とか出来ました。
あとスクリプトの中で
/etc/rc.d/network restart
といれているんですが、手動で/etc/rc.d/network restartすると大丈夫なんですが
#!/bin/bash
/etc/rc.d/network restart
とかで実行するとshould not be world writeable users cannnot control this device
と表示されて実行されていないようです。
権限の問題かと思い色々と変えてみましたがダメでした。
なにか他に注意すべき点があればご教示いただければと思います。
216:login:Penguin
09/08/04 22:32:07 ACq2bWOB
> 色々と変えてみましたがダメでした。
そりゃダメだろうな。
217:login:Penguin
09/08/04 22:49:56 p9z/5JkD
もしかして: should not be world writable users cannot control this device
218:212
09/08/05 09:09:45 Sso6+/38
>>217
すいません
スペル間違えてました。
217で記述されている内容が表示されておりました。
219:login:Penguin
09/08/05 09:38:19 gztfuFMV
いろいろgrepしたけどうちのマシンには
そのメッセージを吐くプログラムは入ってないようだ。
ディストリビューションと、どのプログラム/スクリプトが
そのメッセージ出してるか書けば?
ちなみにそのスクリプトはrootで実行してるんだよね?
220:212
09/08/05 10:47:05 Sso6+/38
>>219
すいません。
CentOS5.3 です。スクリプト内容は膨大なのですがエラーが出る場所は
/etc/rc.d/init.d/network restart
の部分になります。
実行しているのは別のユーザーでてっきりrootで実行してるもんだと思ったら別ユーザーで実行していたようです。
ファイルは
-rwxr-xr-x 1 root root 1234 7月 31 00:00 test.sh
実際に実行していたログインユーザーはtestというユーザーでした。
上記の事とエラー内容から権限がないために出ていると思います。
testユーザーでもrestartをかけれる権限を付与するか、testユーザーを
rootのグループに入れるような事が出来れば出来そうな気もしますが自分には少しレベルが高そうですね。
221:login:Penguin
09/08/05 13:12:18 gztfuFMV
のりピーが心配で仕事が手に着かない。
init.dのスクリプトは一般ユーザーが使うようには出来てない。
仮にパーミッション緩めまくって実行できるようにしても、
インターフェースの設定はuid=0じゃないと出来ないので
どこかで権限を昇格するかrootのプロセスに引き継ぐかしないと行けない。
具体的な実装方法の話に入ると、
そもそも一般ユーザーがインターフェースupdownする必要が
本当にあるのかという事から検討したくなって
長くなりそうなのでとりあえずがんばれと言っておく。
222:219
09/08/05 13:35:06 Sso6+/38
>>221
ありがとうございます。
ネットワークの設定を一般ユーザー(といっても特定のユーザーのみですが)
が出来るようにしたいと思っております。
そんなに頻繁にあるわけではないのですがroot権限を持ったものが常駐しているわけでは
ないということもありましたのでネットワーク周りだけを触るスクリプトを組みました。
権限の昇格やrootのプロセスをシェルスクリプトで引き継げるようであれば行いたいと思います。
ご存じのかたおられましたらアドバイスいただけると助かります。
223:login:Penguin
09/08/05 14:02:44 gztfuFMV
そのぐらいならsudoでどぞ。
224:login:Penguin
09/08/05 21:35:22 dz5dEKuL
>>222
ifcfg-eth0とかに「USERCTL=yes」でroot以外でもできそう
URLリンク(www.redhat.com)
225:login:Penguin
09/08/08 16:14:34 Nnr+lme9
rebootやshutdownはrootでなくても使用できるんでしょうか?
試しにrootではないsampleユーザーで
#!/bin/bash
reboot
を実行させたら再起動かかったんですが、てっきり弾かれるかパスワード聞かれると思ってました。
上のほうで権限がどうのこうのって質問があったんですが、OSとかによって違うってことですかね。
226:login:Penguin
09/08/09 11:26:19 1P+Q9AS+
そんなのあんの?
rebootやshutdownは管理者権限だろ
227:login:Penguin
09/08/09 11:34:22 IkGSFCMm
sudoersに書いてたとしてもsudo rebootじゃないと駄目だろうし
何だろ
228:login:Penguin
09/08/09 11:46:08 0aZIEnpY
>>225
rebootはできてもshutdownはできないんじゃない?
229:login:Penguin
09/08/09 12:55:17 aaFRdfIZ
ディストリ次第じゃないんですか。Debian ではできないみたいだけど、Vine では
一般ユーザでも shutdown できる (Red Hat 系はみんなできるのかも)。Vine の場合、
/usr/bin/shutdown はシェルスクリプトで、中で halt や reboot を呼び出している。
そして、この halt や reboot はリンクで、実体は /usr/bin/consolehelper。
あとは、man consolehelper ですね。
230: ◆Zsh/ladOX.
09/08/09 14:01:11 /ZeBm1qf
んーできない。
% cat /etc/redhat-release
CentOS release 5.3 (Final)
% id
uid=500(hage) gid=500(hage) 所属グループ=500(hoge) context=user_u:system_r:unconfined_t
% /sbin/shutdown -r now
shutdown: you must be root to do that!
% /sbin/reboot
reboot: must be superuser.
231:229
09/08/09 14:18:48 PRPNML+y
>>230
CentOS の場合、/sbin/shutdown じゃなくて、/usr/bin/shutdown はないんですか。
だとしたら、Vine だけなのかな。たしか、「一般ユーザに電源をぶち切られるより、
shutdown を許した方がマシだ」という考えだったと思います。
232: ◆Zsh/ladOX.
09/08/09 14:27:23 /ZeBm1qf
% /usr/bin/shutdown -r now
zsh: そのようなファイルやディレクトリはありません: /usr/bin/shutdown
% locate shutdown|grep bin
/sbin/shutdown
/usr/bin/pm-shutdown
なんで無いね。
233:login:Penguin
09/08/09 16:35:29 CB8fkMOP
# ながいこと Vine しか使ってないから他のディストリのことはわからない。
>>225
シェルスクリプトの "reboot" を
/sbin/reboot とか /usr/bin/reboot とかに書き換えてみると動作に違いがでると思う。
> 権限
pam って仕組みで管理されてると思う。/etc/pam.d/ 以下のファイル。
>>225-232
Vine だと usermode っていうパッケージに
/usr/bin/consolehelper
/usr/bin/halt
/usr/bin/poweroff
/usr/bin/reboot
/usr/bin/shutdown
/usr/sbin/userhelper
とかいったものが入ってる。usermode-gtk ってパッケージもある。
Description :
usermode パッケージには、一般ユーザが設定されたプログラムをスーパーユー
ザとして実行できるようにするユーザヘルパープログラムが含まれています。
234:login:Penguin
09/08/09 22:04:40 ivLlFzN/
シェルスクリプトでコマンド番号を選択したりIPを入力したりするツールつくったんですが、
ctrl+cやIP入力にコマンドを入れてみて実行されるかどうかといった確認はしてみましたが
それ以外にセキュリティやテストしてみるといいことなどあれば教えてください。
235:login:Penguin
09/08/09 22:52:55 C0J3iJDt
スクリプト晒して!
236:login:Penguin
09/08/09 23:03:57 IVuBeWRI
晒されても答えようがないような。
C-c が入れられたときの正しい処理とか本人でないと知らないし。
237:234
09/08/09 23:20:52 ivLlFzN/
>>235
IP以外の文字が入れられたらといった時の処理はまだいれてませんが
下記のような事を繰り返してconfを書き換えて再起動するという感じです。
read newip
$newip="IPADDR=""$newip"
sed -i "s/$oldip/$newip/g" /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/rc.d/init.d/network restart
menufunc
238:login:Penguin
09/08/10 00:04:28 CdStD5IJ
>>227
sidを知らんのか。
239:login:Penguin
09/08/10 01:28:19 qfqY90wM
a
b
c
...
と一語ごとに改行された一つのテキストファイルを
a b c d e f g h i j k
l m n o ...
と言うように10列ごとに改行するテキストにしたいと思い、
スクリプトを組んだのですが動作が遅く、重くなってしまって困惑しています
どなたかお知恵をお貸しくださると助かります。
#/bin/bash
FILE=$1
LINENUM=`expr 1`
OFILE=/dev/shm/hoge
while read line
do
if [ $LINENUM -lt 10 ];then
echo -n "$line" >> $OFILE
echo -n -e "\t" >> $OFILE
LINENUM=`expr $LINENUM + 1`
else
echo "$line" >> $OFILE
LINENUM=`expr 1`
fi
done <$FILE
240:login:Penguin
09/08/10 01:50:52 vmT7yJCz
#!/bin/sh
FILE=$1
OFILE=/dev/shm/hoge
LINENUM=1
while read line
do
if [ $LINENUM -lt 10 ]
then
echo -n "$line"
echo -n -e "\t"
LINENUM=$(( LINENUM + 1 ))
else
echo "$line"
LINENUM=1
fi
done <$FILE >$OFILE
241:login:Penguin
09/08/10 02:00:08 qfqY90wM
>>240
ありがとうございます! 処理が覿面に早くなりました!
いちいち書き出さないで最後に一括して書けばよかったんですね…
242:login:Penguin
09/08/10 02:10:30 vmT7yJCz
>>241
たぶんexprの呼び出しのほうがコストが高いよ
243:login:Penguin
09/08/10 12:26:13 5IcilgjJ
自分で動かすだけならこれでいいやと思ったら、そんだけで改善できたのか…
----
#!/bin/sh
FILE=$1
OFILE=/dev/shm/hoge
sed -e '$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;s/\n/\t/g' <$FILE >$OFILE
244:login:Penguin
09/08/10 15:31:57 oeYkUDqx
数字の判定は[0-9]と正規表現使って判定してるんですが
IPアドレスかどうかの判定が出来るような正規表現ってあるんでしょうか。
無い脳みそひねってもいい案が出なかったのであれば教えてください。
245:login:Penguin
09/08/10 15:41:18 86RyWVEw
>>244
ググレばサンプルたくさんあるよ。
246:login:Penguin
09/08/10 15:59:59 BhLss4cE
お前ならどうするかを教えてやりゃーいいじゃん。
247:login:Penguin
09/08/10 16:10:10 sXOG+s90
PowerShell神すぎだろ。
このスレ見てると原始人が石斧振り回してるように見えてくるぜ。
248:login:Penguin
09/08/10 17:33:20 6xgY8KY4
僕には端末エミュとシェルの違いもわかってないマヌケが見えます。
249:login:Penguin
09/08/11 00:20:03 GKnhcfe3
>>247
型の概念が邪魔。
コマンドが無駄に長い。
重い。
250:login:Penguin
09/08/11 00:27:50 4esITO9l
Macのbashもここでいいんでしょうか…
OSは10.5.8です。
test.shを
----
#!/bin/sh
echo $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12
----
とします。
./test.sh 1 2 3 4 5 6 7 8 9 10 11 12
と実行すると素直に
1,2,3,4,5,6,7,8,9,10,11,12
となるのに
./test.sh 1.0 2 3 4 5 6 7 8 9 10 11 12
と小数を入れて実行すると
1.0,2,3,4,5,6,7,8,9,1.00,1.01,1.02
となってしまうのはなぜでしょうか。
251:login:Penguin
09/08/11 00:35:21 XDXqx0+D
./test.sh a 2 3 4 5 6 7 8 9 10 11 12
としてごらんなさい
252:login:Penguin
09/08/11 01:01:07 4esITO9l
>>251
な、な、な、なんでしかこりは!
はっ!そうか!…
$1,$2...って書いてあるサイトが多いからけっこうな個数使えるのかと思ってました。
ありがとうございました。
253:login:Penguin
09/08/11 01:07:27 e9ttEiKp
echo $1,$2,$3,$4,$5,$6,$7,$8,$9,${10},${11},${12}
254:login:Penguin
09/08/11 02:19:40 4esITO9l
>>253
$(10)は試したのに${10}は試してませんでした…orz
ありがとうございます。
>>251を受けてshiftを使う対処法を知りました。
10個以上の引数を扱いたいという目的においては、shiftと${10}の善し悪しはあるんでしょうか。
255:login:Penguin
09/08/11 02:26:00 MclIhwRq
こーいうトラップがあるからperlに逃げる人が多い
256:login:Penguin
09/08/11 02:52:40 e9ttEiKp
>>254
$ man bash
/位置パラメータ
2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({}) で
囲まなければなりません。
よって${n}が正解だと思います
257:login:Penguin
09/08/11 05:29:40 4esITO9l
>>255
僕はこのツンデレな感じが好きです。
>>256
やっぱりそうですよねw
正式名称は位置パラメータかー"引数"という呼び方しか認識してませんでした。
258:sage
09/08/11 16:31:12 ggsX9yQb
topコマンドの内容をテキストに書き出したいんですが
top >> /tmp/top.test
とした場合に延々と書き込まれていきます。1度だけtopの内容を取得したいんですが
どのように変更すればよいでしょうか?
259:login:Penguin
09/08/11 16:36:53 zgCywBrU
>>258
man top
260:258
09/08/11 17:33:42 ggsX9yQb
>>259
すいません。
manにありました。
現在topの内容をテキストに書き出して、テキストをsedで切り出して表示してるんですが
コマンドの戻り値を求めたいと思っておりますが
hogera=$(top -i -n1)
cpu=`sed -n '/Cpu(s)/p' "$hogera"`
こうすると「読み込めません: ファイル名が長すぎます」と出ます。
本来ファイル名の指定なのでうまくいかないのはあたりまえなのですが、
ファイルに書き出す事無くスマートに切り出す方法がありましたら教えてください。
261:login:Penguin
09/08/11 17:42:23 zgCywBrU
>>260
いまいちやりたいことがわからんが
cpu=`top -b -n1 | grep '^Cpu'`
か?
262:258
09/08/11 17:54:30 ggsX9yQb
>>261
ありがとうございます。
そうか、grepすればいいだけの事ですね。
どうやら無意味にテンパってしまってるようです。
すいません。最後に1つだけ疑問に思っていることがあるのですが
シリアルコンソールで見る画面は横70文字にしとけって言われたんですが
何かそういった規格かなにかあるんでしょうか。検索してみてもそられしいものが
引っかからなかったんですが、70文字だとなかなか厳しいものがあるので
特に根拠のない文字数であるなら超えても構わないのではないかと思っております。
たびたびの質問で申し訳ありませんが、識者の方でご存じの人いたら教えてください。
263:login:Penguin
09/08/11 17:55:36 zgCywBrU
>>262
スレ違い。
264:258
09/08/11 18:03:42 ggsX9yQb
>>263
解答ありがとうございます。
スレ違いとのことですが、これはどういったスレで質問するのがよろしいのでしょうか。
シェルスクリプトの表示だったのでこちらに投げさせていただいたのですが
どういった方面のスレかだけでも助言いただけないでしょうか。
265:login:Penguin
09/08/11 18:07:41 zgCywBrU
>>264
くだらねえ質問はここに書き込め! Part176
スレリンク(linux板)
266:login:Penguin
09/08/12 00:03:08 0UM4nevW
>>263
きびしー
267:login:Penguin
09/08/12 00:05:03 I1tOnENr
>>264
VGAとかSVGAとか解像度で違うっての聞いたことある。
もしかしたら全然違うかもしれんがそういうときはきっと誰か激しく突っ込んでくれるはず。
268:login:Penguin
09/08/12 00:10:31 u9/Em9/R
>>267
ぜんぜん違う話。
269:login:Penguin
09/08/12 05:02:52 0UM4nevW
$ cat<<<h$(cat<<<e$(cat<<<l$(cat<<<l)o)\!)
270:login:Penguin
09/08/12 14:49:33 /9MBM8gW
特定文字列が含まれてるかどうかの判断って出来ますか?
sedとかで文字の置き換えとか入れ替えが出来る程度のレベルです。
dg=`route | grep '192.168.24.1'`
でdgの中にug含まれているかどうかを確認したいと思ってます。
271:login:Penguin
09/08/12 14:51:54 u9/Em9/R
>>270
route | grep '192.168.24.1' | grep ug
ってこと?
272:login:Penguin
09/08/12 14:59:52 LZ159q8G
>>270
case "${dg}" in
*ug*)
# match
;;
*)
# not match
;;
esac
273:270
09/08/12 15:13:57 /9MBM8gW
>>271
そうでした。パイプでさらにgrepすればよかったですね。
こちらの方法でも出来ました。
ありがとうございます。
>>272
判定までしていただいて助かります。
こちらの方法で出来ました。
ありがとうございます。
まだまだよくわかってないですがここで質問しなくてもすむように勉強したいと思います。
274:login:Penguin
09/08/12 18:46:07 jKHDnL7q
シェルスクリプトでサーバーのチェックをしてます。
それ自体はcronで定期的に行ってますが、これと併せて定期的にデータを送信出
来ればと考えてます。
実際にはチェックして引っかかったサーバーにzipを送り、サーバーは時間が来
れば勝手に実行するという感じですが、シェルスクリプトでzipデータを別サー
バーに送るとかいうことが可能でしょうか。
可能ならどんな関数を使えばよいかアドバイスもらえないでしょうか。
初歩的な質問かと思いますが宜しくお願いいたします。
275:login:Penguin
09/08/12 18:54:50 8iPFdi1w
金玉 → >>274
。゜( ゜^∀^゜)゜。アーッハハハハノヽノヽノヽノ\ / \
276:login:Penguin
09/08/12 21:03:12 0s7n/+F7
>>274
sshの鍵交換してパスワードを聞かれないようにしておいて
scpなりrsyncなりで送れば良いと思う。
277:login:Penguin
09/08/12 23:35:06 tCsvaW+m
>>239
これはどう?
#/bin/bash
FILE=$1
OFILE=/dev/shm/hoge
xargs < $FILE -n10 | tr " " "\t" > $OFILE
278:login:Penguin
09/08/12 23:40:23 tCsvaW+m
>>277 じこれす
まちがった
xargs < $FILE -n10 | tr ' ' \\t > $OFILE
です。
279:login:Penguin
09/08/12 23:56:35 0UM4nevW
すげー
280:login:Penguin
09/08/14 09:45:57 vesWTwzQ
変数COUNTER の値が10より小さければ
MMF0009 と表示
100より小さければ
MMF0099 と表示
1000より小さければ
MMF0999 と表示
1000ならば
MMF1000 と表示
というスクリプトをcase 文を用いてすっきり書きたくて下記の通り書きましたが、
算術式及び、case の構文の違いでしょうか間違っています、ご教示願えないでしょうか。
#!/bin/bash
COUNTER=0
DIGIT3=000
DIGIT2=00
DIGIT1=0
while [ ${COUNTER} -lt 999 ]
do
case "$COUNTR" in
`expr ${COUNTER}` -lt 10) echo "MMF$DIGIT3$COUNTER";;
`expr ${COUNTER}` -lt 100) echo "MMF$DIGIT2$COUNTER";;
`expr ${COUNTER}` -lt 1000) echo "MMF$DIGIT1$COUNTER";;
`expr ${COUNTER}` = 1000) echo "MMF$COUNTER";;
esac
COUNTER=`expr ${COUNTER} + 1`
done
281:login:Penguin
09/08/14 09:56:51 HEs3iRVc
>>280
manpageより
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
A case command first expands word, and tries to match it against each pattern in turn,
using the same matching rules as for pathname expansion (see Pathname Expansion below).
282:login:Penguin
09/08/14 10:03:19 GRUhI9LP
こういうこと?
seq -f 'MMF%04.f' 0 1000
283:login:Penguin
09/08/14 15:19:52 VHMVUNf7
>>280
すっきり書いてみた。
#! /bin/sh
COUNTER="$1"
DIGIT1=000
DIGIT2=00
DIGIT3=0
DIGIT4=
eval 'echo "MMF${DIGIT'"${#COUNTER}"'}${COUNTER}"'
284:283
09/08/14 15:31:27 VHMVUNf7
printfがあれば更にすっきり。
#! /bin/sh
COUNTER="$1"
printf 'MMF%04d\n' "${COUNTER}"
285:login:Penguin
09/08/14 23:08:31 vesWTwzQ
>>280 です
皆さんどうもありがとうございます。
C のswitch〜case構文のようなものかと勘違いし、case の使い方が全然間違ってましたし他にも細かなミスがありましたが、調べてこんな感じで期待通りの振る舞いができました
case $COUNTR in
?)
echo "MMF$DIGIT3$COUNTER"
??)
echo "MMF$DIGIT2$COUNTER"
??)
echo "MMF$DIGIT1$COUNTER"
1000)
echo "MMF$COUNTER"
esac
それから、seq とかeval の使い方も調べて見ます、どうもありがとう。
286:login:Penguin
09/08/14 23:17:06 vesWTwzQ
>>285です
もう一つお願いします。
シェルスクリプト というのは、そのような仕組みになってるんでしょうか?
単純にインタプリタ型の言語なのでしょうか、自分としてはそうではない気がします
なぜなら、sudo コマンドを使う場合、シェルスクリプトの場合、スイッチ を付加して実行しますが
それは直接、カーネルに対してオペレーションしているような気がするのですが?詳しい方が居られましたら教えてください。
287:login:Penguin
09/08/14 23:19:32 vesWTwzQ
×シェルスクリプト というのは、そのような仕組みになってるんでしょうか?
○シェルスクリプト というのは、どのような仕組みになってるんでしょうか?
288:login:Penguin
09/08/14 23:40:04 4UQz02FW
>>286
>それは直接、カーネルに対してオペレーションしているような気がするのですが?
気のせいです。
手始めにforkとかexecvとか調べたらいいんじゃね?
289:login:Penguin
09/08/14 23:56:56 cgRLII5a
インタプリタだよ。
sudoは、シェルとは別のプログラムです。
シェルスクリプト中で、シェルのビルトイン関数やらで無いコマンドを書くと、
シェルは、その名前のプログラムを探してそれを実行しようとします。
上に出てきた中で言うと、
while case echo evalはシェルのビルトイン関数(?)で
seq printf sudoは外部プログラムです。
「カーネルに対してオペレーションしている」云々は、
言っている意味が良く分かりません。
全ての意味のあるプログラムは、直接的にしろ間接的にしろ、
カーネルと相互作用するはずですから。
290:login:Penguin
09/08/15 01:56:48 niIslDjl
while, case と echo, eval はくくりが別だけどな。
type while とか type echo とかやってみ。
291:login:Penguin
09/08/15 19:58:45 4JYHgxvW
>>286 です
皆さんThxです。
292:login:Penguin
09/08/15 23:51:22 O3QLwBfx
read packetcount
read port
tcpdump -n -c$packetcount -s1500 -vvv -X port $port
こんな感じでパケット見てるんですが、1パケットごとに色を変えることは出来ますか?
文字色の指定方法はわかるんですが、そういった指定方法や手法があればおしえてもらえないでしょうか。
なければおとなしくあきらめます。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5367日前に更新/221 KB
担当:undef