シェルスクリプト総合 その26 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/03/20(月) 12:07:26.41
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
http://echo.2ch.net/test/read.cgi/unix/1439563321/
2017/04/25(火) 01:19:30.55
Windowsなくても別に困らないなあ
2017/04/25(火) 05:48:06.67
>>116
VBとかで出来るからね
シェルを使うにはUnix環境が必要で
知識ゼロのニートが自主的にやったってのは知らないなあ
Unix界隈に居る人って性格悪いじゃん?
そんな中で続くとは思えないんだけど

学生か働いてる(働いてた)時に得た知識でやるならわかるけどさ
2017/04/25(火) 06:14:57.29
画像収集ツールって昔からいくつかあるけど
それを使わずにシェルスクリプト使った人が今何してるのか興味あるな

自分はOSもアプリも言語も道具だから何でもいいんだけど
獲得したものを特別なものと思って他人を見下すってのは余裕のない感じがするね
そのあたりがLinuxが流行らなかった理由なんじゃないかと思う
スマホ使ってる人なんてニコニコしながら嫌味無く教えてくれるときあるしw
2017/04/25(火) 06:32:05.73
やらされてるだけの人って嫌味なんだろうけど
ココで答えてくれてる人はそんな人なこと忘れてるよ
失礼な奴だな
2017/04/25(火) 09:39:07.19
シェルスクリプトを作れない人がやっかんでるだけに見えるな

画像収集ツールみたいなことをする場合、Windowsアプリも
cygwonでシェルスクリプト+コマンドのパターンも使う
一方しか出来ない人は時間を損してると思うよ
2017/04/25(火) 09:44:08.16
暇つぶしに聞いただけだろう
現役で職場でシェルスクリプト使う身からすると奇妙な質問には思えるが
これがCOBOLとかなら話分かったけど
123名無しさん@お腹いっぱい。
垢版 |
2017/04/25(火) 10:09:42.40
>>118
Unix界隈の人は性格悪いってま?
2017/04/25(火) 10:21:07.46
どこかのスレで質問してみれば分かるよ
2017/04/25(火) 10:29:48.93
画像収集ツールってWindowsで動く既存アプリがいくつもあるんだよ〜
自分はシェルスクリプトを否定はしていない

でも学んでも働いても無かった人(要するにシェルを使ってなかった人)が
画像収集するためにいきなりシェルを使うとは思えないんだな
シェルスクリプトに行き着くためには
UnixなりりLinuxなりCygwin、BoW、Services for UNIXが必要になるわけであって
画像収集するのに便利って言うのは違和感がある
そういう人が本当に使ってるとして今どのレベルなのかも興味があるね

まだ画像収集レベルなのかな?

まあ別に目的を達せられたら良いんだけどね(で振り出しに戻ると)
2017/04/25(火) 10:31:54.24
ちなみに自分は学んだし仕事でやってたよ
だから実装は楽だしやらせたいことを自動でやらせるためにスクリプト組んでるね
2017/04/25(火) 10:40:20.49
すまん、結局何が言いたいのか分からん
これは単にシェルスクリプト使ってるのを見下したいだけなのか?
2017/04/25(火) 10:46:20.83
自分が使える道具を、使うと何かの目的が達せられるところで使うだけだよ
環境、能力、目的は人によるから想像力の欠如をアピールしてもしょうがない
2017/04/25(火) 11:20:26.09
>>118
CGIやSSIやISPはweb関連だ
wwwの世界はUnixばかりだからな
で何もなかった昔のwwwではCGIの設置改造とか普通
どうやって動いてるのかとか興味を持って調べた奴も多いだろう
つまり趣味で知った奴もいるってことだ

昔はWindowsでもcygwinとかでシェル使ってたけどな
今はないのかな
VBのツールのメンテとかもしてたけどUnixが吐くデータの処理だったからshで置き換えて効率化したな

