シェルスクリプト総合 その25©5ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2015/08/14(金) 23:42:01.51□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その24
http://peace.2ch.net/test/read.cgi/unix/1415634843/
0346名無しさん@お腹いっぱい。
2015/12/22(火) 00:13:25.17とエスパー解釈した上で
usr=`id | cut -d" " -f 1 | sed -e "s/^.*(\(.*\)).*$/\1/g"`
の下にでもこれを挿入
if str=$( ps T -o user,comm | grep [s]udo )
then
usr=$( echo "$str" | cut -d ' ' -f 1 )
fi
0347344
2015/12/22(火) 00:15:04.92回答ありがとうございます。
該当部分をid -unやwhoamiに変更しても状況に変化は見られませんでした。
何か間違った書き方をしてしまっているのでしょうか。
0348344
2015/12/22(火) 00:22:29.80回答いただきありがとうございます。
こちらのほうで実現できました。
psの方から取得するということでしょうか。
whileループの中でidで取得していたので更新されると思っていたのですが
そうでもないようですね。
なぜかは理由はわかりませんが…。
回答いただきありがとうございました。
0349名無しさん@お腹いっぱい。
2015/12/22(火) 00:45:28.4910995 pts/0 Ss 0:00 bash
21436 pts/0 S 0:00 \_ /bin/bash ./printUser.sh
8101 pts/0 S 0:00 | \_ sleep 1
8065 pts/0 S 0:00 \_ sudo sleep 10
8066 pts/0 S 0:00 | \_ sleep 10
8102 pts/0 R+ 0:00 \_ ps Tf
対話シェル bash の下でスクリプトが別プロセスで起動されています
sudo sleep 10 を起動していますが、これも別プロセスです
0350名無しさん@お腹いっぱい。
2015/12/22(火) 08:00:39.33それを使う手もある
以下の内容を適当なファイル(たとえば/etc/bash.display_user)に書いて
D=$((`tput cols` - 8))
POS="`tput cup 1 $D`"
COLOR="`tput setaf 4; tput smso`"
NORMAL="`tput sgr0`"
PROMPT_COMMAND='echo -ne "\033[s$POS${COLOR}${USER}${NORMAL}\033[u"'
/etc/bash.bashrcか自分の.bashrc、rootの.bashrcで
. /etc/bash.display_user
してやればいい
0351348
2015/12/23(水) 08:30:02.70その後の回答を、試してみていろいろとわかりました。
Linuxなどにおける動作で幾つか思違いしているところもあり勉強になりました。
ありがとうございました。
0352名無しさん@お腹いっぱい。
2015/12/23(水) 23:18:50.990353名無しさん@お腹いっぱい。
2015/12/23(水) 23:40:21.980354名無しさん@お腹いっぱい。
2015/12/24(木) 04:08:04.270355名無しさん@お腹いっぱい。
2015/12/24(木) 12:24:50.59コンニチワ
0356名無しさん@お腹いっぱい。
2015/12/24(木) 18:48:12.28ワロタw
0357名無しさん@お腹いっぱい。
2015/12/24(木) 18:59:35.38>>339
>>336です。
LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use HTTP::Cookies;
ggrば出ます。
スレURIの最後の数字列、タイトルから検索して常に最新の数字列を内で取得するようにして、現状、
echo "ほげほげ" | 2ch_put.pl $SURE
で、投稿できるようにしてみた。嵐はしてないよ。
0358名無しさん@お腹いっぱい。
2015/12/24(木) 19:23:37.34常に0のような気がするが、そうじゃないんだな。
str=aaa や str="" は0だけど、失敗すると1か。
勉強になりますた
0359名無しさん@お腹いっぱい。
2015/12/25(金) 00:19:36.63thanks
0360名無しさん@お腹いっぱい。
2015/12/27(日) 12:03:43.83いつファイルがうまくreadされるタイミングとか
それから関係ないんですけどsedの-iってPOSIX非準拠ですか?
0361名無しさん@お腹いっぱい。
2015/12/27(日) 12:23:52.450362名無しさん@お腹いっぱい。
2015/12/27(日) 15:36:01.26いつって言ってもgrepがreadした時に読んでるのだが…。
たぶん分かってないのが、unixではファイルをオープンした状態でファイルを削除できるってこと
その場合ディレクトリエントリは消えるがファイル自体は残っているので
ファイルのread/writeは変わらず出来る
0363名無しさん@お腹いっぱい。
2015/12/27(日) 19:29:04.42外のシェルがopenする
中のシェルでrmがunlinkする
中のシェルがopenしてfileができる
grepがreadしてwriteする
grepがexitしてどっちもcloseする
0364名無しさん@お腹いっぱい。
2015/12/27(日) 19:29:18.22しかしエントリから消えたハードディスクのブロックは再利用可能な状態なわけですよね?
もしそうなら二回目にオープンしたとき領域が重なってしまうことはないのですか?
0365名無しさん@お腹いっぱい。
2015/12/27(日) 19:37:36.75closeして誰も参照しなくなるまではi-nodeも含めて再利用されないよ
0366名無しさん@お腹いっぱい。
2015/12/27(日) 19:56:03.56そうなのですか!初めて知りました
ありがとうございます!すっきりしましたよ!
0367名無しさん@お腹いっぱい。
2016/01/01(金) 11:20:57.19wget -O - 'http://artscene.textfiles.com/vt100/new_year.vt'| while IFS= read -r line; do echo "$line"; sleep 0.08; done
wget -O - 'http://mirror.bagelwood.com/textfiles/art/newyears.art'| while IFS= read -r line; do echo "$line"; sleep 0.08; done
0368名無しさん@お腹いっぱい。
2016/01/01(金) 22:44:41.53>>367
素晴らしい!
0369名無しさん@お腹いっぱい。
2016/01/02(土) 22:52:05.390370名無しさん@お腹いっぱい。
2016/01/14(木) 11:46:10.89テキストファイルだけのデータベースを作ろうと思ってます
どんなシェルスクリプトを書けばいいと思いますか
皆さんのお知恵をお貸しください
あとシス管系女子に登場するみんとちゃんのスリーサイズが分かりません
知っている人がいたら教えて下さい
よろしくお願いいたします
0371名無しさん@お腹いっぱい。
2016/01/14(木) 12:18:20.240372名無しさん@お腹いっぱい。
2016/01/14(木) 12:37:09.510373名無しさん@お腹いっぱい。
2016/01/14(木) 13:49:41.310374名無しさん@お腹いっぱい。
2016/01/14(木) 19:07:54.470375名無しさん@お腹いっぱい。
2016/01/14(木) 19:32:14.79cshでいいリファレンスはありませんか?
ネットが使えないのでWebページは無理です。
0376名無しさん@お腹いっぱい。
2016/01/14(木) 20:23:34.080377名無しさん@お腹いっぱい。
2016/01/14(木) 22:27:43.690378名無しさん@お腹いっぱい。
2016/01/14(木) 22:57:32.14もう30年近く前のことだけど…
それにしても開発環境がcshでネットが使えないって、ある意味すごいと思うw
0379名無しさん@お腹いっぱい。
2016/01/14(木) 23:03:15.63ネットがダメなら本しかないじゃないか
いま流通してるのって
http://www.amazon.co.jp/dp/4893620290
くらいかな
0380名無しさん@お腹いっぱい。
2016/01/14(木) 23:24:27.930381名無しさん@お腹いっぱい。
2016/01/14(木) 23:24:38.540382名無しさん@お腹いっぱい。
2016/01/15(金) 00:15:28.220383名無しさん@お腹いっぱい。
2016/01/15(金) 11:42:41.05もともとのボケからすべってるじゃん
0384名無しさん@お腹いっぱい。
2016/01/15(金) 14:57:47.220385名無しさん@お腹いっぱい。
2016/01/15(金) 15:21:01.14マスタリングcshは目の前に転がってるが、他にも合った気がするが
みつからない。
0386名無しさん@お腹いっぱい。
2016/01/15(金) 15:29:47.22ここの住人がやったら半殺し
0387名無しさん@お腹いっぱい。
2016/01/15(金) 15:51:51.830388名無しさん@お腹いっぱい。
2016/01/15(金) 16:08:50.970389名無しさん@お腹いっぱい。
2016/01/15(金) 21:52:13.77SunOS でログインシェルは、csh がデフォで tcsh に切り替え
0390名無しさん@お腹いっぱい。
2016/01/15(金) 21:54:24.420391名無しさん@お腹いっぱい。
2016/01/15(金) 22:29:29.27でも短いスクリプトなら、配列が使えたりとかshより便利なケースがないでもない
>>375
manは入ってないの?
0392名無しさん@お腹いっぱい。
2016/01/17(日) 00:38:52.85bashは使えるよね、二次元配列も
0393名無しさん@お腹いっぱい。
2016/01/17(日) 13:36:42.66こういったポータビリティに関することを一発でチェックするための自動テストスイートってないものかね。
それがあればシェルの比較表もすぐに作れると思うんだが。
0394名無しさん@お腹いっぱい。
2016/01/17(日) 15:16:57.76>>6 というか checkbashisms
http://manpages.ubuntu.com/manpages/wily/en/man1/checkbashisms.1.html
0395名無しさん@お腹いっぱい。
2016/01/21(木) 07:44:44.20GNU のコマンドは機能拡張しまくっていて、UNIX 哲学が云々
grep -o -p とかダメだろうな(と思って調べると、OpenBSD は -o を持っているのか)
http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/egrep.1?query=grep
0396名無しさん@お腹いっぱい。
2016/01/21(木) 09:51:46.270397名無しさん@お腹いっぱい。
2016/01/21(木) 21:38:36.72-hでヘルプ、-vでバージョン見るくらいは統一してほしい
0398名無しさん@お腹いっぱい。
2016/01/22(金) 09:43:42.93ほんとになw
0399名無しさん@お腹いっぱい。
2016/01/22(金) 10:23:07.080400名無しさん@お腹いっぱい。
2016/01/22(金) 21:11:00.15今後も長く使われて行く事を考えると、ある程度統一してほしいなあ
特定の環境変数が定義されている時に限り
統一されたオプションにするとか
0401名無しさん@お腹いっぱい。
2016/01/23(土) 00:27:07.840402名無しさん@お腹いっぱい。
2016/01/23(土) 16:57:11.77でも今度から意識してみよっと
ちょっと暇つぶし
list of coreutils (Linux, depends dpkg)
dpkg -L coreutils | sed -ne '\@bin/@s@^.*bin/@@p' | xargs man -f
whatis $( which who )
0403名無しさん@お腹いっぱい。
2016/01/23(土) 19:06:44.06http://www.gnu.org/software/coreutils/manual/html_node/Common-options.html
‘--help’ ヘルプ
‘--version’ バージョン
‘--’ オプションリスト区切り
0404名無しさん@お腹いっぱい。
2016/01/23(土) 19:21:27.03そういうことじゃないだろ…
0405名無しさん@お腹いっぱい。
2016/01/24(日) 00:23:36.03GNU系コマンド以外には通用しないケースある
0406名無しさん@お腹いっぱい。
2016/01/28(木) 05:58:34.66http://i.stack.imgur.com/oSyyX.png
元をちょっといじりました。少し無駄が減ったかな
while ! { IFS=:; ls $PATH; } | shuf -n 1 | xargs 2> /dev/null whatis -ls 1,6,8; \
do :; done |
cowsay -f $( ls /usr/share/cowsay/cows | shuf -n 1 )
元ネタ
Are there any games which can train people to learn terminal commands? - Ask Ubuntu
http://askubuntu.com/questions/337300/are-there-any-games-which-can-train-people-to-learn-terminal-commands
> cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2>/dev/null | shuf -n 1)
0407名無しさん@お腹いっぱい。
2016/01/28(木) 06:13:04.210408名無しさん@お腹いっぱい。
2016/01/28(木) 08:36:56.70BSD系ならsort -Rで代替できるかな。
0409名無しさん@お腹いっぱい。
2016/01/28(木) 09:53:14.50以下のコマンドより冴えた方法ある?
pgrep -f 'sh script.sh' | xargs kill
これで不満なのはシェルスクリプトが実行されてなかった場合
USAGEが出ちゃうところくらい
0410名無しさん@お腹いっぱい。
2016/01/28(木) 11:04:04.770411名無しさん@お腹いっぱい。
2016/01/28(木) 11:35:34.210412名無しさん@お腹いっぱい。
2016/01/28(木) 11:50:19.160413名無しさん@お腹いっぱい。
2016/01/28(木) 16:03:14.05帰ってから試してみる
0414名無しさん@お腹いっぱい。
2016/01/30(土) 08:10:48.00#!/bin/sh
while :
do
# Get Time
time=
0415名無しさん@お腹いっぱい。
2016/01/30(土) 08:14:07.46time=$(tail -n4 check_date.dat)
COLOR=`tput setaf 5; tput smso`
echo -n -e "\033[s"
tput cup ${TCUP_CNT}
NORMAL=`tput sgr0`
echo -n $COLOR$time$NORMAL
echo -n -e "\033[u"
# Interval
sleep 1
done
check_date.dat
tokyo 23:23:23
Mexco 12:12:12
frans 05:50:05
といったデータとなります。
取得方法はいくつかかえてみましたがダメでした。
tputで改行表示する方法があればアドバイスいただけると助かります。
0416名無しさん@お腹いっぱい。
2016/01/30(土) 09:44:44.08気になる点を上げておいた
echo -n $COLOR$time$NORMAL
だと、エスケープされていないので、$time に含まれる改行文字がスペースに置換される
echo -e は bash だろうから、#!/bin/bash にする
新しく書くスクリプトでは `...` よりも $(...) を使うのが望ましい
ループ中で、変わらない変数を定義しない
(確か sgr0 がリセットかなんかで変わらなかったとして)
0417名無しさん@お腹いっぱい。
2016/01/30(土) 09:50:10.42> echo -e は bash だろうから、#!/bin/bash にする
#!/bin/sh のままで printf を使う方が良いかな
0418名無しさん@お腹いっぱい。
2016/01/30(土) 09:50:11.74smb上のNASにあるファイルをSDカードにコピペしたいけど、コピーする順番がファイル名昇順でないと不具合が出るので、エクスプローラーではダメなんです。
cpコマンドにNASにあるファイルを指定する方法を教えてください。
0419名無しさん@お腹いっぱい。
2016/01/30(土) 10:03:02.46find sort awk cut xargs 等を組み合わせる
0420名無しさん@お腹いっぱい。
2016/01/31(日) 10:50:47.29topコマンドやuptimeコマンドで得られるload average
ですが、特定の顧客向けにWebで情報ながしてるサーバーの
それが、普通で10.00、ひどいときには30.00とかになったり
します。
このload average、つまり平均負荷が無名数ですが、何を表して
いると考えたらよいでしょうか? dBって事はないですよね。。。
0421名無しさん@お腹いっぱい。
2016/01/31(日) 11:10:19.25待ち行列の長さ
0422名無しさん@お腹いっぱい。
2016/01/31(日) 14:36:00.53http://d.hatena.ne.jp/keyword/%A5%ED%A1%BC%A5%C9%A5%A2%A5%D9%A5%EC%A1%BC%A5%B8
0423名無しさん@お腹いっぱい。
2016/01/31(日) 16:34:32.83ありがとうございます。
>ロードアベレージが1以下であれば正常といわれていたが、
>最近のマルチコアCPUにおいては読み方が変わってきている。
なるほど、、、わかったようなわからんような。。。どう変わってきてる
か、知りたい。。。w
ま、いずれにしても、高負荷状態が続いているとみるべきなんですね。
0424名無しさん@お腹いっぱい。
2016/01/31(日) 21:07:22.79もう少し読めよ
http://d.hatena.ne.jp/naoya/20070518/1179492085
0425名無しさん@お腹いっぱい。
2016/01/31(日) 21:09:13.08uptime(1) - Linux manual page
http://man7.org/linux/man-pages/man1/uptime.1.html
0426名無しさん@お腹いっぱい。
2016/02/02(火) 07:53:41.39さんくすです。
2コアだから、負荷は半分にした値を考えておけばいいのかな。
>注目するのは、待ちタスク数を数え上げるのにすべてのキューを見て
>合計する一方、その後出力するまでに CPU の数でその値を割ったりは
>していない、という点です。...ロードアベレージは割り算をしていない
0427名無しさん@お腹いっぱい。
2016/02/02(火) 07:57:31.80頑張って読みます。どもです。
0428名無しさん@お腹いっぱい。
2016/02/02(火) 09:57:29.33OSのしくみをほんの少しでも勉強したほうがいいよ
特にタイムシェアリングとかプロセス管理のあたり
0429名無しさん@お腹いっぱい。
2016/02/02(火) 11:43:42.95別に割る必要はないと思うけど
どれくらい溜まってるかを知りたいならだけど
0430名無しさん@お腹いっぱい。
2016/02/02(火) 17:43:21.96と思っています。
そこで、pythonかbashのどちらを選ぶかで迷っています。
今日pythonパイソンの有名どころの本をみたら外部コマ
ンドの利用についての記述が少なくてがっかりしました。
素直に以下の本を読むべきなのでしょうか?
それともpythonの勉強して、ネット上で外部コマンドの
利用を紹介したサイトも勉強すべきなのでしょうか?
アドバイスお願いします
http://www.amazon.co.jp/gp/product/4797321946/ref=ox_sc_act_title_1?ie=UTF8&psc=1&smid=AN1VRQENFRJN5
0431名無しさん@お腹いっぱい。
2016/02/02(火) 18:59:58.26マルチ
http://hayabusa6.2ch.net/test/read.cgi/linux/1452251761/324
0432名無しさん@お腹いっぱい。
2016/02/02(火) 20:16:40.85何をしたいかによる
0433名無しさん@お腹いっぱい。
2016/02/02(火) 21:43:18.36レスありがとうございました。マルチってそんなにいけないことなん
ですね。失礼しました。
5年以上ぶりぐらいに2chに戻ってたんで驚いてます。
板にもよるのでしょうが。
こちらだけにすればよかったです。
432さんのおしゃる通りだと思います。自分にとってはコマンド
利用してみたいので、まずはbashにしようかなと思ってます。
0434名無しさん@お腹いっぱい。
2016/02/02(火) 22:48:53.080435名無しさん@お腹いっぱい。
2016/02/02(火) 23:02:32.01329 名前:324[sage] 投稿日:2016/02/02(火) 21:44:34.24 ID:KBWlYUE4 [2/2]
失礼しました。
ルール知りませんでした。5年以上2chやっていなかったので。
330 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 22:53:07.59 ID:tNcqGKOV
>>329
5年前でもマルチはアカンかったでしょ
331 名前:login:Penguin[] 投稿日:2016/02/02(火) 22:54:56.17 ID:9nG661Lj [2/2]
2chに限らずどこでも嫌われるでしょ
332 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 23:00:54.39 ID:ZV8eeIqB [2/2]
本人はそう思ってないんだろう
死ね
0436名無しさん@お腹いっぱい。
2016/02/03(水) 00:07:58.02スクリプトを色々と探してきて、長さ順にリストアップする
{ IFS=:; find $PATH; } | xargs readlink -e | xargs file | grep ' script' |
while IFS= read -r line
do echo "$(
echo "$line" | cut -d : -f 1 | xargs wc -l
)$(
echo "$line" | cut -d : -f 2
)"; done |
sort -k1gr,1
0437名無しさん@お腹いっぱい。
2016/02/03(水) 06:35:39.85どっちも並行してやるべき。
0438名無しさん@お腹いっぱい。
2016/02/04(木) 06:50:05.93もうpythonでいいや
0439名無しさん@お腹いっぱい。
2016/02/04(木) 08:44:03.15pythonは後付けのなので、そのうちなくなるかもしれません。
Windowsにはそういうものがありました。
0440名無しさん@お腹いっぱい。
2016/02/04(木) 08:55:41.670441名無しさん@お腹いっぱい。
2016/02/04(木) 09:06:11.160442名無しさん@お腹いっぱい。
2016/02/05(金) 01:28:36.41vimの拡張にpythonが採用されてることを知らないのか…
0443名無しさん@お腹いっぱい。
2016/02/05(金) 02:35:34.810444名無しさん@お腹いっぱい。
2016/02/05(金) 02:49:11.380445名無しさん@お腹いっぱい。
2016/02/05(金) 04:13:16.68■ このスレッドは過去ログ倉庫に格納されています