やらされてる奴に性格悪い奴がいることはわかった
2017/04/25(火) 14:29:24.94
>>129
お前こそ金にならないことやらされてるじゃん
2017/04/25(火) 14:33:19.26
やらされてる連呼クンに触るなよ
2017/04/25(火) 14:38:02.51
なんつうか、こんな話題で長文して結論がそれって
よほど嫌なことあって愚痴りたかったんだろうな
133名無しさん@お腹いっぱい。
垢版 |
2017/04/25(火) 14:42:58.20
>>105
ラズパイってむずい?
2017/04/25(火) 15:04:06.17
>>129
今仕事何やってるの?
2017/04/25(火) 15:04:11.72
>>130
VBのツールの置き換えは仕事だぞ
趣味はお金払ってでもするものだけどな
ただUnixワークステーションとか買えねえよ
2017/04/25(火) 15:05:57.55
>>134
開発
2017/04/25(火) 15:32:19.24
なんだ結局仕事にしたんじゃん
素人でまだ触ってるかと思った
2017/04/25(火) 16:43:11.74
やらされに成り下がっててワロタ
2017/04/25(火) 17:46:11.39
>>137
シェルスクリプトで開発の仕事なんて滅多にないよ
お前は無職?
2017/04/25(火) 17:53:41.95
いやなんで煽るんだよ
お前何しにこのスレ来たんだよ
2017/04/25(火) 17:53:50.03
開発経験者が趣味でシェルスクリプト書くって普通だと思う
てっきり営業とか企画とか別分野の人がシェルスクリプト書いたのかと思った
2017/04/25(火) 18:09:20.39
なぜ普通以外だと予想したのか
2017/04/25(火) 19:25:03.65
俺もまったくの異業種の奴が言ってるのかと思ったよ
>>116とか見るとね
ニートがエロパワーで頑張ったのかと思ったw
2017/04/25(火) 19:42:41.24
アスペか
2017/04/25(火) 20:48:36.96
ハードウェア開発だったからまったくの独学だけどな
2017/04/25(火) 22:28:49.44
バージョン管理とかするだろうし環境作りでUnix使うだろ
どこまで無学なんだよ
2017/04/26(水) 00:06:14.19
ワークステーションとか商用Unix知らないのか無学だな
2017/04/26(水) 01:01:14.37
くだらない話題で申し訳ないんすけど
シェルスクリプトで使う変数の規則とかってどう決めてます?
自分は_HOGEがいいかなって思ってるんですけど、マジョリティはどうかなと(ここがマジョリティかどうかは別だけど)
2017/04/26(水) 01:38:09.14
>>148
変数はhoge、環境変数はHOGE
2017/04/26(水) 08:25:15.17
>>148
とくに名前に規則は設けず、関数内で local 宣言でできるだけ隔離。
気にはなるけど、個人的には実際に問題になったことが無いし、export しなければ大丈夫じゃないか?
151名無しさん@お腹いっぱい。
垢版 |
2017/04/26(水) 08:45:28.91
>>150
シェル内に影響するよ
スクリプトならシェルスクリプト内までその変数が生きる
2017/04/26(水) 08:52:37.57
localって業務用なら使うべきなんだろうがいまいち慣れないんだよなぁ
スコープ分けは基本ってのは分かっちゃいるんだがシェルスクリプトはどうもlocal使ったら負けな気がする
すげぇどうでもいいんだけどな
2017/04/27(木) 01:52:59.43
>>148
俺は>>149と同じ
↓を一度読んどくと良いと思う
https://www.gnu.org/software/autoconf/manual/autoconf.html#Special-Shell-Variables
154名無しさん@お腹いっぱい。
垢版 |
2017/04/27(木) 08:52:30.15
おまえらただのニートじゃなさそうだな
2017/04/27(木) 08:55:21.07
お前は何を言ってるんだ
156名無しさん@お腹いっぱい。
垢版 |
2017/04/27(木) 08:59:38.21
>>155
ジョークだろなんでそんなにおこる?
2017/04/27(木) 09:01:08.43
>>156
俺にしたって某画像のネタをそのまま貼っつけただけで別に怒っちゃいないぞ
158名無しさん@お腹いっぱい。
垢版 |
2017/04/27(木) 09:25:43.77
>>157
こりゃ一本取られたな
2017/05/06(土) 16:52:42.42
echo "${hoge[@]}" | xargs -P 10 -n 1 -J{} echo {} >> test.txt
てやると、期待するファイル内容は
aaa
bbb
ccc
...
なのに
aaa
bbccc
...
となってしまいます。
これを回避するいい方法ないですか?
2017/05/06(土) 18:13:00.72
hogeの中身はどうなってんの?
2017/05/06(土) 19:56:59.36
Debian GNU/Linuxでのbashなのですが、指定時間指定ユーザのログインが無ければ
シャットダウンするシェルスクリプト
https://pastebin.com/pJ3v4TYY
を勉強を兼ねて作ってみました。
正常に動作していますが、何か変なところありますか?
2017/05/06(土) 21:11:07.00
cronでやってそうだけど
ログインしてたらループ抜けないようになってるから
1日経つと重複起動すると思う

あと指定時刻なのか一定時間なのかはっきりした方がいい

動いてると思ってるならいいんでないの
2017/05/06(土) 21:31:34.54
>>162
一定時間です。

/etc/rc.localってcronで1日ごとに起動されるのでしょうか。
PC電源投入後Linux起動時にただ一度だけ実行されると思っているのですが
2017/05/06(土) 22:28:29.89
シェルの前に日本語を学んだ方がいい
2017/05/06(土) 23:44:25.36
>>161
常駐しないでlastとかでログインしなくなってから何分経ったか毎回計算した方がシンプルじゃない
なんだっけvarの下になんかあったよね
2017/05/06(土) 23:53:03.17
>>165
それだと、PC起動直後(lastとかで経過時間計算直後)にシャットダウンが走る可能性があるような
2017/05/07(日) 01:18:18.46
>>166
仕様通りだな
2017/05/07(日) 03:40:10.15
>>161
ダメってわけじゃないけど、"$1"と比較するなら grep は要らないはず(12行目)

>>163
一度だけ起動であってる
重複起動とか言ってる人は無知か勘違いなので無視していい

>>165
varの下のなんかってwtmpのこと?
wtmpは確実に更新されるわけじゃないし時間の計算も面倒になるので
>>161の方がシンプルだろうね
2017/05/07(日) 04:01:11.02
>>167
確かに仕様通りだね
PC起動してlogin受け付ける前にpoweroffしてしまうようになるだろうけど
2017/05/07(日) 08:46:28.77
一定時刻ログインしてないんだから当たり前
2017/05/07(日) 10:22:50.37
15分でシャットダウンって考えられない
まあ習作だからいいんだろうが
172名無しさん@お腹いっぱい。
垢版 |
2017/05/07(日) 16:02:10.86
>>171
チャージマン研!第23話「恐怖!精神病院」
https://youtu.be/ckO9d_-qiPw
2017/05/07(日) 21:37:10.56
>>171
そこは運用で調整してけばいい話だろう
174161
垢版 |
2017/05/07(日) 22:15:23.57
みなさんありがとう。

>>168
> "$1"と比較するなら grep は要らないはず(12行目)
他ユーザがログインしていても無視してシャットダウンする仕様にしたいのです。
> 一度だけ起動であってる
了解

>>171
> 15分でシャットダウンって考えられない
トイレとかの時、5分ほどかかる自分環境自動バックアップの処理を走らせ
画面ロックして席を立ちます。
席に戻ったらまた作業に戻るのですが、とっさの用事で席に戻れない時は
電源が切れていて欲しいのです。
10分だと下痢の時短いかも。20分もいらない。だから15分。

画面ロック(ログイン状態)の時に電源切断するのは気持ち悪いので
ログオフ状態の時に切れるようにしたいのです。
(そのため、バックアップ処理完了後は自動でログオフされるようにしています)

ちなみにWindowsではそういう自作ServiceをCで書いて走らせています。
Linuxは簡単ですね。
2017/05/08(月) 01:49:41.10
タイムカードの無い現場で ふらっと早退してやろうって感じなのかね
2017/05/08(月) 05:13:08.30
そんなんならサスペンドでいいじゃん
久しくシャットダウンしてないや
2017/05/08(月) 07:30:05.34
Windows簡単だと思うけどな
Cならコンパイルとかの環境が必要だけど所詮慣れだし
Cなんか使わずにVBScript使えばいいんじゃないの
2017/05/08(月) 09:48:57.03
Windowsは簡単だな諦めるしかすることないから
2017/05/08(月) 19:53:34.22
>>177
Windowsだと、Cでservice作る以外に>>161を実現する方法ってあるのかな
2017/05/08(月) 21:53:34.64
Windowsできるアピールはいらん
ほかでやれ
2017/05/09(火) 20:02:44.75
そう、マッキントッシュならね
2017/05/15(月) 06:37:29.43
時間のかかるパイプライン処理中に現在の中間処理内容を
メッセージ表示させることはできませんか?
echo で標準出力に表示させようとしてもそれは次のパイプラインに渡って画面に表示されませんよね?
標準エラー出力で表示させるしかないでしょうか?
183名無しさん@お腹いっぱい。
垢版 |
2017/05/15(月) 07:04:43.49
tee
2017/05/15(月) 11:20:57.06
このスレの無駄のなさすぎる回答好き
2017/05/15(月) 21:05:16.62
そう、マッキントッシュならね
2017/05/15(月) 23:50:07.04
でもteeの仕様って、一方をファイルじゃなく、stderrあたりに
しておいてくれれば、もっと汎用性上がったのにね
2017/05/16(火) 00:37:43.04
UNIXでは標準エラーもファイルだから問題ない
2017/05/16(火) 06:24:05.92
teeの出力先をstderrにすると、中間処理をモニタすることしかできなくなるのでは?
ファイルに書けばモニタも出来るし汎用的
2017/05/16(火) 07:42:47.01
>186
デフォルトでstderrに吐くと、teeのエラーを吐く場所がなくなるからでは? (例えば ls | tee --wrongoption とかの場合)
モニタしたければ tee /dev/stderr でよい。
2017/05/16(火) 08:32:03.95
>>189
dev使うのはOS依存じゃね?
2017/05/16(火) 10:02:35.57
>>188
stderrもリダイレクトできるよ
192名無しさん@お腹いっぱい。
垢版 |
2017/05/19(金) 20:34:10.11
シェルってオブジェクト指向で書けないの?
暗黙的ルール多すぎだろ
2017/05/19(金) 22:16:49.58
>>192
>> 暗黙的ルール多すぎだろ
例えば?
2017/05/19(金) 23:31:44.94
>>192
OOPの本質を理解してれば出来る
もし出来ないなら個人の能力に問題がある
195名無しさん@お腹いっぱい。
垢版 |
2017/05/20(土) 03:14:17.14
シェルはパイプで渡していくと
関数型っぽいけど
2017/05/20(土) 09:42:17.19
関数型と見るかメソッドチェーンと見るかの違いだな。
2017/05/20(土) 21:59:01.54
>>192
https://invent.life/project/bash-infinity-framework
2017/05/20(土) 22:19:56.29
>>192
オブジェクト指向で書くと暗黙のルールがなくなるの?
2017/05/21(日) 05:34:32.67
>>192
別にシェルが嫌なら同じ処理をプログラミング言語で作れば良いじゃ無い。
LLならそんな手間じゃ無いし。
2017/05/21(日) 18:05:12.85
>>192 はシェルの開発言語のことを聞いてるんだよね?
確かに、たいていのシェルはCで書かれてるし
2017/05/21(日) 19:34:04.56
だんだん分けわからなくなってきたわ
2017/05/23(火) 14:55:53.34
$ls>hoge.txt
だとカレントディレクトリのリストができますけど、
さらに深堀りして、そこにあるフォルダ(ディレクトリの中身)も表示させるには
どうすればいいのでしょうか?

それから、
フォルダかファイルの名前 ディレクトリ名(/Users/namae/nanntyaca/hogehoge.txt)
のようなふうに二つを並べて吐き出させたいのですがどうすればいいでしょうか?
2017/05/23(火) 15:04:02.31
>>202
find . -type f > hoge.txt
2017/05/23(火) 15:30:08.76
>>203
ありがとうディレクトリのリストができました。
ディレクトリのリストから、htmlのリストを作ろうとすると、どうするのが
いいのでしょうか?クリックすると当該ディレクトリに飛ぶようにしたい
だけなのです。考えていたのはtexのファイルにするということなのですが。
2017/05/23(火) 15:38:50.01
ハイパーリンク作るまでやるならshの範疇じゃない気がするが
なんでも聞かずに少しはぐぐったらどうよ
2017/05/23(火) 16:05:32.00
ありがとうございます
ぐぐります
2017/05/25(木) 08:52:58.76
w3m . -dump_source >dir.html
2017/05/26(金) 02:49:12.98
>>207
テキストファイルをhtmlにするには拡張子を変えただけでいいらしいです。
>>207さんが教えてくれてのはhtmlをtxtファイルにするための
ものだと思います。markdownでリストを作ろうと思います

ありがとうございました
2017/05/26(金) 03:27:01.73
横から

Content-type: text/html
htmlはtextの中でどう書くかというルールに過ぎない
拡張子なんてのはexplorer.exeとかのソフトがどのアプリケーションソフトを起動するかのヒント程度
名前などどうでもいい

w3m . -dump_sourceは、.(このディレクトリ)をhtmlで書き出せ、と命令してる
2017/05/26(金) 07:39:50.94
>>207さん
やりたかったことがそのままできるコードを教えてくれてありがとうございます。
それなのに申し訳ありません。>>209さんが教えてくれるまでその意義をわからず、
失礼なことを書きました。
>>209さん
本当にありがとうございます。
2017/06/02(金) 10:47:53.61
シェルスクリプトの本で、こんな便利なことができるという感じの
スクリプトを紹介するような感じでできてる本というのでお薦めの本は
あるでしょうか?
2017/06/02(金) 11:25:57.91
>>211
クックブック
……ああでもあれはbashだったか
213sage
垢版 |
2017/06/02(金) 20:17:29.65
(head ; tail ) < file
で、先頭10行・末尾10行が出るのはどういう仕組み?
FreeBSD+ash、bash で確認。
man にはそれらしい記述がないように見える。
2017/06/02(金) 21:17:20.29
ちなみに GNU coreutils の head, tail だと

seq 10 | { head -1; tail -1; }
1

となる。以下の場合は

seq 10240 | { head -1; tail -1; }
1
10240

となる。これは head コマンドが一定量のデータをバッファリングした
まま処理を終了してまうから。BSD系のコマンドでは未使用なデータは
パイプバッファに戻してくれるので tail コマンドで読み出すことができる。
2017/06/03(土) 15:49:14.51
ともにデフォルトが10行だからじゃないの?
2017/06/04(日) 01:26:27.62
>>212
クックブック注文しました
ありがとう
2017/06/05(月) 08:12:28.10
どうやって実現してるの?パイプではseekできないと
ずっと思ってた
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況