2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

シェルスクリプト総合 その25

1 :名無しさん@お腹いっぱい。:2015/08/14(金) 23:42:01.51 .net
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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/

2 :名無しさん@お腹いっぱい。:2015/08/14(金) 23:42:43.85 .net
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。

□A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
 控えましょう。

□B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
 GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
 ls -l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. 可搬性については、下記 F.1 を参照して下さい。
3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities )
 を参照して下さい。
4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に
 小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 )
5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、
 SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。
 SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。
 ( 下記 F.3 参照 )

3 :名無しさん@お腹いっぱい。:2015/08/14(金) 23:44:39.30 .net
□C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
 apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
 適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
 http://www.speech-lab.org/~hiroki/csh-whynot.euc
9. cat file|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  http://www.in-ulm.de/~mascheck/various/uuoc/

□D. シェルスクリプトでよく使うコマンド
1. 制御・条件判定系: [, test, expr, true, false, yes, getopts
2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut,
 paste, comm, join
3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、
 find は -exec command {} + を推奨。
 他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 )
4. ディレクトリ系: basename, dirname
5. 出力系: echo, printf
6. 対話コマンド制御系: expect
7. http / ftp の処理自動化: wget, curl

4 :名無しさん@お腹いっぱい。:2015/08/14(金) 23:50:19.57 .net
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/
 (↑サイト消滅かも)
 http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf
2. UNIX FAQ LIST
 http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html
(3. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/ (リンク切れ))

□F. 参考リンク
1. 可搬性関連
 a. autoconf マニュアル 移植性のあるシェルプログラム
  http://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell
  http://www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html
 b. Portability talk [Bash Hackers Wiki] 英文
  Obsolete and deprecated syntax も見る価値有り
  http://wiki.bash-hackers.org/scripting/nonportable
 c. How to make bash scripts work in dash 英文
  http://mywiki.wooledge.org/Bashism
 d. DashAsBinSh 英文
  https://wiki.ubuntu.com/DashAsBinSh
 e. Portable Shell Programming 英文
  http://www.in-ulm.de/~mascheck/various/portability/

5 :名無しさん@お腹いっぱい。:2015/08/14(金) 23:53:33.73 .net
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 http://pubs.opengroup.org/onlinepubs/9699919799/
3. Traditional Bourne Shell 関連
 a. The Traditional Bourne Shell Family History and Development 英文
  http://www.in-ulm.de/~mascheck/bourne/
 b. BourneShell / Where does the Bourne shell live? 英文
  http://mywiki.wooledge.org/BourneShell
 c. The Heirloom Bourne Shell 英文
  http://heirloom.sourceforge.net/
4. マニュアル
 a. The Base Specifications Issue 7, 2013 Edition 英文
  http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
 b. FreeBSD 日本語マニュアル検索
  http://www.jp.freebsd.org/man-jp/search.html
 c. JM Project (Japanese)
  http://linuxjm.sourceforge.jp/
5. FAQ 等
 a. UNIXの部屋 ( 2011年 )
  http://x68000.q-e-d.net/~68user/unix/
 b. Linux JF (Japanese FAQ) Project
  http://linuxjf.osdn.jp/
 c. Advanced Bash-Scripting Guide 英文
  http://www.tldp.org/LDP/abs/html/
 d. Unix Programming FAQ 日本語訳 ( 2000年 )
  http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/

6 :名無しさん@お腹いっぱい。:2015/08/14(金) 23:56:30.37 .net
6. ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  http://www.shellcheck.net/about.html
 b. vim 用 syntastic
  https://github.com/scrooloose/syntastic
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  https://github.com/duggan/shlint

□G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
 http://hibari.2ch.net/test/read.cgi/unix/989659936/
2. 便利なシェルスクリプト見せろ
 http://pc.2ch.net/test/read.cgi/unix/996949546/
3. シェルスクリプト総合 その1
 http://pc5.2ch.net/test/read.cgi/unix/1101820646/
後略。検索して下さい

7 :名無しさん@お腹いっぱい。:2015/08/14(金) 23:57:59.64 .net
□H. 関連スレ(UNIX板/プログラム板)
1. sed
 http://peace.2ch.net/test/read.cgi/unix/1085730992/
2. 正規表現
 http://peace.2ch.net/test/read.cgi/unix/1039165754/
3. Regular Expression(正規表現) Part13
 http://peace.2ch.net/test/read.cgi/tech/1415149975/
4.Perlについての質問箱 64箱目 [転載禁止](c)2ch.net
 http://peace.2ch.net/test/read.cgi/tech/1417291896/
5. ECMAScript デス 4
 http://peace.2ch.net/test/read.cgi/tech/1325448978/
6. Ruby 初心者スレッド Part 57©2ch.net [転載禁止](c)2ch.net
 http://peace.2ch.net/test/read.cgi/tech/1426165733/
7. Pythonのお勉強 Part50
 http://peace.2ch.net/test/read.cgi/tech/1413474092/
8. 【node.js】サーバサイドjavascript 3【io.js】(c)2ch.net
 http://peace.2ch.net/test/read.cgi/tech/1419673207/

□I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。

8 :名無しさん@お腹いっぱい。:2015/08/15(土) 00:04:34.32 .net
テンプレは以上です。
漏れや要求があれば各自追記願います。

9 :名無しさん@お腹いっぱい。:2015/08/15(土) 03:33:33.31 .net
Windows用のはないの?

10 :名無しさん@お腹いっぱい。:2015/08/15(土) 13:42:11.47 .net
Windows用の何?

11 :名無しさん@お腹いっぱい。:2015/08/15(土) 14:41:40.48 .net
bashとかTraditional Bourne Shellとか。

12 :名無しさん@お腹いっぱい。:2015/08/15(土) 17:47:20.99 .net
Cygwin入れれば

13 :名無しさん@お腹いっぱい。:2015/08/16(日) 00:14:04.65 .net
ping使うやつが移植性無くなるな

14 :名無しさん@お腹いっぱい。:2015/08/16(日) 21:47:33.05 .net
テキストファイルの分割で教えてください

例えば95行のテキストファイルを10分割するとき、
splitだと10行のファイルが9個と5行のファイルが1個できますが
そういう分割ではなく、10行のファイルを5個、9行のファイルを5個、
というように、等分に近くなるように分割したいです

今はforループで、1行目はファイル1に、2行目はファイル2に、
途中略して10行目はファイル10に、そして11行目はファイル1に、
みたいに仕分けてるのですが、splitの様にファイル先頭からの並び通りに
等分したく思ってます

15 :名無しさん@お腹いっぱい。:2015/08/16(日) 22:42:11.52 .net
すればいいじゃん。

16 :名無しさん@お腹いっぱい。:2015/08/16(日) 23:56:46.15 .net
>>14
awk で行番号見ながら出力ファイルを変えれば?
以下は out.0〜9 に出力する例。
動かしてみた感じだと perl で真面目にプログラム書いた方が処理速度的には速そうね。

#!/bin/sh
INFILE="$1"
LINE=$(wc -l < "$INFILE")
SPMOD=$(expr $LINE % 10)
SPDIV=$(expr $LINE / 10)
[ "$SPMOD" != 0 ] && SPDIV=$(expr $SPDIV + 1)
awk "BEGIN{I=0; F=\"out.\"I; DIV=${SPDIV}; B=DIV;}
{print \$0 > F; if(NR == B){I++; if(I==${SPMOD}){DIV--;}
F=\"out.\"I; B+=DIV;}}" "$INFILE"

17 :名無しさん@お腹いっぱい。:2015/08/17(月) 00:28:08.28 .net
GNU coreutils の split コマンドだと -n オプションってのがある。

$ split -n l/10 95lines.txt

# 1/10 じゃなくて l/10 ね(line の l)

ただ、こうなる↓

$ wc -l xa?
12 xaa
9 xab
9 xac
9 xad
9 xae
9 xaf
9 xag
9 xah
9 xai
11 xaj
95 合計

18 :名無しさん@お腹いっぱい。:2015/08/17(月) 07:22:58.29 .net
>>16
なるほど
まずは処理内容を勉強して、考えます

>>17
なんか微妙な分け方ですね…
GNU版の採用や、96とか97とかになったらどうなるかとか、調べてみます

19 :名無しさん@お腹いっぱい。:2015/08/23(日) 21:52:42.48 .net
ubuntuです。超初歩の段階なのですが
for file in ${1}/*
do
echo "${file}"
done
上記のコードで
$sh test.sh ~/Desktop/foo
とすると期待通りに
/home/hoge/Desktop/foo/a
/home/hoge/Desktop/foo/b
/home/hoge/Desktop/foo/c
と表示されるのですが
$sh test.sh "~/Desktop/foo"
とダブルクォートでくくると
~/Desktop/foo/*
と表示されてしまいます
でも空白の入ったパスを渡したいときはダブルクォートでくくらないといけませんよね?どうすればいいですか
${1}/*を"${1}/*"としても"${1}"/*としてもうまくいきませんでした

20 :名無しさん@お腹いっぱい。:2015/08/23(日) 22:25:01.69 .net
>>19
チルダがクォートされているかどうかで違う
$ echo ~/Desktop/foo
/home/hoge/Desktop/foo
$ echo "~/Desktop/foo"
~/Desktop/foo

21 :名無しさん@お腹いっぱい。:2015/08/23(日) 22:53:07.70 .net
>>19
$ sh test.sh "${HOME}/Desktop/foo"

22 :19:2015/08/23(日) 23:32:18.17 .net
>>20-21
レスどうもありがとうございます
コード側の問題じゃなくて渡す側の書き方に問題があったんですね
空白を含んでいないパスは期待どおりになりました
が空白を含んでいる場合はやっぱり「*」が展開されずに
$ sh test.sh "/home/hoge/Desktop/foo bar"
または
$ sh test.sh "${HOME}/Desktop/foo bar"
とすると
/home/hoge/Desktop/foo
bar/*
と表示されてしまいます

23 :19:2015/08/23(日) 23:37:21.98 .net
すみません
${1}/* と "${1}/*" はだめでしたが "${1}"/* としたらうまくいきました
ダブルクォートって難しいです

24 :名無しさん@お腹いっぱい。:2015/08/24(月) 04:09:11.65 .net
${1}/ 中のファイルに空白を含むファイル名があるとダメ

/home/hoge/Desktop/foo bar/space ship.txt があると

/home/hoge/Desktop/foo bar/space
ship.txt

と2行に渡って表示される

25 :名無しさん@お腹いっぱい。:2015/08/25(火) 09:55:00.50 .net
そうでもないよ
$ cat test.sh
#!/bin/sh
for f in "$1"/*
do
echo "$f"
done

$ touch "space ship.txt"
$ sh test.sh .
./space ship.txt
./test.sh

26 :名無しさん@お腹いっぱい。:2015/08/25(火) 11:38:42.71 .net
>>24>>25 と同様そうでもない
対象ディレクトリと対象ディレクトリ内のファイル名の両方にスペースが含まれて
いても問題ない
あと、ソースに渡された引数+"/*"がどう展開されるかの表示を追加

bash-2.05$ cat test.sh
#!/bin/sh

echo -n "arg/* = '"
echo -n "${1}"/*
echo "'"
echo

for file in "${1}"/*
do
echo "${file}"
done

exit 0

27 :26:2015/08/25(火) 11:40:11.64 .net
bash-2.05$ mkdir "foo bar"
bash-2.05$ cd "foo bar"
bash-2.05$ touch "space ship.txt"
bash-2.05$ touch space_ship.txt
bash-2.05$ cd ..
bash-2.05$ tree
`-+ .
+-- foo bar
| +-- space ship.txt
| +-- space_ship.txt
+-- test.sh

1 directory 3 files
bash-2.05$ sh test.sh "foo bar"
arg/* = 'foo bar/space ship.txt foo bar/space_ship.txt'

foo bar/space ship.txt
foo bar/space_ship.txt
bash-2.05$

28 :名無しさん@お腹いっぱい。:2015/08/25(火) 12:23:17.60 .net
>>25
>>24 が駄目と言ってるのは ${1} の場合の話だろw

"$1"ならもちろん問題ないよ。

29 :名無しさん@お腹いっぱい。:2015/08/25(火) 12:29:22.17 .net
bash-2.05 とか古いの使うにも程がある。劣度法度9か何かか?

30 :名無しさん@お腹いっぱい。:2015/08/25(火) 12:55:51.30 .net
>>28
いや…ファイルの話だよね?割りとどうでもいい流れだけど一応
$ cat test.sh
#!/bin/sh
for f in ${1}/*
do
echo "$f"
done

$ ls
space ship.txt test.sh
$ sh test.sh .
./space ship.txt
./test.sh
$

31 :名無しさん@お腹いっぱい。:2015/08/25(火) 13:12:03.64 .net
話を理解していない人々が多過ぎる。スルーしよw

32 :名無しさん@お腹いっぱい。:2015/08/25(火) 13:14:16.88 .net
>>30
その場合、 ${1} に . が代入されるから問題が起きてないだけ。
${1} とか半端な記述せずに "$1"にすること。${1}ってクォートなしの $1 と同じだから。

33 :26:2015/08/25(火) 13:25:30.87 .net
「"${1}"」ではなくて「${1}」という記述にこだわるならファイル名にスペースが
含まれる場合の常套手段で「IFS」を「改行コード」のみに設定すればOK

bash-2.05$ cat test.sh
#!/bin/sh

IFS_BACKUP=$IFS
IFS="
"

echo -n "arg/* = '"
echo -n "${1}"/*
echo "'"
echo

for file in ${1}/*
do
echo "${file}"
done

IFS=$IFS_BACKUP

exit 0

34 :33:2015/08/25(火) 13:26:35.02 .net
【続き】
bash-2.05$ tree
`-+ .
+-- foo bar
| +-- space ship.txt
| +-- space_ship.txt
+-- test.sh

1 directory 3 files
bash-2.05$ sh test.sh "foo bar"
arg/* = 'foo bar/space ship.txt foo bar/space_ship.txt'

foo bar/space ship.txt
foo bar/space_ship.txt
bash-2.05$

35 :名無しさん@お腹いっぱい。:2015/08/25(火) 13:30:12.68 .net
>>26 それは改行コード入りファイル名があるからNG

36 :名無しさん@お腹いっぱい。:2015/08/25(火) 13:58:06.49 .net
このスレの住人にとっては当たり前過ぎる基本的初歩的なことをわざわざ多くの行数使って書き込まれてもなぁ

37 :名無しさん@お腹いっぱい。:2015/08/30(日) 12:52:52.88 .net
>>13
最近cygwin使ってないんで試してないけど
神が現れてsudo実装してping打てるようになった模様
詳細はcygwinスレ参照

そうそうcygwinのpingって何か違ったんだっけ?

38 :名無しさん@お腹いっぱい。:2015/09/06(日) 16:40:59.13 .net
引数 $1 が function の中から参照できない
標準では全部グローバルのスコープじゃなかったのか?

グローバル変数に引数をコピーするとグローバル変数は参照できるけど
引数はそういうものなのか?

~/ cat bug.sh
function bug_version {
echo "argument $1 can't handle in function"
}
bug_version
echo "argument $1 can handle out of function"

~/ sh bug.sh arg
argument can't handle in function
argument arg can handle out of function

39 :名無しさん@お腹いっぱい。:2015/09/06(日) 17:58:01.08 .net
>>38
> 引数 $1 が function の中から参照できない
> 標準では全部グローバルのスコープじゃなかったのか?
【ポイント】
 シェル関数内の位置パラメータと特殊パラメータ「$#」はシェル関数内のみで有効
【説明】
 シェル関数の実行には『引数』を付けることができ、シェル関数内の位置パラメ
 ータと特殊パラペータ「$#」は、一時的にシェル関数の『引数』とその個数で置
 き換えられる。このため、位置パラメーターと特殊パラペータ$#はシェル関数内
 のみで有効。

あと、shの場合「function」は使えない、またシェル関数名の後ろに「()」がないと syntax error

$ cat bug.sh【修正版】
bug_version() { ← shの場合「function」は使えない、シェル関数名の後ろに「()」がないとダメ
echo "argument $1 can't handle in function"
}
bug_version $1 ← シェル関数に引数として渡した例
echo "argument $1 can handle out of function"
$ sh bug.sh
argument arg can't handle in function
argument arg can handle out of function

40 :名無しさん@お腹いっぱい。:2015/09/06(日) 17:59:13.35 .net
引数はそういうものです
bug_versionを引数無しで呼び出してるので$1には何も設定されません

41 :39:2015/09/06(日) 18:00:18.46 .net
【訂正】
$ sh bug.sh arg
argument arg can't handle in function
argument arg can handle out of function

42 :名無しさん@お腹いっぱい。:2015/09/06(日) 19:34:01.02 .net
>>38
まぁ Linux 限定だけど、

function bug_version {
echo "argument $(cat /proc/$$/cmdline | xargs -n1 -0 | sed -n 3p) can handle in function"
}

なんてするといいかも

43 :名無しさん@お腹いっぱい。:2015/09/06(日) 19:39:35.79 .net
愚かにも引数忘れてた
みんなありがとう
コードが綺麗になった

44 :名無しさん@お腹いっぱい。:2015/09/09(水) 19:11:24.39 .net
質問です。

grep "aaa\|bbb" はokなのに、grep "aaa\&bbb" はなぜ
だめなんでしょう?

45 :名無しさん@お腹いっぱい。:2015/09/09(水) 20:10:57.27 .net
>>44
どちらも仕様どおりに正しく動く
何をもってダメという?

46 :名無しさん@お腹いっぱい。:2015/09/09(水) 20:21:28.99 .net
>>45

私の環境ではこうなります。

$ echo "aaa bbb" | grep "aaa\|bbb"; echo $?
aaa bbb ccc
0
$ echo "aaa bbb" | grep "aaa\&bbb"; echo $?
1

47 :名無しさん@お腹いっぱい。:2015/09/09(水) 20:25:36.29 .net
>>45

あれれ、「 ccc」入っちゃった。無視してくださいw

48 :名無しさん@お腹いっぱい。:2015/09/09(水) 20:50:24.67 .net
>>46
だからそれは仕様どおり

49 :名無しさん@お腹いっぱい。:2015/09/09(水) 20:54:06.69 .net
\|には特別な意味があるけど\&にはないんだよ
単に&と書いたのと同じ

50 :39、41:2015/09/10(木) 02:49:03.69 .net
>>44>>46
ひょっとすると[grep]コマンドによる『AND検索』の方法(記述)を
『grep "aaa\&amp;bbb"』だと勘違いしていない?
[grep]コマンドによる『AND検索』には『OR検索』のような正規表現による
記述方法『grep "aaa\|bbb"』は存在しないので、つぎの例のように地道
にパイプで繋ぐしかないけど

[grep]コマンドによる『AND検索』の方法
$ echo "aaa bbb" | grep "aaa" | grep "bbb" ; echo $?
aaa bbb
0
$ echo "aaa ccc" | grep "aaa" | grep "bbb" ; echo $? # マッチしないデータ「aaa ccc」の例
1
$

あと、>>44>>46 って >>38 と同じ人?

51 :名無しさん@お腹いっぱい。:2015/09/10(木) 07:50:58.43 .net
$ grep -E 'aaa.*bbb|bbb.*aaa'

か、GNU grep なら

$ grep -P '(?=.*aaa)(?=.*bbb)'

でもOK。

52 :名無しさん@お腹いっぱい。:2015/09/10(木) 07:56:54.38 .net
awk 使え awk '/aaa/&&/bbb/'

53 :名無しさん@お腹いっぱい。:2015/09/10(木) 17:51:40.81 .net
\& なんてどこに書いてあったの

54 :名無しさん@お腹いっぱい。:2015/09/24(木) 23:16:07.36 .net
宣伝

【POSIX】UNIXプログラミング【BSD】 [転載禁止]&#169;2ch.net
http://peace.2ch.net/test/read.cgi/unix/1443103705/

55 :名無しさん@お腹いっぱい。:2015/09/27(日) 16:29:45.68 .net
こんな風なテキストファイルlog.txtがあります
%PART_A%
a11 a12 13
a21 a21 a23
a31 a32 a33
%PART_B%
b11 b12 b13 b14
b21 b22 b23 b24
b31 b32 b33 b24

このように%PART_x%(実はxはAとBがランダムに登場)で区切られながら
数行ずつ出力されているテキストを、値だけ(a11〜b24まで)、5列で左詰めの
CSV形式に整形するために、こんなスクリプトを作りました(ほとんどawkですが・・・)
#!/bin/sh
cat log.txt |
awk 'BEGIN{FLG=0}
/%PART_A%/{FLG=1; getline}
/%PART_B%/{FLG=2; getline}
{if (FLG==1) {print $1","$2","$3",0,0"}
else if (FLG==2) {print $1","$2","$3","$4",0"}
}'

期待通り動いてはいるのですが、フラグやgetline周りが、なんか力技?っぽくて
改善の余地があるように思ってます
このような処理をawkで書くときって、どのように書くとよいのでしょう

56 :名無しさん@お腹いっぱい。:2015/09/27(日) 16:38:38.08 .net
力技でも動いているならそれでいいんじゃない?
この間、似たような事を業務でやったけど考えるの面倒だったから
pasteコマンドでひとつのファイルにして、特定フィールドを読み込む方法にした。
なにぶん、思想が古い年代なもんで複数ファイルを
同時に読み込んであーだこーだするのはCで書きたくなる。

57 :名無しさん@お腹いっぱい。:2015/09/27(日) 17:34:07.98 .net
きれいでも動かないコードより
きたなくてもちゃんと動作するコードの方がよい
そんな格言なかったっけ?

58 :名無しさん@お腹いっぱい。:2015/09/27(日) 19:24:41.10 .net
要求仕様通りに動くことが大前提ですな。
コードの可読性を語るとキリが無い。
シェルスクリプトで訳が判らなくなる書き方する人いるけど、ある意味才能としか思えない。

59 :名無しさん@お腹いっぱい。:2015/09/28(月) 01:10:28.27 .net
過疎ってるけど
awkについて語るスレ $2
http://peace.2ch.net/test/read.cgi/tech/1172242542/
もありますよ。a11からb24が全部数値で3つまでは確実に値が入ってるなら
awk 'BEGIN{OFS=","};!~/%/{print $1,$2,$3,$4+0,0}'
で済む気がするけど。

60 :名無しさん@お腹いっぱい。:2015/10/04(日) 19:58:15.31 .net
>>57
きれいでも動かないコードより
きたなくてもちゃんと動作するコードの方がよい

そして、きれいでちゃんと動作するコードが
一番いいのは言うまでもない。

61 :名無しさん@お腹いっぱい。:2015/10/04(日) 22:53:55.31 .net
正規表現で書くとどうなるんだ?

62 :名無しさん@お腹いっぱい。:2015/10/06(火) 13:14:00.89 .net
getline回りはsplitで"^(?=\%PART_)"で区切れると楽
下のコードは "^(?=\d)"にするとレス番号だけが行頭で表示され
本文はインデントされる2chですら処理できる

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
my $enc = 'UTF-8';

my ($delimiter, $search);
$delimiter = "^(?=\%PART_)"
GetOptions ('delimiter|d=s' => \$delimiter, 'search|s=s'=> \$search);
my $line = join('', <>);
my @lines = split /$delimiter/m, $line;
for (@lines) {print if /$search/;}

63 :名無しさん@お腹いっぱい。:2015/10/13(火) 12:01:58.60 .net
ワイルドカードて全角も扱えるんだね
勝手に半角のみと思い込んでた
自分用メモ
ひらがな: [ぁ-ん]
全角カタカナ: [ァ-ヾ]
半角カタカナ: [ヲ-゚]
全てのカタカナ: [ァ-ヾヲ-゚]
全角数字: [0-9]
全角英字: [a-zA-Z]
全角英数字: [0-z]
全角文字(英数字以外, ひらがな, カタカナ, 漢字, 記号): [、-鶴]
全角文字(英数字, ひらがな, カタカナ, 漢字, 記号): [、-鶴0-9a-zA-Z]
漢字: [一-鶴]

64 :名無しさん@お腹いっぱい。:2015/10/13(火) 23:33:25.92 .net
[ぁ-ん]と[ん-ぁ]で
・同じ結果→POSIX準拠
・結果が異なる→準拠してない
というのも豆

65 :名無しさん@お腹いっぱい。:2015/10/15(木) 01:00:25.45 .net
\p{Hiragana}

66 :名無しさん@お腹いっぱい。:2015/10/16(金) 00:12:27.12 .net
第一感その手のものを使って保守性ケアするよな

67 :名無しさん@お腹いっぱい。:2015/10/16(金) 13:16:19.20 .net
任意のキーボード・ショートカットを突然入力すると、任意のスクリプトを実行するような技はありますか。
例えば、特定のアプリケーションをアクティブにするスクリプトを書いたとして、それを
Ctrl+Alt+Gで実行してGoogleChromeをアクティブにするとか、そういう事です。
Alt+Tabで一つ一つ切り替えるのはうんざりなんですよね。
スクリプト自体はできてるんですが、それをショートカットと結びつける技が分かりません。

68 :名無しさん@お腹いっぱい。:2015/10/16(金) 13:35:52.55 .net
WMとかDEの機能使った方がいいんじゃね
シェルスクリプトの話ではない

69 :名無しさん@お腹いっぱい。:2015/10/16(金) 13:41:08.99 .net
「linux キーボードショートカット カスタマイズ」でぐぐれ
/apps/metacity/global_keybindings/panel_run_dialogとかって情報はすぐ出てくる

70 :名無しさん@お腹いっぱい。:2015/10/16(金) 16:30:40.14 .net
キーバインド割り当てかaliasを作るかじゃない?

71 :名無しさん@お腹いっぱい。:2015/10/18(日) 03:08:01.82 .net
だな
w3mなら .w3m/keymap
xmonadなら .xmonad/xmonad.hs に書くような内容

72 :名無しさん@お腹いっぱい。:2015/10/18(日) 03:29:42.19 .net
busyboxでunicode変換ってどうする?

73 :名無しさん@お腹いっぱい。:2015/10/19(月) 12:52:16.45 .net
busybox sh に限らず、iconv とかuconvとか入れて使うんじゃない?

74 :名無しさん@お腹いっぱい。:2015/10/19(月) 14:00:50.57 .net
すみませんが詳しい方のみ回答をお願いします

75 :名無しさん@お腹いっぱい。:2015/10/19(月) 14:28:46.62 .net
unicodeの何を?何へ?何から?変換するのかもうちょっと具体的に書かないと応える気にならない

76 :名無しさん@お腹いっぱい。:2015/10/19(月) 15:27:19.76 .net
詳しくないのはどっちだよ
そんなんだから周囲に教えてくれる人が居なくて
2chで質問するハメになるんだよ

77 :名無しさん@お腹いっぱい。:2015/10/20(火) 00:06:45.98 .net
只のコピペの別人にキレてどうするよ。

わざわざbusybox縛りを入れて珍回答を期待してるのに普通の方法を答えるのもまあ2chらしいが。
っていうかnkfじゃないのな。

78 :名無しさん@お腹いっぱい。:2015/10/20(火) 07:22:32.22 .net
以下のようなテキストファイルがあるとして
(記載のアルファベットは例であり数字だったりマルチバイト文字だったりします)

AAAAAAAAA
BBBB
CCCCCCCCCC
DDDDDDDDDDD
EEEEEEEEEEE

各1行を2行に増やすことってできますか?

AAAAAAAAA
AAAAAAAAA
BBBB
BBBB
CCCCCCCCCC
CCCCCCCCCC
DDDDDDDDDDD
DDDDDDDDDDD
EEEEEEEEEEE
EEEEEEEEEEE

ループで1行ずつ読んで2行にして出力するくらいしか思いつかなかったのですが
パイプを使ってシンプルにできたりしませんか?

79 :名無しさん@お腹いっぱい。:2015/10/20(火) 07:41:49.44 .net
>>78
sed p foo.txt

80 :名無しさん@お腹いっぱい。:2015/10/20(火) 21:45:48.66 .net
>>79
ありがとうございます
こんなに簡単にできちゃった・・・

とりあえずpコマンド調べてみて
変換しない指定で返還前と変換後の2行が出力されるからこうなると理解しました

81 :名無しさん@お腹いっぱい。:2015/10/20(火) 23:06:19.80 .net
coolだよね

82 :名無しさん@お腹いっぱい。:2015/10/21(水) 00:43:12.91 .net
>>78を元に戻す方法は?

83 :名無しさん@お腹いっぱい。:2015/10/21(水) 00:49:57.21 .net
uniq

84 :名無しさん@お腹いっぱい。:2015/10/21(水) 01:33:11.68 .net
4行並んだら破綻

85 :名無しさん@お腹いっぱい。:2015/10/21(水) 01:46:20.53 .net
awk NR%2

86 :名無しさん@お腹いっぱい。:2015/10/21(水) 01:56:17.21 .net
あえてsedで
sed 'N; s/.*\n//'

87 :名無しさん@お腹いっぱい。:2015/10/21(水) 06:13:41.20 .net
GNU sed 限定

sed -n 1~2p

88 :名無しさん@お腹いっぱい。:2015/10/21(水) 06:38:20.24 .net
sed 'n;d' だけでいいのにw

89 :名無しさん@お腹いっぱい。:2015/10/21(水) 07:02:03.89 .net
尊い

90 :名無しさん@お腹いっぱい。:2015/10/22(木) 08:26:25.71 .net
そうだな
現代でも使える場面のあるsedは凄い

91 :名無しさん@お腹いっぱい。:2015/10/22(木) 12:24:50.15 .net
sedでutfの変換テーブル書いたらどの位の速度で動くものだろうか?

92 :名無しさん@お腹いっぱい。:2015/10/22(木) 14:32:56.99 .net
pdfファイルやExcelファイルを文字検索したいのですが
スマートな方法はありませんか?
ファイル変換しないといけないでしょうか?

93 :名無しさん@お腹いっぱい。:2015/10/22(木) 15:27:18.78 .net
変換しないとだめです
pdftotext あたりで標準出力に吐かせて grep とか

94 :名無しさん@お腹いっぱい。:2015/10/22(木) 15:55:01.58 .net
こんな感じになりました
pdftotext hoge.pdf - | grep aaa

pdftotextでググったらこのページが
ttp://www.clear-code.com/blog/2010/8/2.html
Excelはssconvertを使えばいいようですね

95 :名無しさん@お腹いっぱい。:2015/10/22(木) 22:52:20.38 .net
☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。

96 :名無しさん@お腹いっぱい。:2015/10/27(火) 08:43:35.49 .net
cat file|した方がいいことも有るぞハゲ
ってことかな?

大きなテキストファイルをawkで処理するときにcatで投げ込むのと、ファイル読み込みするのどっちが速いか比較 - カメニッキ
http://tapira.hatenablog.com/entry/2015/07/22/214419

大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog
http://d.hatena.ne.jp/yohei-a/20150728/1438099752

97 :名無しさん@お腹いっぱい。:2015/10/27(火) 09:02:14.04 .net
>>96
それって Linux OS でマルチコアで出力先が SSD の場合にだけ
速くなるかもしれないってオチだったような

98 :名無しさん@お腹いっぱい。:2015/10/27(火) 11:16:32.98 .net
でも実際速くなったんでしょ?

99 :名無しさん@お腹いっぱい。:2015/10/27(火) 12:25:26.58 .net
今の時代マルチコアしかないような気がするんだけど・・・

100 :名無しさん@お腹いっぱい。:2015/10/27(火) 12:54:33.20 .net
今の時代Linuxしかないような気がするんだけど・・・
今の時代SSDしかないような気がするんだけど・・・

101 :名無しさん@お腹いっぱい。:2015/10/27(火) 17:55:11.78 .net
>>98
他の環境だとリダイレクトの方が速かったよ

102 :名無しさん@お腹いっぱい。:2015/10/27(火) 18:45:52.06 .net
それは反論になってない

103 :名無しさん@お腹いっぱい。:2015/10/27(火) 23:01:18.38 .net
C言語で書いたほうが早かったよ

104 :名無しさん@お腹いっぱい。:2015/10/27(火) 23:24:17.69 .net
>>103
その書いたやつを見せてください。ぜひとも参考にしたいです

105 :名無しさん@お腹いっぱい。:2015/10/28(水) 05:47:50.83 .net
system("cat file | command");

106 :名無しさん@お腹いっぱい。:2015/10/28(水) 06:27:57.97 .net
同じスクリプトでもcatを使うと電解コンデンサがライトアップしやすいよw

107 :名無しさん@お腹いっぱい。:2015/10/28(水) 07:30:41.83 .net
windowsでいうINIファイルのような、設定情報を格納したファイルを作ろうとしています。

入出力パスとか、オプションのon/off(1か0か)などを書いておき、その設定ファイルを
シェルスクリプト上から読み込んで、処理内容に反映して実行することを想定しています

こういった処理をする場合、業界の一般的な様式みたいな決まりってありますか。
また、いろいろな実装方法が考えられますが、どのようなコマンドで実現するのが適切でしょうか。

busyboxに入ってそうなコマンドが一通り動ける環境を想定しています。

108 :名無しさん@お腹いっぱい。:2015/10/28(水) 08:21:07.49 .net
>>107
あなたはどんな業界の人ですか?

109 :名無しさん@お腹いっぱい。:2015/10/28(水) 10:38:06.95 .net
設定ファイル自体をシェルスクリプトにして . しちゃうのが楽じゃね
RedHat系なら /etc/sysconfig/ 以下、Debian系なら /etc/default/ 以下を参考に

110 :名無しさん@お腹いっぱい。:2015/10/28(水) 11:48:34.73 .net
またbusyboxの人か

111 :名無しさん@お腹いっぱい。:2015/10/28(水) 11:54:18.98 .net
こうするのが楽とかじゃなくて業界標準でお願いします

112 :名無しさん@お腹いっぱい。:2015/10/28(水) 12:20:06.26 .net
普通にINIファイル形式でいい
シェルスクリプトから呼べば(実行すれは)環境変数として設定されるようになる

113 :名無しさん@お腹いっぱい。:2015/10/28(水) 12:21:45.13 .net
ポイントは読み込むんじゃなくて実行させるってこと
readしてexportするんじゃなくてそのまま実行して環境変数に設定する

114 :名無しさん@お腹いっぱい。:2015/10/28(水) 13:28:25.07 .net
実行はしたくないです。インジェクションされます。。

115 :名無しさん@お腹いっぱい。:2015/10/28(水) 13:35:42.31 .net
セキュリティが心配なら標準とは対極の方向に向かうべきだろアホか

116 :名無しさん@お腹いっぱい。:2015/10/28(水) 15:00:41.96 .net
>>109
>>112
>>113

107です、ありがとうございました。ファイルを読ませることしか頭にありませんでしたので、聞いてよかったです。
その方式で、スクリプトの冒頭で設定を担当するコードを実行するようにします。

117 :名無しさん@お腹いっぱい。:2015/10/28(水) 22:16:32.33 .net
質問してるくせに偉そうだな

118 :名無しさん@お腹いっぱい。:2015/10/28(水) 23:07:56.69 .net
>>117
具体的にどこが偉そうなの?どこがカンに障るの?

119 :名無しさん@お腹いっぱい。:2015/10/29(木) 04:20:02.34 .net
教えを乞うてるくせにお腹いっぱいなのが気にくわない。

120 :名無しさん@お腹いっぱい。:2015/10/29(木) 06:23:24.26 .net
unixの管理をしています。
ユーザーはソフトのインストール禁止ですが、
最近、ユーザーでも自分のホームフォルダーにソフトをコピーし、
X権限をすることによってソフトが実行できてしまうことが判明しました。
これはOSのセキュリティーボールではないのでしょうか?
ユーザーのフォルダーではたとえX権限がされていても
実行できないようなおすすめのunixって何ですか?
必要ならカーネルにバッチを当てる方法も、やもうえません。

121 :名無しさん@お腹いっぱい。:2015/10/29(木) 07:39:00.78 .net
>>119
お腹いっぱいとは?

122 :名無しさん@お腹いっぱい。:2015/10/29(木) 08:29:26.09 .net
名前じゃね

123 :名無しさん@お腹いっぱい。:2015/10/29(木) 09:02:26.07 .net
シェルスクリプトっていう性質上、ある程度仕方ない面もあるけども
最近は余りにもスレ違いな話題が多くないか?

124 :名無しさん@お腹いっぱい。:2015/10/29(木) 10:15:07.66 .net
スレ違いでも板違いでもかまってもらえるからな

125 :名無しさん@お腹いっぱい。:2015/10/29(木) 11:15:37.67 .net
>>120
お前脳みそついてなくてUnix使ってんのか?
Windowsでも使ってろよ
希望してることができるから

126 :名無しさん@お腹いっぱい。:2015/10/29(木) 12:04:46.30 .net
コピペに釣られんな

127 :名無しさん@お腹いっぱい。:2015/10/29(木) 22:18:02.02 .net
>>123
>>123

128 :名無しさん@お腹いっぱい。:2015/10/30(金) 11:01:24.94 .net
>>124
軌道修正したレスができるなら相手して構わないんだけど、自演が疑われるような受け売り回答って不要だよな。

129 :名無しさん@お腹いっぱい。:2015/11/01(日) 13:31:00.57 .net
${@:+"$@"}という変数の記法がわかりません
たとえば/usr/bin/sensible-browserでは
/usr/bin/x-www-browser ${URL:+"$URL"}
のように使われています
なぜこう書くのかヒントをいただけたら…

130 :名無しさん@お腹いっぱい。:2015/11/01(日) 14:16:24.02 .net
man bash
Parameter Expansion の項(日本語訳では パラメータの展開 の項)
を見るよろし。てか俺がしょっちゅう見直すとこだわソレw

131 :名無しさん@お腹いっぱい。:2015/11/02(月) 12:13:01.41 .net
ポータビリティーの話( "$@"; が 何も無し にならないで、""; と解釈されてしまう対策の事 )が参考になるかな

What does ${1+"$@"} mean?
http://www.in-ulm.de/~mascheck/various/bourne_args/

Autoconf
http://www.geocities.jp/fut_nis/html/autoconf-ja/Shell-Substitutions.html#Shell%20Substitutions


# 例えば、 $URL が未定義や、ヌルなら
/usr/bin/x-www-browser "$URL"
# は、この様な意味になるが
/usr/bin/x-www-browser ""

/usr/bin/x-www-browser ${URL:+"$URL"}
# は、こうなる
/usr/bin/x-www-browser


test.sh 引数の数に違いが出る(bash の方で理解しやすいので #!/bin/bash で)
#!/bin/bash -vx
foo="hoge"
bar=""
bash -vxc 'echo "$#, " "$@"' "dummy" "$foo"
bash -vxc 'echo "$#, " "$@"' "dummy" "$bar"
bash -vxc 'echo "$#, " "$@"' "dummy" "$baz"
bash -vxc 'echo "$#, " "$@"' "dummy" ${bar:+"$bar"}
bash -vxc 'echo "$#, " "$@"' "dummy" ${baz:+"$baz"}

132 :129:2015/11/02(月) 14:09:15.67 .net
>>130
アドバイスありがとうございます。自分もよくそこ見ます

環境はlinuxのbashなのですが、"$@"と書いておけば
${@:+"$@"}と結果的に同じになるはずなのに
わざわざ後者のように書くのはどうしてかなと疑問に思った次第です

133 :129:2015/11/02(月) 14:12:02.34 .net
>>131
有益な情報ありがとうございます
なるほど"$@"が""になってしまうことがあるためなのですね
違いを確認するためのスクリプトまで用意していただいて感謝です
おかげで長い間疑問だったことが氷解しました

/usr/bin/sensible-browserは、#!/bin/shですし
ポータビリティを十分に考えて作られているわけですね
なぜAdobeのacroreadなどでも使われているか納得できました
とっても勉強になりました

134 :131:2015/11/03(火) 18:32:53.39 .net
>>133
> ポータビリティを十分に考えて作られているわけですね
/usr/bin/sensible-browser は、Debian 系で使われているスクリプトのようなので
dash で動けば十分でしょう
ポータビリティのサイトは参考になるかと貼りましたが、${1+"$@"} と違って
/usr/bin/x-www-browser ${URL:+"$URL"} の場合、関係無いかと思います

念の為 dash 等で内容がヌルの場合に、"$URL" と、 "$@" で展開の結果に違いが有る事を、強調しておきます
LANG=C PAGER='less -p "Special Parameters"' man dash
> @   Expands to the positional ...略... If there
> are no positional parameters, the expansion of @ generates
> zero arguments, even when @ is double-quoted.

135 :名無しさん@お腹いっぱい。:2015/11/04(水) 10:19:47.91 .net
ADB shellを使ってるのですが.shで保存したadbのスクリプトを順番に実行させることって可能ですか?
例えばダブルクリックした時点で1.shが動いて〜10秒後に2.shを動かして〜というような感じにしたいです。
お力貸していただけると幸いです。

136 :名無しさん@お腹いっぱい。:2015/11/04(水) 12:50:56.08 .net
ADB shellを実行するのがWindowsかlinuxによってバッチかシェルスクリプトかでわかれるが、
最初に/data/local/tmpあたりに転送して、chmodして、それをwait含めて実機で実行するのが
良いんじゃないの。

何をやりたいのか書いてないのでアレだが、操作する側で10秒開けるのか、実機で10秒ウェイトするのか。
あと、なぜ10秒あける必要があるのか、10秒後までに実行した端末で何が起きているのか、
その判定は必要なのか、などを考える必要があるし、
さらには泥のことをよく理解できてないオッサンたちが、こういう話題は、ここではスレチじゃね?
と煽ってくるので、飛来するオッサンたちを黙らせる技術も必要とされる

137 :名無しさん@お腹いっぱい。:2015/11/04(水) 13:12:49.86 .net
すみません 記述が足りてないようでした。
現在はwindowsでbatファイルを利用してuwscというフリーソフトを使って1.batを起動させて〜10秒後に2.batといった具合にやってます。
最近linuxでも開発を始めたいと思い同じようなことがしたいです。
シェルスクリプトでwindowsでやってるuwscのような制御ができないかなぁと思って質問させていただきました。
そんなめんどくさいことするよりlinuxならこのフリーソフト使って制御しとけみたいなのがあれば
教えていだだけると幸いです。

138 :名無しさん@お腹いっぱい。:2015/11/04(水) 13:15:27.82 .net
>uwscというフリーソフトを使って1.batを起動させて〜10秒後に2.batといった具合に

この10秒後に、という処理自体をbatでやればいいんじゃないの?
なぜuwscを挟む必要があるの?

139 :名無しさん@お腹いっぱい。:2015/11/04(水) 13:29:28.23 .net
>>138 おっしゃる通りなのですがcallを使って次のbatを呼び出すことよりも先にツールを使って呼び出すことを覚えてしまったもので・・・
独学でやってるうえに無知な状態からまだ2ヶ月くらいしか経ってないものでこのスレのレベルの方からしたら程度が低い質問かもしれませんが他に聞けるような環境がないもので;;

140 :名無しさん@お腹いっぱい。:2015/11/04(水) 13:33:00.98 .net
あとは、何をやりたいのか具体的に書くしか

ちなみにゲームの自動制御とか、その手の話だったら俺は降りる

141 :飛来したオバハン:2015/11/04(水) 13:33:27.01 .net
アンタ泥とかwindowsとかイタチじゃないの?

142 :名無しさん@お腹いっぱい。:2015/11/04(水) 17:24:19.98 .net
PATH の dirctory に無いスクリプトは、相対、絶対パスで起動するか、PATH に追加する
例えばカレントディレクトリのスクリプトは、
./script.sh
で起動出来る
ダブルクリックで起動するには、 .desktop ファイル作る

#!/bin/sh
./1.sh
sleep 10
../2.sh

/home/username/bin/3.sh

PATH="/home/username/bin:$PATH"
4.sh

PATH=".:$PATH"
1.sh

143 :名無しさん@お腹いっぱい。:2015/11/04(水) 17:24:50.70 .net
又は、android 上で launcher.sh を書いておいて起動する
それをアプリから起動するなら、GScript Lite とか使うんや。よー知らんけど

#!/system/bin/sh
./1.sh
sleep 10
./2.sh

ついで

@echo off
call 1.bat
ping localhost -n 11 > nul
call 2.bat

144 :名無しさん@お腹いっぱい。:2015/11/04(水) 21:13:41.29 .net
みなさんありがとうございました。すこし足がかりが得られました。
やっぱりlinuxのほうが軽くて動作も安定してる感じなのでこれからはlinux中心にデバッグを行っていけたらと思います。

145 :名無しさん@お腹いっぱい。:2015/11/08(日) 19:54:14.49 .net
echoで\tを出力してるんだけど
raspbianだとTABに置き換わってるんだけど
Sientific Linuxだと\tのままなんだけど何でかわかる?
シェルスクリプトをそのまま持っていって実行したら
そんな感じになってた・・・

146 :名無しさん@お腹いっぱい。:2015/11/08(日) 20:08:08.87 .net
シェルスクリプトと違って、シェルの話だと思う
echo の違いではない?

man dash
echo [-n] args...
If any of the following sequences of characters is encountered
during output, the sequence is not output. Instead, the specified
action is performed:

man bash
echo [-neE] [arg ...]
-e オプションを指定した場合、以下に示す、バックスラッシュの
エスケープ文字が解釈されるようになります。

147 :名無しさん@お腹いっぱい。:2015/11/08(日) 20:14:18.70 .net
シェルスクリプトのポータビリティーの話とも言えるか...
訂正

148 :名無しさん@お腹いっぱい。:2015/11/08(日) 20:37:50.28 .net
ありがとうございます
確か実装したときにecho -eオプションは使っていたのですが
raspbianの/bin/shで実行すると

echo -e "test\ttest"



-e test test

になってしまっていろいろ試した挙句
-eいらないじゃんってことになったのを思い出しました
今は双方とも/bin/shを使っているのですが
上記のようになるのはraspbianの/bin/shだけで
/bin/bashを使うと双方とも期待したとおりの結果になりました

どこかのデストリのいずれかのシェルが
実は利用者が意識してるもの(パスが示すもの)と違うというのを
見た覚えがあるのですがraspbianの/bin/shだったかは思い出せません

継続して調べてみますが取り急ぎありがとうございました

149 :名無しさん@お腹いっぱい。:2015/11/08(日) 22:14:22.18 .net
echo じゃなくて printf 使うとか

printf 'TAB\tTAB\n'

# 少なくとも dash/bash/zsh では printf は shell の builtin function

そういや、ファイルの中に

-n

だけの行があって、

cat hoge.txt | while IFS= read str
do
echo "$str"
done

ってしたらその行が出力されなくてハマったことがあった…

150 :名無しさん@お腹いっぱい。:2015/11/09(月) 12:53:41.77 .net
>>149
どうやって回避したの?参考までに知りたい

151 :名無しさん@お腹いっぱい。:2015/11/09(月) 18:25:32.86 .net
え? 単に printf '%s\n' "$str" ってしただけだよ

152 :名無しさん@お腹いっぱい。:2015/11/09(月) 22:29:31.56 .net
echoはposixでその動作が決まってるわけじゃないから
移植性重視ならprintf安定
とorilyに書いてあった

153 :名無しさん@お腹いっぱい。:2015/11/11(水) 18:21:45.18 .net
1週間位試行錯誤するもうまくいかないから、ここで必要質問しようと思ったら
単にファイル名にスペースが入っていただけだった
風俗行って頭をすっきりしてます

154 :名無しさん@お腹いっぱい。:2015/11/11(水) 19:33:08.21 .net
それは書き込まなくてよかったんじゃないか

155 :名無しさん@お腹いっぱい。:2015/11/12(木) 14:52:38.27 .net
複数ファイルのダウンロードアルゴリズムについて教えてください

今シェルスクリプトを作ってテキストファイルに書かれてある
URLからファイルをダウンロードしています
早くダウンロードしたいため多重(多重度は回線の帯域などを考慮して3〜15で任意で設定)で
ダウンロードしていますが全体の終了時間を早めたいため
ファイルサイズでソートして大きいファイルからダウンロードしています
ただこの方法だと初めの方に大きいファイルばかりダウンロードするため
成果が上がってるように見えません
またもっと効率のよい方法があるのではとも思っています
お勧めのダウンロード順(を求めるアルゴリズム)があれば教えてください

なおちょっとしたシェルスクリプトは書いていますが
やってることは以下のコマンドと大差はありません

xargs -P 10 -n 1 wget -nv -c < downlist.txt

私のほうで考えられるのはたとえば10多重の場合
大きいものからを5多重で
小さいものからを5多重で
順にダウンロードすることくらいでした
でもこの方法だと全体のダウンロード完了が
遅くなる可能性があると思います

156 :名無しさん@お腹いっぱい。:2015/11/12(木) 15:11:44.91 .net
なんで大きいファイルから始めると全体の終了時間が早くなるの?

157 :名無しさん@お腹いっぱい。:2015/11/12(木) 15:27:23.69 .net
ちょっとうまく説明できませんが
大きなファイルは時間がかかるので
複数ファイルを多重でダウンロードしても
最長時間になる可能性があるためです

たとえば100MB、50MB、40MB、30MB、10MBのファイルを2多重でダウンロードするとき
以下のようにすればそれぞれ平均化されるため

1つめ:100MB→10MB
2つめ:50MB→40MB→30MB

なお以下のようになるのは最悪なパターンだと思います。

1つめ:100MB→50MB
2つめ:40MB→30MB→10MB

全体の終了時間が短くなる想定です
また当然ダウンロード速度は一定ではないため
特定のファイルに時間がかかった場合
小さなサイズのファイルだと調整がしやすいというのもあります

1つめ:100MB→30MB→10MB
2つめ:50MB(時間がかかった)→40MB

実際はスクリプト内でpsコマンドで多重度は監視しており
whileでループしながらダウンロードしているため
そのあたりの調整は楽にやれます

158 :名無しさん@お腹いっぱい。:2015/11/12(木) 15:28:52.53 .net
例えば他のファイル全部の合計より大きなファイルが一つある場合、
この大きなファイルのダウンロードを最初からスタートさせれば
全体ダウンロード時間はこのファイルのダウンロード時間になるけど、
この大きなファイルのダウンロード開始を遅らせると
全体ダウンロード時間もそれだけ長くなることになるってことだよね

159 :名無しさん@お腹いっぱい。:2015/11/12(木) 15:31:56.60 .net
>>158
そのとおりです
(大きなファイルはクリティカルパスになりえるってことです)

160 :名無しさん@お腹いっぱい。:2015/11/12(木) 16:43:29.68 .net
>>155
> ただこの方法だと初めの方に大きいファイルばかりダウンロードするため
> 成果が上がってるように見えません

この場合の成果とはより短い時間で完了することであるわけだが
大きいファイルを先に転送すると短い時間で済む筈だったが実際には逆で
より長い時間掛かってしまうから何とかしたい、ということですか?

161 :名無しさん@お腹いっぱい。:2015/11/12(木) 17:51:07.33 .net
俺の予想では、プログレスバー的なのを表示したいけど、
大きいファイルが先だとはじめはなかなか進まないってことじゃないかな。

どんなコマンドでダウンロードしてるか知らないけど、
たいてい転送バイト数を出力できるはずだから、
頑張って出力を解析して計算すればいいかと。
あるいは手元のファイルサイズを監視したほうが早いか。

162 :名無しさん@お腹いっぱい。:2015/11/12(木) 17:59:30.65 .net
でも質問はより効率のよダウンロード順(を求めるアルゴリズムだぜ

163 :名無しさん@お腹いっぱい。:2015/11/12(木) 18:33:07.59 .net
max procが10なら、大きいファイルから10個を多重でwgetする。
その時、残りのファイルのダウンロード順はまだ決めない。
その10個のwgetのうち、どれか先に終了したもの(ファイルサイズ最小のもののことが多いがネット環境によりそうとは限らない)
について、その時点で残りのファイルのうちサイズ最大のものを割り当てて
ダウンロードさせる。
以下、残りファイルがなくなるまで繰り返し。

164 :名無しさん@お腹いっぱい。:2015/11/12(木) 20:25:10.34 .net
厳密な重さのわからないナップサック問題って感じだな。
ダウンロード時間があらかじめ分かっていたとしてもとても難しい問題。
数学苦手なのでテキトーに聞き流してもらえると助かるが、多分 NP hard って呼ばれる問題と
同等で、全通り試さないと厳密解は得られないんじゃね?

現実的には >>163 の言う貪欲法(greedy algorithm)的な?アルゴリズムが一番だろうな。

165 :名無しさん@お腹いっぱい。:2015/11/12(木) 22:52:33.75 .net
複数のファイルが全部同じサーバーにあるのかとか、別々だとしても
自分側のバンド使い切っていないかとか、もっと条件詰めないと
そもそも議論出来ない気がするけど。

166 :名無しさん@お腹いっぱい。:2015/11/13(金) 02:37:34.17 .net
多重ダウンロード禁止

167 :名無しさん@お腹いっぱい。:2015/11/13(金) 02:48:29.59 .net
分割ダウンロード禁止

168 :名無しさん@お腹いっぱい。:2015/11/13(金) 12:04:00.88 .net
エロ画像ダウンロード禁止

169 :名無しさん@お腹いっぱい。:2015/11/13(金) 12:06:28.52 .net
\(^o^)/

170 :名無しさん@お腹いっぱい。:2015/11/13(金) 23:16:03.31 .net
むしろ、トラフィックを監視して、一定以下になったらwget開始するスクリプトじゃ駄目なの?

171 :名無しさん@お腹いっぱい。:2015/11/14(土) 00:11:59.24 .net
回線異常で止まった時にさらに追い討ちかけるのか

172 :名無しさん@お腹いっぱい。:2015/11/14(土) 00:39:23.96 .net
ん、ヒントにならなかったか
ファイルを分割してダウンロードすればいい

173 :名無しさん@お腹いっぱい。:2015/11/15(日) 12:35:05.13 .net
>>171
異常だったらtcp二階建てとかしてない限りロストしてるんだから
どんどん長くなるタイムアウトをボケっと待ってたって仕方がないじゃん
むしろ定期的に試行するようにしたほうが復旧を即感知できるんじゃないか?

174 :名無しさん@お腹いっぱい。:2015/11/19(木) 07:18:13.65 .net
ルート所有のテキストファイルに、テキストを追加するために以下のコマンドを
実行するのですが、許可がないとはねられます。パスワードを入力しろ、も出て
きません。
実行者はもちろん、visudoでUSER ALL=(ALL) ALLの権限を与えられています。

$sudo echo "abc" >> /path/a.txt
bash: /path/a.txt: 許可がありません

何が問題なのでしょうか?

175 :名無しさん@お腹いっぱい。:2015/11/19(木) 07:28:16.93 .net
sudo コマンドが >>/path/a.txt を持って行ってしまうのが問題(だと思う)
sudo sh -c 'echo "abc" >> /path/a.txt'

176 :名無しさん@お腹いっぱい。:2015/11/19(木) 07:30:35.56 .net
174です。

ぐぐったら答え書いてありました。失礼しました。
最初のechoだけsudoで評価されて、リダイレクトはそうじゃないと。

177 :名無しさん@お腹いっぱい。:2015/11/19(木) 09:35:05.07 .net
>>175

さんくすです。なるほど。

ググり先を参考に、evalを使いました。
また、引数が複数の場合も含めて、スクリプトにしました。
パイプを使わない分、>>175 さんのほうがスマートですね。

for i in "$@"; do
eval echo $"$i" | sudo tee -a /path/a.txt
done

178 :名無しさん@お腹いっぱい。:2015/11/19(木) 09:36:39.66 .net
まちがった。

>ググり先を参考に、evalを使いました。

evalじゃなくて、teeだった。すんません

179 :名無しさん@お腹いっぱい。:2015/11/19(木) 13:15:22.39 .net
ググると、これらはよく見る様になりました
sudo sh -c 'echo "hoge" > "teki tou"'
echo hoge | tee "teki tou" >/dev/null


他の解決方法を考えてみました
# /dev/null 反対
echo hoge | sudo sed -ne w"teki tou"

# tee の様にファイル名を引数で受け取る
echo hoge | sudo sh -c 'cat > "$0"' "teki tou"

# pipe は無しの方向で
sudo sh -c 'echo "hoge" > "$0"' "teki tou"

180 :名無しさん@お腹いっぱい。:2015/11/19(木) 22:35:50.88 .net
>>179
スレ違い
というかシェルスクリプトにすれば問題ないのに

181 :名無しさん@お腹いっぱい。:2015/11/20(金) 13:29:04.21 .net
どういう事?
スクリプトで使う要点の一行を書くのは、このスレでなくともよく有る事では?

sudo を使っていてスクリプト向けの行ではないって事かな?

182 :名無しさん@お腹いっぱい。:2015/11/20(金) 13:42:47.00 .net
>>181
違うよ。
リダイレクトを含めてスクリプトに書いておけば
sudoで(リダイレクトの)問題が起きないという意味。

183 :名無しさん@お腹いっぱい。:2015/11/20(金) 13:54:47.85 .net
なんでスレ違い?

184 :名無しさん@お腹いっぱい。:2015/11/20(金) 14:14:40.64 .net
ラベルが低いから。

185 :名無しさん@お腹いっぱい。:2015/11/20(金) 14:38:57.72 .net
要点を貼るのはいいんだが
スクリプトの意図がよくわからない

186 :名無しさん@お腹いっぱい。:2015/11/20(金) 19:37:14.93 .net
自演くさっ

187 :名無しさん@お腹いっぱい。:2015/11/20(金) 22:49:21.30 .net
引数を元に関数の中{と}の中を表示するコマンドありませんか?
test.txt
int main()
{
printf("\n");
}
int hoge()
{
モジモジ
文字文字
}
void pyo()
{
もじもじ
}
--------------
$コマンド test.txt hoge

モジモジ
文字文字

188 :名無しさん@お腹いっぱい。:2015/11/21(土) 00:03:09.77 .net
無い

189 :名無しさん@お腹いっぱい。:2015/11/21(土) 00:06:00.44 .net
じゃ、GNU grep で。

#!/bin/sh

grep --null-data -Po "(^|\n).* $2\(.*?\)(.|\n)*?{(.|\n)*?\n\K(.|\n)+?(?=\n?})" "$1"

190 :名無しさん@お腹いっぱい。:2015/11/21(土) 00:15:34.13 .net
>>187
ありません

というか、何のためにそういうコマンドが必要か書いた方が
的確なアドバイスもらえる可能性高そう

191 :名無しさん@お腹いっぱい。:2015/11/21(土) 00:18:18.23 .net
>>189
保守性ゼロ、使い回せる可能性ゼロのいい見本だな

192 :名無しさん@お腹いっぱい。:2015/11/21(土) 00:48:31.94 .net
いいんじゃない、それで

193 :名無しさん@お腹いっぱい。:2015/11/21(土) 00:52:28.46 .net
>>189
できました、ありがとうございます!

>>190
目的は外部ファイルにある関数を調べたかったのでcatで連結して
一括で調べたかっただけなのです…

194 :名無しさん@お腹いっぱい。:2015/11/21(土) 01:00:24.01 .net
>>193
え、できたのw ネタのつもりで書いたのにw
まぁ真面目な話、関数内にブロックがあったら途中でちょん切れるので気をつけて。

195 :名無しさん@お腹いっぱい。:2015/11/21(土) 01:04:07.86 .net
>>193
if文とか無いの?


関数の中に

}

が有れば、そこで切れると思うよ

196 :名無しさん@お腹いっぱい。:2015/11/21(土) 01:05:28.85 .net
かぶってた

197 :名無しさん@お腹いっぱい。:2015/11/21(土) 01:12:31.11 .net
きちんとインデントされていて、関数ブロックの終端が必ず
"\n}" である、という条件なら以下で

grep --null-data -Po "(^|\n).* $2\(.*?\)(.|\n)*?{(.|\n)*?\n\K(.|\n)+?(?=\n})" "$1"

198 :名無しさん@お腹いっぱい。:2015/11/21(土) 01:26:46.64 .net
indent(1) と組み合わせればどうか

199 :名無しさん@お腹いっぱい。:2015/11/21(土) 02:25:44.08 .net
tag作れよ

200 :名無しさん@お腹いっぱい。:2015/11/21(土) 17:10:42.13 .net
sedならどうなの?

201 :名無しさん@お腹いっぱい。:2015/11/21(土) 18:12:48.25 .net
GNU版grep2.5.4で「『条件A』または『条件Bかつ条件C』」という指定をするにはどうすればよいのでしょう

例えば、以下のようなテキストで

111
aaa
222
bbb 〜 ccc 〜
bbb 〜 ddd 〜

「aaa」または「bbbかつccc」だけ抜き出して

aaa
bbb 〜 ccc 〜
を抜き出したいです

grep aaa sample.txt
grep -e bbb -e ccc sample.txt
として、個別の条件で出力できるところまでは分かったのですが、
テキストに出てくる順番も重要なので、何とかうまくできないかと思ってます

それともawkとかを使う必要があるのでしょうか…

202 :名無しさん@お腹いっぱい。:2015/11/21(土) 18:21:02.93 .net
こんなんでいいんじゃない

grep -E 'aaa|bbb.*ccc|ccc.*bbb' a.txt

203 :名無しさん@お腹いっぱい。:2015/11/21(土) 18:27:53.77 .net
>>202
できました
「bbb.*ccc」「ccc.*bbb」という書き方が思いつきませんでした

ありがとうございました

204 :名無しさん@お腹いっぱい。:2015/11/21(土) 18:57:13.66 .net
関数の内部を切り出すような処理は
yacc(よく知らないんだけど)なんかは関係ない?使えないの?

205 :名無しさん@お腹いっぱい。:2015/11/22(日) 19:30:02.70 .net
ファイルのリネームについてご教授ください
01.mp4
02.mp4

25.mp4
という動画ファイルがあります

それとは別のテキストファイル (List.txt) があり、内容は
orange 01「みかん」
orange 02「ぽんず」

orange 25「かんきつ」

動画ファイルを、テキストファイルから取得した文字列で
リネームしていきたいですが良い方法を知りたいです
sedやawkでも構いません
よろしくお願いします

環境はMac El Capitanです

206 :名無しさん@お腹いっぱい。:2015/11/22(日) 20:11:25.81 .net
>>205
for i in {01..25}
do
mv $i.mp4 $(grep $i List.txt).mp4
done

207 :名無しさん@お腹いっぱい。:2015/11/22(日) 20:56:26.91 .net
>>206
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory

というメッセージエラーで上手くいかなかったです
List.txtの空白スペースに対応してなかったようで
orange 01「みかん」→ orange01「みかん」にしておくと
うまくいきました

208 :名無しさん@お腹いっぱい。:2015/11/22(日) 20:57:02.29 .net
ありがとうございます

209 :名無しさん@お腹いっぱい。:2015/11/23(月) 10:43:36.03 .net
常にダブルクォートを心がけること

210 :名無しさん@お腹いっぱい。:2015/11/23(月) 14:52:02.86 .net
>>187>>200
私はsedでこういう使い方なら使用度高いな。
ただCの関数の抜き出しなどはこれだけじゃ全然足りないね。
readf ()
{
sed -n '/[[:space:]]*[int|void][[:space:]]\+'$1'[[:space:]]*(.*)/b filter1; d;
:filter1; n; /[[:space:]]*{/n; :filter2; /[[:space:]]*}/q; p; n; b filter2' $2
}

211 :名無しさん@お腹いっぱい。:2015/11/23(月) 14:53:07.97 .net
ごめん引数の順序が逆になってる。

212 :名無しさん@お腹いっぱい。:2015/11/23(月) 15:08:42.76 .net
でもまぁ書換えたりしない場合、大抵の事は前の人が書いてるように
grepの-Pを使うといいと思う。

213 :名無しさん@お腹いっぱい。:2015/11/23(月) 21:42:42.57 .net
>>206
bashism

このスレ的にだけでなく一般的にも
bash 依存のスクリプトには、#!/bin/bash を付けた方が良いよ

214 :名無しさん@お腹いっぱい。:2015/11/24(火) 04:40:58.26 .net
こんなのもありかな。以下だと表示するだけ実際にやる時は
echoを外してunset rをしてから行う事。
cat List.txt |while read
do
printf '%02d\n' $(( ++r )) |xargs -i echo mv {}.mp4 ${REPLY}.mp4
done

215 :名無しさん@お腹いっぱい。:2015/11/24(火) 06:19:42.03 .net
そういう、スペース入りファイル名未対応回答はいいです

216 :名無しさん@お腹いっぱい。:2015/11/24(火) 07:10:44.29 .net
ごめんねーzshだと大丈夫なんだけどな。
じゃあちょっと分らないな。

217 :名無しさん@お腹いっぱい。:2015/11/24(火) 07:13:51.39 .net
しかし根本的なお勧めな解答をするならば、fileにはわざわざ音楽名をつけない事だね。

218 :名無しさん@お腹いっぱい。:2015/11/24(火) 07:15:07.67 .net
zshを使ってないならそんな事なおさらだよ。

219 :名無しさん@お腹いっぱい。:2015/11/24(火) 08:53:18.61 .net
>>214
xargsが無駄です。
catが無駄です。

r=0
while read
do
: $((r++))
echo mv $(printf %02d $r).mp4

220 :名無しさん@お腹いっぱい。:2015/11/24(火) 09:27:10.95 .net
ていうか、>>214動く?

221 :名無しさん@お腹いっぱい。:2015/11/24(火) 10:13:12.69 .net
こっちの台詞だよ。それ動くのかね。

222 :名無しさん@お腹いっぱい。:2015/11/24(火) 10:16:52.25 .net
まあどうでもいいや。

223 :名無しさん@お腹いっぱい。:2015/11/24(火) 11:42:10.34 .net
こっちってどっちだ

224 :名無しさん@お腹いっぱい。:2015/11/25(水) 00:35:58.05 .net
>>205
bash でもいいなら

mapfile -t -O 1 -c 1 -C 'move(){ mv $(printf "%02d.mp4" "$1") "$2.mp4"; };move' < List.txt

225 :200ではない:2015/11/25(水) 20:05:12.35 .net
>>210
:filter1; n; /[[:space:]]*{/n; の辺りについて
2行目に { が無い場合は、どちらを想定したのかしれないが、興味を引いた
たぶん前者だろうな。すると、古くから実際に使っていそうだね

int main(argc, argv)
  int argc;
  char *argv[];
{

int main(int argc, char *argv[]) {

226 :名無しさん@お腹いっぱい。:2015/11/28(土) 10:55:16.58 .net
>>224
callback の中で関数定義してるよ。外でやるか、bash -c '...' にしろよ
mapfile -t -O 1 -c 1 -C 'bash -c '\''echo mv $(printf "%02d.mp4" "$0") "$1.mp4"'\' < List.txt

227 :名無しさん@お腹いっぱい。:2015/11/29(日) 10:07:15.23 .net
$sed -e '$-3,$d' file
sed: -e expression #1, char 2: 不明なコマンド: `-'

なして?

228 :名無しさん@お腹いっぱい。:2015/11/29(日) 14:16:20.05 .net
>>227
sedのアドレスで $-3 とか使えませんw

head -n -4 で行けるよ。 ($-3から$までだから終りの4行削除)

229 :名無しさん@お腹いっぱい。:2015/11/29(日) 18:57:29.27 .net
ここUNIX板だよ

230 :名無しさん@お腹いっぱい。:2015/11/30(月) 06:01:18.54 .net
>>225 ごめん紹介程度に適当にね。しかしグルーピングの間違いがひどいけどいいや、\|だけか。
やっつけ仕事的な興味だと思うけれどまあ実際やっつけ仕事に使える。
書き留めたものの仕分けとかね。他にもhtml-xml-utilsというsoftwareに
hxpipe,hxunpipeというcommandが入ってるのだけど、その出力の処理にも使える。
はぁそろそろ現実世界に帰るか準備をぽつぽつするので帰ってきません。

231 :名無しさん@お腹いっぱい。:2015/11/30(月) 09:32:38.39 .net
>>228

じゃ、この人は
http://qiita.com/takechika/items/b96eff5773ce9d9cc9b3
嘘書いてるわけねw

他のサイトでも、同様の記述見た事あるんだけどなー

232 :名無しさん@お腹いっぱい。:2015/11/30(月) 11:51:54.22 .net
>>231
ネットで嘘が蔓延するのはよくあること。
他サイトは嘘をまるごとコピーして載せてるだけだろw

vi(ex)やedでは $-3 とか使えるので、それと混同してるんだろ。

233 :名無しさん@お腹いっぱい。:2015/11/30(月) 12:19:42.13 .net
使える実装もあんのかな

234 :名無しさん@お腹いっぱい。:2015/11/30(月) 13:05:21.61 .net
>>231
同様の記述ってどこ?

235 :名無しさん@お腹いっぱい。:2015/12/01(火) 02:36:00.46 .net
>231の謝罪マダァ-? (・∀・ )っ/凵⌒☆チンチン

236 :名無しさん@お腹いっぱい。:2015/12/01(火) 15:02:08.23 .net
>>231
そういうばか、死ねばいいのに。

237 :名無しさん@お腹いっぱい。:2015/12/01(火) 15:30:51.28 .net
あなたもコメントしてみませんか :)

238 :名無しさん@お腹いっぱい。:2015/12/01(火) 15:39:36.30 .net
ストリームなんだから、全部パッファしなきゃ実装できない事はちょっと考えれば明らかなのに、
exで使えるからsedも使えるだろうとかセンス悪すぎる。
エンジニアの素質無い。

239 :名無しさん@お腹いっぱい。:2015/12/01(火) 17:09:19.19 .net
sed で $-3 とか書いてるプログラマorシス管見つけたら社史編纂室に異動させるわ

240 :名無しさん@お腹いっぱい。:2015/12/01(火) 17:18:23.69 .net
面白そうじゃないか

241 :名無しさん@お腹いっぱい。:2015/12/01(火) 18:23:49.12 .net
> 全部パッファしなきゃ実装できない
最後に切る行数分だけバッファーすれば良い

242 :名無しさん@お腹いっぱい。:2015/12/01(火) 21:49:07.76 .net
そんなことしか思いつかないところが壊滅的にセンス悪い
1,$-3s/hoge/hage/

243 :名無しさん@お腹いっぱい。:2015/12/01(火) 22:53:36.24 .net
なんだまた一人で自演だったか

244 :not 238:2015/12/02(水) 07:07:15.41 .net
>>242 でも、4行分バッファして4行分処理を遅延すればできるが。

それとは別に、sedではそういう処理には向かないというのは同意。

245 :名無しさん@お腹いっぱい。:2015/12/02(水) 23:21:03.30 .net
バッファーした後は、N;P;D のループで済むから、比較的単純。結構 sed 向きじゃない?
sed -ne ':Lp; N; 1,4b Lp; P; D'

cutTail()
{
 sed -ne '
  :LoopToFillBuffer
  N
  1, '"$1"' b LoopToFillBuffer
  
  P
  D
 '
}

246 :名無しさん@お腹いっぱい。:2015/12/04(金) 00:22:12.57 .net
# delete the last 10 lines of a file
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2

http://sed.sourceforge.net/sed1line.txt

247 :名無しさん@お腹いっぱい。:2015/12/04(金) 06:04:34.02 .net
>>246
-e オプションで複数に分ける意味ないだろ。

sed ':a;$d;N;2,10ba;P;D'
または
sed -n ':a;1,10!{P;N;D;};N;ba'
だけで行ける。

248 :名無しさん@お腹いっぱい。:2015/12/04(金) 06:26:55.09 .net
シェルスクリプトでオブジェクト指向ってできないんですか?

249 :名無しさん@お腹いっぱい。:2015/12/04(金) 07:53:54.11 .net
>>248
つ 『Unix Shell Objects』
http://www.amazon.co.jp/dp/toc/0764570048

250 :名無しさん@お腹いっぱい。:2015/12/07(月) 10:28:27.33 .net
httpsでファイル入手するスクリプトで一番汎用的な書き方ってなんだろう?

251 :名無しさん@お腹いっぱい。:2015/12/07(月) 10:33:45.35 .net
wget

252 :名無しさん@お腹いっぱい。:2015/12/07(月) 10:48:19.19 .net
curl

253 :名無しさん@お腹いっぱい。:2015/12/07(月) 11:21:08.52 .net
古い環境だと結局ブラウザ使うのが一番確実だったりするのだろうか?

254 :名無しさん@お腹いっぱい。:2015/12/07(月) 13:20:40.25 .net
>>253
スクリプトからブラウザ呼ぶの?

255 :名無しさん@お腹いっぱい。:2015/12/07(月) 16:31:25.34 .net
シェルスクリプトで宅内監視カメラの静止画を1分ごとにDLして保存してるけど、
うちではcurlが鉄板だわ

256 :名無しさん@お腹いっぱい。:2015/12/07(月) 21:08:34.28 .net
linux - Is wget or similar programs always available on POSIX systems? - Stack Overflow
http://stackoverflow.com/questions/9490872/is-wget-or-similar-programs-always-available-on-posix-systems

まあ、wget curl が普通だろうけど、汎用的って言う事で考えるに telnet を追加

{ sleep 1; printf 'open home.mcom.com 80\n'; sleep 3; printf 'GET /home/welcome.html HTTP/1.0\n\n'; sleep 3; } | telnet -8

257 :名無しさん@お腹いっぱい。:2015/12/07(月) 21:20:56.81 .net
監視カメラの時間別映像ファイルを上書きで消すのをトリックに使ったミステリがあったなあ

258 :名無しさん@お腹いっぱい。:2015/12/07(月) 21:27:45.23 .net
httpsってsslかなんかだっけ?

259 :名無しさん@お腹いっぱい。:2015/12/07(月) 22:42:59.47 .net
当然>>256はそれで終わりじゃないよな?
SSL/TLSのためにもうひと工夫あるんだよな?
ボケ回答のウケ狙いじゃないよな?

260 :名無しさん@お腹いっぱい。:2015/12/07(月) 23:08:08.80 .net
https telnet で検索

261 :名無しさん@お腹いっぱい。:2015/12/07(月) 23:43:57.13 .net
流石にSSL部分を前スレ716みたいなコードで置き換えるというのは無茶だろうか?

262 :名無しさん@お腹いっぱい。:2015/12/07(月) 23:52:00.25 .net
検索したらそういう変態技サイトでもあるのかなと思ったけど見つけられなかったわ
>>260に期待する

263 :名無しさん@お腹いっぱい。:2015/12/07(月) 23:53:10.50 .net
s_clientつーのがある

264 :名無しさん@お腹いっぱい。:2015/12/08(火) 00:09:05.97 .net
telnetとoepnsslの区別が出来ない人がいるな

265 :名無しさん@お腹いっぱい。:2015/12/08(火) 00:54:46.22 .net
256のように標準入力からコマンド流しこめる奴って話だろ。アスペ。

266 :名無しさん@お腹いっぱい。:2015/12/08(火) 07:04:54.30 .net
同様に扱える

{
sleep 1
printf 's_client -connect www.example.com:443\n'
sleep 3
printf 'GET / HTTP/1.1\nHost: www.example.com\n\n'
sleep 3
} | openssl

267 :名無しさん@お腹いっぱい。:2015/12/08(火) 07:25:22.83 .net
>>250

perlのモジュール使う

268 :名無しさん@お腹いっぱい。:2015/12/08(火) 10:24:12.12 .net
>>267
それこそ環境選ばないか?

269 :名無しさん@お腹いっぱい。:2015/12/08(火) 11:28:41.95 .net
perl入ってない環境使う機会なんて
もうほとんどなくなったなぁ

270 :名無しさん@お腹いっぱい。:2015/12/08(火) 11:50:28.49 .net
perl入ってる環境使う機会なんて
もうほとんどなくなったなぁ

271 :名無しさん@お腹いっぱい。:2015/12/08(火) 12:05:03.09 .net
初版から標準対応しているものでないと使いにくいよね。

272 :名無しさん@お腹いっぱい。:2015/12/08(火) 14:20:28.02 .net
入ってなくて、入れていいなら入れるもの

273 :名無しさん@お腹いっぱい。:2015/12/08(火) 14:29:50.01 .net
入れ替えるのはどこかで不都合があるかわかったもんじゃないからな。

274 :名無しさん@お腹いっぱい。:2015/12/08(火) 15:13:44.93 .net
本体ロム領域4MBのルーターのtelnet接続で動く技でお願いします。
>>256は動きそうなので合格だけどssl非対応なので不合格。
>>266はopensslコマンドがないので落第です。

もっと頑張ってくださいよ。

275 :名無しさん@お腹いっぱい。:2015/12/08(火) 16:28:48.50 .net
条件後出し北w

276 :名無しさん@お腹いっぱい。:2015/12/08(火) 17:44:47.81 .net
そもそも前出ししてないけどな
>>250の条件は一番汎用的ということで完結しているので、それより解きやすい派生のお題だろう。

277 :名無しさん@お腹いっぱい。:2015/12/08(火) 17:49:54.77 .net
じゃ、その4MBのROMの中身、開示しないとだめだろ。
つーか、なんか白けてきた。。。

278 :名無しさん@お腹いっぱい。:2015/12/08(火) 17:50:49.65 .net
それは>>274に聞いてくれ

279 :名無しさん@お腹いっぱい。:2015/12/08(火) 17:55:37.06 .net
>>277
root# busybox
BusyBox v1.22.1 (2014-09-20 22:01:35 CEST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.

Currently defined functions:
[, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp,
chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd,
devmem, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep,
find, free, fsync, grep, gunzip, gzip, halt, head, hexdump, hostid,
hwclock, id, ifconfig, kill, killall, less, ln, lock, logger, ls,
md5sum, mkdir, mkfifo, mknod, mkswap, mktemp, mount, mv, nc, netmsg,
netstat, nice, nslookup, ntpd, passwd, pgrep, pidof, ping, ping6,
pivot_root, poweroff, printf, ps, pwd, readlink, reboot, reset, rm,
rmdir, route, sed, seq, sh, sleep, sort, start-stop-daemon, strings,
switch_root, sync, sysctl, tail, tar, tee, telnet, telnetd, test, time,
top, touch, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime,
vconfig, vi, wc, wget, which, xargs, yes, zcat

280 :名無しさん@お腹いっぱい。:2015/12/08(火) 18:25:47.79 .net
wget使えんのか?

281 :名無しさん@お腹いっぱい。:2015/12/08(火) 18:28:57.45 .net
busyboxでwgetは使えるが、httpsには対応してない。(httpとftpのみ)

282 :名無しさん@お腹いっぱい。:2015/12/08(火) 19:30:56.44 .net
最近はスクリプトと言えばbusyboxの仕事ばかり。
perl使いは社史編纂室に送られたw

283 :名無しさん@お腹いっぱい。:2015/12/08(火) 19:31:25.90 .net
条件を増やしても減らしても後出し

元々の条件
httpsでファイル入手するスクリプトで一番汎用的な書き方ってなんだろう?

後出し条件
4MBのルーターのtelnet接続で動く技で

284 :名無しさん@お腹いっぱい。:2015/12/08(火) 20:02:22.82 .net
>>283
前者は汎用的、後者はカスタムで、条件が正反対だろうが

285 :名無しさん@お腹いっぱい。:2015/12/08(火) 20:08:32.27 .net
条件は部分集合だろ?

286 :名無しさん@お腹いっぱい。:2015/12/08(火) 20:11:56.40 .net
いまどきだとtelnetがなくてsshだけだったりするのもあるのだろうか?

287 :名無しさん@お腹いっぱい。:2015/12/08(火) 20:25:44.06 .net
>>285
違うからブランチだと言ってるんだろう。そもそも別人なので後出しも前田氏もない。

288 :名無しさん@お腹いっぱい。:2015/12/08(火) 20:52:44.89 .net
へぇ〜別人ねぇ〜
別人が横から条件変えてるのか

何故に言い切るの?
あほらし。相手して損した

289 :名無しさん@お腹いっぱい。:2015/12/08(火) 21:01:10.94 .net
>>288
250だけど何か質問ある?

290 :名無しさん@お腹いっぱい。:2015/12/08(火) 21:16:23.39 .net
grepを破壊的に使うことってできます?
あればおしえてください
他のフィルタ系コマンドでも応用できるものだとよりよいです

291 :名無しさん@お腹いっぱい。:2015/12/08(火) 21:38:58.20 .net
>>288
リテラシー低いよ

292 :名無しさん@お腹いっぱい。:2015/12/08(火) 21:44:05.23 .net
>>290
(rm file; grep hoge >file) <file
Cygwinじゃ無理かも

293 :名無しさん@お腹いっぱい。:2015/12/08(火) 21:47:39.67 .net
あとファイルシステムの容量が不足したら
元ファイルまで失われるという欠陥もある

294 :名無しさん@お腹いっぱい。:2015/12/08(火) 21:48:19.00 .net
>>288
>>279で条件提示したんだから、この中のコマンドで完結できる案を出しなさいよ

295 :名無しさん@お腹いっぱい。:2015/12/08(火) 21:49:52.56 .net
>>292
できました(Cygwin64でも
ありがとうございます!

296 :名無しさん@お腹いっぱい。:2015/12/10(木) 05:48:14.80 .net
初歩的な質問ですみません。
find . -type f -name '*.txt' と
find . -name '*.txt' -type f は、どっち良いとかありますか?

297 :名無しさん@お腹いっぱい。:2015/12/10(木) 07:16:13.77 .net
>>282

まじかw 
ワロタ

298 :名無しさん@お腹いっぱい。:2015/12/10(木) 07:31:45.64 .net
>>296
どっちでもいいよ
ほとんどプレーンファイルっていう普通の状況なら、
名前を先に判定したほうが計測できないレベルで速いかもしれない

299 :名無しさん@お腹いっぱい。:2015/12/10(木) 08:02:20.09 .net
wget、通常ならHTTPS (SSL/TLS) Optionsがあって、オプション指定できるが
busybox組み込みのwgetは、軽くするため、httpsオプションなしでコンパイルされ
てるのかな。

300 :名無しさん@お腹いっぱい。:2015/12/10(木) 08:48:45.97 .net
コンソールから、2chのスレ(たとえばココ)に投稿するような
スクリプト使ってる人いますか?

301 :名無しさん@お腹いっぱい。:2015/12/10(木) 09:01:58.85 .net
>>296
レギュラーファイル以外のディレクトリとかが1000万個あるなら、名前を比較しないで済む前者の方が良いかもしれない

302 :名無しさん@お腹いっぱい。:2015/12/10(木) 12:39:47.97 .net
>>299
wgetがhttps対応したのは後出しなんじゃないか?
busyboxが登場した頃のwgetでは標準では無かったと思われ

303 :名無しさん@お腹いっぱい。:2015/12/10(木) 12:53:18.77 .net
そもそも軽くするのにashなんて必要だろうか?

304 :名無しさん@お腹いっぱい。:2015/12/10(木) 13:12:18.13 .net
>>303
他の選択肢は?

305 :名無しさん@お腹いっぱい。:2015/12/10(木) 13:38:24.81 .net
2001年からHTTPSサポートしてるんだぜ
それ以上古い環境なんて考慮する必要ないよ

306 :名無しさん@お腹いっぱい。:2015/12/10(木) 14:03:30.45 .net
そんな事言ってる奴はbashとopensslの穴に落ちるがいい。
なんと言われようとshが標準

307 :名無しさん@お腹いっぱい。:2015/12/10(木) 15:56:58.29 .net
>>298>>301
ありがとうございます、実質変わらないんですね。
気にしないことにします。

308 :名無しさん@お腹いっぱい。:2015/12/11(金) 00:02:46.91 .net
https://git.busybox.net/busybox/log/networking/wget.c
wget: add support for https using "openssl s_client" as a helper Denys Vlasenko 2014-02-22

309 :名無しさん@お腹いっぱい。:2015/12/11(金) 00:30:35.95 .net
>>296
そういう時は time コマンドを使って CPU 時間計測するというのも手だぞ。

310 :名無しさん@お腹いっぱい。:2015/12/11(金) 01:31:31.62 .net
ROMが4MBの余ったbuffalo製ルータにopenwrt1505入れてみたわ

root@OpenWrt:/# wget https://192.168.1.1/
Connecting to 192.168.1.1 (192.168.1.1:443)
wget: can't execute 'openssl': No such file or directory
wget: error getting response: Connection reset by peer

root@OpenWrt:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 448 232 216 52% /
/dev/root 2304 2304 0 100% /rom
tmpfs 14368 524 13844 4% /tmp
/dev/mtdblock5 448 232 216 52% /overlay
overlayfs:/overlay 448 232 216 52% /
tmpfs 512 0 512 0% /dev

初期状態ですでにfilesystemの空き容量216KB こりゃムリゲーだわ

311 :名無しさん@お腹いっぱい。:2015/12/11(金) 13:13:34.04 .net
>>310

おつかれちゃん。
というわけで、4MB ROMで、httpsの話題は糸冬了とさせていただきます。w

312 :名無しさん@お腹いっぱい。:2015/12/12(土) 02:38:13.55 .net
>>309
ありがとうございます。
15000個のディレクトリと120000個のファイルが入ったディレクトリで
何度かやってみましたが特に違いはありませんでした。

313 :名無しさん@お腹いっぱい。:2015/12/12(土) 12:37:42.64 .net
>>310-311
ちょっと待った、216KBあればスクリプト何行書けるよ?
前スレのRSA暗号のスクリプトの10倍程度に膨れたとしても余裕で入らないか?

314 :名無しさん@お腹いっぱい。:2015/12/12(土) 14:30:14.68 .net
>>313
エラーメッセージ読めないなら黙ってなよ

315 :名無しさん@お腹いっぱい。:2015/12/12(土) 14:35:22.38 .net
openssl相当をシェルスクリプトで書くっていう
意味だと読み取れないなら黙ってろよ

316 :名無しさん@お腹いっぱい。:2015/12/12(土) 16:50:31.02 .net
vagrantで仮想サーバー環境を作っていて
provisioning.shというファイルを作りvagrantを立ち上げたときの初期動作を指定しているのですが
sudo yum install postfix -y としたあと
sudo alternatives --config mta
とすると番号を聞かれるのですが、1番のpostfixを選びたい場合どう書けばいいのですか?
sudo yum install -yと書くと途中のyes/noをyにしてくれる、というようなことがしたいのですが

317 :名無しさん@お腹いっぱい。:2015/12/12(土) 20:01:02.92 .net
>>315
ぷぷぷぷ、RSAの他に最低でも
楕円曲線暗号、メッセージダイジェスト、asn1デコーダ、エンコーダ、pemエンコーダ、デコーダー
作ってから言ってね。

318 :名無しさん@お腹いっぱい。:2015/12/12(土) 20:44:59.01 .net
楕円曲線暗号、メッセージダイジェスト、asn1デコーダ、エンコーダ、pemエンコーダ、デコーダーが
シェルスクリプトだけで作れない証明は?

319 :名無しさん@お腹いっぱい。:2015/12/12(土) 21:06:08.70 .net
>>318
作って公開したら全員黙るよ

320 :名無しさん@お腹いっぱい。:2015/12/13(日) 01:42:09.87 .net
後、共通鍵暗号も要るね
ワクワク

321 :名無しさん@お腹いっぱい。:2015/12/13(日) 02:03:11.75 .net
なんかガキが出てきて凄そうなキーワード上げてるって感じにしか見えん

322 :名無しさん@お腹いっぱい。:2015/12/13(日) 02:21:22.86 .net
x509って知ってる?
楕円曲線暗号は必須じゃないけど他は全部必要だよ。

323 :名無しさん@お腹いっぱい。:2015/12/13(日) 03:26:03.62 .net
っていうか、作り方わかってるなら組めるだろ
自分で作れないものを挙げろよ

324 :名無しさん@お腹いっぱい。:2015/12/13(日) 07:04:17.98 .net
>>316
man alternatives
man update-alternatives
か何かで調べると --config 以外の非対話的オプションが有るが
それは使えない?

325 :名無しさん@お腹いっぱい。:2015/12/13(日) 07:30:11.14 .net
>>323
キミが全部作って>>266相当を実証して見せれば、みんな黙るよ

326 :名無しさん@お腹いっぱい。:2015/12/13(日) 08:06:26.59 .net
他の解決方法でなく
シェルスクリプトで openssl を実現しようと云う発想をする時点で、
しかも条件を提示したんだから解決方法を出せとか

(別の意味で)黙るよね

327 :名無しさん@お腹いっぱい。:2015/12/13(日) 09:08:35.94 .net
実現不能な提案は妄想って言うんだよ
で、お前は実装できるの?

328 :名無しさん@お腹いっぱい。:2015/12/13(日) 11:05:38.72 .net
できるよ。無意味だからしないけど。
黙らなくていいよ。グズグズ言い続けて。

329 :名無しさん@お腹いっぱい。:2015/12/13(日) 11:19:13.11 .net
世界初だから全然無意味じゃない。

330 :名無しさん@お腹いっぱい。:2015/12/13(日) 13:45:47.64 .net
bashでOSを判別しようと思ってて、シェル変数OSTYPEで判別するのがいいのかなと
思ってるんですが、もっとよい方法ありますか?

あとHP-UX 11iのbashでシェル変数OSTYPEは何になっているか、わかる方はいますか?

331 :名無しさん@お腹いっぱい。:2015/12/13(日) 13:57:10.41 .net
uname

332 :名無しさん@お腹いっぱい。:2015/12/18(金) 20:07:27.08 .net
telnet で季節ものを。
telnet ネタコードにネタを重ねています
GNU sleep を使っています

ワンライナー
i=-1; while [ $(( i += 1 )) -le 9 ]; do { sleep 1; printf 'open vt100.net 80\n';\
sleep 3; printf 'GET /animation/xmas'"$i"'.txt HTTP/1.0\n\n'; sleep 3; } | telnet -8\
| while IFS= read -r line; do echo "$line"; sleep 0.08; done; printf \
'Watch More? ( Yes / No ): '; read ans; case "$ans" in n|N|no|NO) i=99;; esac; done

視線が...さ、寒い
良いお年を

そういえばこんなのも
telnet nyancat.dakko.us

333 :名無しさん@お腹いっぱい。:2015/12/18(金) 20:08:17.92 .net
スクリプト
#!/bin/sh
i=-1
while
 [ $(( i += 1 )) -le 9 ]
do
 {
  sleep 1
  printf 'open vt100.net 80\n'
  sleep 3
  printf 'GET /animation/xmas'"$i"'.txt HTTP/1.0\n\n'
  sleep 3
 } |
  telnet -8 |
  while IFS= read -r line
  do
   echo "$line"
   sleep 0.08
  done
 
 printf 'Watch More? ( Yes / No ): '
 read ans
 case "$ans" in
 n|N|no|NO) i=99;;
 esac
done

334 :名無しさん@お腹いっぱい。:2015/12/19(土) 01:54:54.83 .net
328が来年のusenixでopenssl相当のシェルスクリプトの実装を発表する

335 :名無しさん@お腹いっぱい。:2015/12/20(日) 02:31:00.77 .net
それは宣言ですか?絶対当たらなそうな予言ですか?
とりあえずopenssl相当の処理なんて必要かな?
課題的には鯖から落とせればその相手が本物かどうかなんてどうでもいいんじゃない?
と言っても鍵は送る方が指定するみたいから肝心な暗号処理で手抜きは効かなそうだな。
処理自体は計算式で表現できたりする程度のものだけど、数がバカでかいからそのまま丸投げだと無理かも?

336 :名無しさん@お腹いっぱい。:2015/12/20(日) 16:46:55.74 .net
>>300です。
やっと、コンソールから2chにかきこできるようになりました。
ま、Perl使ってですが。。。
改行ちゃんと入るかな?

337 :名無しさん@お腹いっぱい。:2015/12/20(日) 18:14:25.11 .net
前スレで質問して、
「UNIXでもメモリクリーニングはできる」と回答をもらった者です。
そこで早速perlを使って、perl -e 'while (1) { fork; }'
を実行してみました。
で、メモリクリーニングはいつ終るのでしょうか?
念のため、PCケースを開けてみましたが、
メモリ表面の汚れは取れていませんでした。
やはりUNIXはメモリクリーニングに対応していないのでしょうか?

338 :名無しさん@お腹いっぱい。:2015/12/20(日) 19:12:40.94 .net
perl -e "fork while fork" &

339 :名無しさん@お腹いっぱい。:2015/12/20(日) 21:35:35.99 .net
>>336
cpanのどれ利用した?
それとも使ってない

340 :名無しさん@お腹いっぱい。:2015/12/20(日) 22:33:07.03 .net
quine
in computing, a program producing its complete source code as its only output without simply opening the source file of the program and printing the contents (such actions are considered cheating).

b=\' c=\\ a='echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a';echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a

341 :名無しさん@お腹いっぱい。:2015/12/21(月) 16:40:57.79 .net
>>337
表面はきれいに見えても、接続口が汚れてることはよくある。
接続部の汚れはなかなか落ちないから4ヶ月ぐらい待ってみて。

342 :名無しさん@お腹いっぱい。:2015/12/21(月) 18:49:28.81 .net
quine で fork bomb
b=\' c=\\ a='yes $( echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a ) | sh &';yes $( echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a ) | sh &


Quine Program
http://c2.com/cgi/wiki?QuineProgram

343 :名無しさん@お腹いっぱい。:2015/12/21(月) 23:00:15.84 .net
勉強でシンプルなものを作成しました

#!/bin/bash

while :
do
usr=`id | cut -d

344 :名無しさん@お腹いっぱい。:2015/12/21(月) 23:01:19.62 .net
勉強でシンプルなものを作成しました

#!/bin/bash

while :
do
usr=`id | cut -d" " -f 1 | sed -e "s/^.*(\(.*\)).*$/\1/g"`
echo -n -e "\033[s"
D=$((`tput cols` - 8))
tput cup 1 $D
COLOR=`tput setaf 4; tput smso`
NORMAL=`tput sgr0`
echo -n $COLOR$usr$NORMAL
echo -n -e "\033[u"
sleep 1
done

右上にユーザーを表示する単純なものです。
ログインユーザーでログインして実行したあとに、sudoでrootになっても右上にはログインユーザーが表示されたままとなります。
これは実行時のユーザーだからだと思うのですが、sudoでrootになった時にはrootに表示を変更する方法はありますでしょうか?

345 :名無しさん@お腹いっぱい。:2015/12/21(月) 23:56:53.33 .net
id -un
- or -
whoami

346 :名無しさん@お腹いっぱい。:2015/12/22(火) 00:13:25.17 .net
現在の tty で sudo を使っている場合、その user name を表示したい
とエスパー解釈した上で


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

347 :344:2015/12/22(火) 00:15:04.92 .net
>>345
回答ありがとうございます。

該当部分をid -unやwhoamiに変更しても状況に変化は見られませんでした。
何か間違った書き方をしてしまっているのでしょうか。

348 :344:2015/12/22(火) 00:22:29.80 .net
>>346
回答いただきありがとうございます。

こちらのほうで実現できました。
psの方から取得するということでしょうか。
whileループの中でidで取得していたので更新されると思っていたのですが
そうでもないようですね。
なぜかは理由はわかりませんが…。

回答いただきありがとうございました。

349 :名無しさん@お腹いっぱい。:2015/12/22(火) 00:45:28.49 .net
そのスクリプトをバックグラウンドで起動して ps Tf すると分かるかも
10995 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 を起動していますが、これも別プロセスです

350 :名無しさん@お腹いっぱい。:2015/12/22(火) 08:00:39.33 .net
PROMPT_COMMAND参照する端末(gnome-terminalやlxterminalなど)だったら
それを使う手もある

以下の内容を適当なファイル(たとえば/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
してやればいい

351 :348:2015/12/23(水) 08:30:02.70 .net
ID変わってますが348です。

その後の回答を、試してみていろいろとわかりました。
Linuxなどにおける動作で幾つか思違いしているところもあり勉強になりました。

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

352 :名無しさん@お腹いっぱい。:2015/12/23(水) 23:18:50.99 .net
IDが変わったようには見えないが

353 :名無しさん@お腹いっぱい。:2015/12/23(水) 23:40:21.98 .net
ていうかIDが見えないが

354 :名無しさん@お腹いっぱい。:2015/12/24(木) 04:08:04.27 .net
2chMateなら見えるよ

355 :名無しさん@お腹いっぱい。:2015/12/24(木) 12:24:50.59 .net
本質的でないところでばかり実力を揮発するクラスタの皆さん!
コンニチワ

356 :名無しさん@お腹いっぱい。:2015/12/24(木) 18:48:12.28 .net
>>353
ワロタw

357 :名無しさん@お腹いっぱい。:2015/12/24(木) 18:59:35.38 .net
スレ違いすんません。

>>339

>>336です。

LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use HTTP::Cookies;

ggrば出ます。

スレURIの最後の数字列、タイトルから検索して常に最新の数字列を内で取得するようにして、現状、

echo "ほげほげ" | 2ch_put.pl $SURE

で、投稿できるようにしてみた。嵐はしてないよ。

358 :名無しさん@お腹いっぱい。:2015/12/24(木) 19:23:37.34 .net
>if str=$( ps T -o user,comm | grep [s]udo )

常に0のような気がするが、そうじゃないんだな。
str=aaa や str="" は0だけど、失敗すると1か。
勉強になりますた

359 :名無しさん@お腹いっぱい。:2015/12/25(金) 00:19:36.63 .net
>>357
thanks

360 :名無しさん@お腹いっぱい。:2015/12/27(日) 12:03:43.83 .net
=>>290なんですけど>>292の仕組みが理解できてないので誰か解説してくださいませんか?
いつファイルがうまくreadされるタイミングとか

それから関係ないんですけどsedの-iってPOSIX非準拠ですか?

361 :名無しさん@お腹いっぱい。:2015/12/27(日) 12:23:52.45 .net
-iは引数のあるなしで動かなかったりするな

362 :名無しさん@お腹いっぱい。:2015/12/27(日) 15:36:01.26 .net
>>360
いつって言ってもgrepがreadした時に読んでるのだが…。
たぶん分かってないのが、unixではファイルをオープンした状態でファイルを削除できるってこと
その場合ディレクトリエントリは消えるがファイル自体は残っているので
ファイルのread/writeは変わらず出来る

363 :名無しさん@お腹いっぱい。:2015/12/27(日) 19:29:04.42 .net
>>360
外のシェルがopenする
中のシェルでrmがunlinkする
中のシェルがopenしてfileができる
grepがreadしてwriteする
grepがexitしてどっちもcloseする

364 :名無しさん@お腹いっぱい。:2015/12/27(日) 19:29:18.22 .net
>>362
しかしエントリから消えたハードディスクのブロックは再利用可能な状態なわけですよね?
もしそうなら二回目にオープンしたとき領域が重なってしまうことはないのですか?

365 :名無しさん@お腹いっぱい。:2015/12/27(日) 19:37:36.75 .net
>>364
closeして誰も参照しなくなるまではi-nodeも含めて再利用されないよ

366 :名無しさん@お腹いっぱい。:2015/12/27(日) 19:56:03.56 .net
>>365
そうなのですか!初めて知りました
ありがとうございます!すっきりしましたよ!

367 :名無しさん@お腹いっぱい。:2016/01/01(金) 11:20:57.19 .net
Happy New Year!

wget -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

368 :名無しさん@お腹いっぱい。:2016/01/01(金) 22:44:41.53 .net
a happy new yeah.

>>367
素晴らしい!

369 :名無しさん@お腹いっぱい。:2016/01/02(土) 22:52:05.39 .net
有難う!ファイルを書いた人は素晴らしいよね

370 :名無しさん@お腹いっぱい。:2016/01/14(木) 11:46:10.89 .net
質問です
テキストファイルだけのデータベースを作ろうと思ってます
どんなシェルスクリプトを書けばいいと思いますか
皆さんのお知恵をお貸しください

あとシス管系女子に登場するみんとちゃんのスリーサイズが分かりません
知っている人がいたら教えて下さい

よろしくお願いいたします

371 :名無しさん@お腹いっぱい。:2016/01/14(木) 12:18:20.24 .net
テキストファイルだけのデータベースってどんなん?

372 :名無しさん@お腹いっぱい。:2016/01/14(木) 12:37:09.51 .net
女だらけの水泳大会みたいなものだろ

373 :名無しさん@お腹いっぱい。:2016/01/14(木) 13:49:41.31 .net
Berkeley DB使え、とかそういう話?

374 :名無しさん@お腹いっぱい。:2016/01/14(木) 19:07:54.47 .net
人のボケつぶした上にダダスベリって最悪じゃね?

375 :名無しさん@お腹いっぱい。:2016/01/14(木) 19:32:14.79 .net
職場の開発環境がLinuxでcshなのですが
cshでいいリファレンスはありませんか?
ネットが使えないのでWebページは無理です。

376 :名無しさん@お腹いっぱい。:2016/01/14(木) 20:23:34.08 .net
定年間近の老人から口伝で受け継ぎましょう

377 :名無しさん@お腹いっぱい。:2016/01/14(木) 22:27:43.69 .net
changelogで日記書く人もいるしな

378 :名無しさん@お腹いっぱい。:2016/01/14(木) 22:57:32.14 .net
昔はC Shellフィールドガイドとかいう本が定番だったような
もう30年近く前のことだけど…
それにしても開発環境がcshでネットが使えないって、ある意味すごいと思うw

379 :名無しさん@お腹いっぱい。:2016/01/14(木) 23:03:15.63 .net
>>375
ネットがダメなら本しかないじゃないか
いま流通してるのって
http://www.amazon.co.jp/dp/4893620290
くらいかな

380 :名無しさん@お腹いっぱい。:2016/01/14(木) 23:24:27.93 .net
いまどきc shell使っているところってC言語でも使ってるの?

381 :名無しさん@お腹いっぱい。:2016/01/14(木) 23:24:38.54 .net
ネットが使えないのにアマゾン?

382 :名無しさん@お腹いっぱい。:2016/01/15(金) 00:15:28.22 .net
みんとちゃんは天使

383 :名無しさん@お腹いっぱい。:2016/01/15(金) 11:42:41.05 .net
>>374
もともとのボケからすべってるじゃん

384 :名無しさん@お腹いっぱい。:2016/01/15(金) 14:57:47.22 .net
ここにいる様な人たちとだけは仕事したくないな〜

385 :名無しさん@お腹いっぱい。:2016/01/15(金) 15:21:01.14 .net
>>375
マスタリングcshは目の前に転がってるが、他にも合った気がするが
みつからない。

386 :名無しさん@お腹いっぱい。:2016/01/15(金) 15:29:47.22 .net
みんとが、rm -rf で全消ししても許してあげるし、データリカバリの講義を、みっちりやったげる
ここの住人がやったら半殺し

387 :名無しさん@お腹いっぱい。:2016/01/15(金) 15:51:51.83 .net
データーリカバリーとデリヘルって似てるね

388 :名無しさん@お腹いっぱい。:2016/01/15(金) 16:08:50.97 .net
ディスカバリーチャンネルとデタリカバリーチャンネルも似てるね。

389 :名無しさん@お腹いっぱい。:2016/01/15(金) 21:52:13.77 .net
20年少し前だと、もう csh でスクリプトを書かない事を進められた
SunOS でログインシェルは、csh がデフォで tcsh に切り替え

390 :名無しさん@お腹いっぱい。:2016/01/15(金) 21:54:24.42 .net
&#9747; 進められた

391 :名無しさん@お腹いっぱい。:2016/01/15(金) 22:29:29.27 .net
cshがスクリプトに向かないのは有名だね。
でも短いスクリプトなら、配列が使えたりとかshより便利なケースがないでもない

>>375
manは入ってないの?

392 :名無しさん@お腹いっぱい。:2016/01/17(日) 00:38:52.85 .net
shって配列使えないんだ?
bashは使えるよね、二次元配列も

393 :名無しさん@お腹いっぱい。:2016/01/17(日) 13:36:42.66 .net
http://wiki.bash-hackers.org/scripting/nonportable
こういったポータビリティに関することを一発でチェックするための自動テストスイートってないものかね。
それがあればシェルの比較表もすぐに作れると思うんだが。

394 :名無しさん@お腹いっぱい。:2016/01/17(日) 15:16:57.76 .net
>>393
>>6 というか checkbashisms
http://manpages.ubuntu.com/manpages/wily/en/man1/checkbashisms.1.html

395 :名無しさん@お腹いっぱい。:2016/01/21(木) 07:44:44.20 .net
外部コマンドの違いも有るよね
GNU のコマンドは機能拡張しまくっていて、UNIX 哲学が云々

grep -o -p とかダメだろうな(と思って調べると、OpenBSD は -o を持っているのか)
http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/egrep.1?query=grep

396 :名無しさん@お腹いっぱい。:2016/01/21(木) 09:51:46.27 .net
sed -iとかな

397 :名無しさん@お腹いっぱい。:2016/01/21(木) 21:38:36.72 .net
オプションをある程度統一してほしいよね
-hでヘルプ、-vでバージョン見るくらいは統一してほしい

398 :名無しさん@お腹いっぱい。:2016/01/22(金) 09:43:42.93 .net
>>397

ほんとになw

399 :名無しさん@お腹いっぱい。:2016/01/22(金) 10:23:07.08 .net
grep -v してるスクリプトが動かなくなったりしたら嫌だな

400 :名無しさん@お腹いっぱい。:2016/01/22(金) 21:11:00.15 .net
痛みが大きすぎて統一失敗は無理か
今後も長く使われて行く事を考えると、ある程度統一してほしいなあ

特定の環境変数が定義されている時に限り
統一されたオプションにするとか

401 :名無しさん@お腹いっぱい。:2016/01/23(土) 00:27:07.84 .net
ロングオプションを使い給え。

402 :名無しさん@お腹いっぱい。:2016/01/23(土) 16:57:11.77 .net
ロングオプションって、ロング過ぎてなんだかなあ
でも今度から意識してみよっと


ちょっと暇つぶし

list of coreutils (Linux, depends dpkg)
dpkg -L coreutils | sed -ne '\@bin/@s@^.*bin/@@p' | xargs man -f

whatis $( which who )

403 :名無しさん@お腹いっぱい。:2016/01/23(土) 19:06:44.06 .net
>>397
http://www.gnu.org/software/coreutils/manual/html_node/Common-options.html
‘--help’ ヘルプ
‘--version’ バージョン
‘--’ オプションリスト区切り

404 :名無しさん@お腹いっぱい。:2016/01/23(土) 19:21:27.03 .net
>>403
そういうことじゃないだろ…

405 :名無しさん@お腹いっぱい。:2016/01/24(日) 00:23:36.03 .net
>>401でもう既出だし
GNU系コマンド以外には通用しないケースある

406 :名無しさん@お腹いっぱい。:2016/01/28(木) 05:58:34.66 .net
毎回ランダムに、コマンドを紹介
http://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)

407 :名無しさん@お腹いっぱい。:2016/01/28(木) 06:13:04.21 .net
shufって何?

408 :名無しさん@お腹いっぱい。:2016/01/28(木) 08:36:56.70 .net
GNU coreutilsに入ってる、行単位で中身をランダムに入れ替えるコマンド。
BSD系ならsort -Rで代替できるかな。

409 :名無しさん@お腹いっぱい。:2016/01/28(木) 09:53:14.50 .net
動いてるシェルスクリプトをkillしたいんだけど
以下のコマンドより冴えた方法ある?

pgrep -f 'sh script.sh' | xargs kill

これで不満なのはシェルスクリプトが実行されてなかった場合
USAGEが出ちゃうところくらい

410 :名無しさん@お腹いっぱい。:2016/01/28(木) 11:04:04.77 .net
pgrepがあるならpkillもあるでしょ

411 :名無しさん@お腹いっぱい。:2016/01/28(木) 11:35:34.21 .net
pkillだとshを殺してしまうことになって都合が悪いです〜

412 :名無しさん@お腹いっぱい。:2016/01/28(木) 11:50:19.16 .net
pkill -f 'sh script.sh'

413 :名無しさん@お腹いっぱい。:2016/01/28(木) 16:03:14.05 .net
ありがとう
帰ってから試してみる

414 :名無しさん@お腹いっぱい。:2016/01/30(土) 08:10:48.00 .net
tputで表示させたいのですが改行されません

#!/bin/sh

while :
do
# Get Time
time=

415 :名無しさん@お腹いっぱい。:2016/01/30(土) 08:14:07.46 .net
すいませんダブルクォーテーションよりしたが表示されませんでした

time=$(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で改行表示する方法があればアドバイスいただけると助かります。

416 :名無しさん@お腹いっぱい。:2016/01/30(土) 09:44:44.08 .net
tput についていちいち覚えていないので適当でスマンが
気になる点を上げておいた

echo -n $COLOR$time$NORMAL
だと、エスケープされていないので、$time に含まれる改行文字がスペースに置換される

echo -e は bash だろうから、#!/bin/bash にする
新しく書くスクリプトでは `...` よりも $(...) を使うのが望ましい
ループ中で、変わらない変数を定義しない
(確か sgr0 がリセットかなんかで変わらなかったとして)

417 :名無しさん@お腹いっぱい。:2016/01/30(土) 09:50:10.42 .net
訂正

> echo -e は bash だろうから、#!/bin/bash にする
#!/bin/sh のままで printf を使う方が良いかな

418 :名無しさん@お腹いっぱい。:2016/01/30(土) 09:50:11.74 .net
全く案が思いつかないので教えてください。
smb上のNASにあるファイルをSDカードにコピペしたいけど、コピーする順番がファイル名昇順でないと不具合が出るので、エクスプローラーではダメなんです。
cpコマンドにNASにあるファイルを指定する方法を教えてください。

419 :名無しさん@お腹いっぱい。:2016/01/30(土) 10:03:02.46 .net
ls でソートされなければ、
find sort awk cut xargs 等を組み合わせる

420 :名無しさん@お腹いっぱい。:2016/01/31(日) 10:50:47.29 .net
質問です。

topコマンドやuptimeコマンドで得られるload average
ですが、特定の顧客向けにWebで情報ながしてるサーバーの
それが、普通で10.00、ひどいときには30.00とかになったり
します。

このload average、つまり平均負荷が無名数ですが、何を表して
いると考えたらよいでしょうか? dBって事はないですよね。。。

421 :名無しさん@お腹いっぱい。:2016/01/31(日) 11:10:19.25 .net
>>420
待ち行列の長さ

422 :名無しさん@お腹いっぱい。:2016/01/31(日) 14:36:00.53 .net
>>420
http://d.hatena.ne.jp/keyword/%A5%ED%A1%BC%A5%C9%A5%A2%A5%D9%A5%EC%A1%BC%A5%B8

423 :名無しさん@お腹いっぱい。:2016/01/31(日) 16:34:32.83 .net
>>421 >>422
ありがとうございます。

>ロードアベレージが1以下であれば正常といわれていたが、
>最近のマルチコアCPUにおいては読み方が変わってきている。

なるほど、、、わかったようなわからんような。。。どう変わってきてる
か、知りたい。。。w
ま、いずれにしても、高負荷状態が続いているとみるべきなんですね。

424 :名無しさん@お腹いっぱい。:2016/01/31(日) 21:07:22.79 .net
>>423
もう少し読めよ
http://d.hatena.ne.jp/naoya/20070518/1179492085

425 :名無しさん@お腹いっぱい。:2016/01/31(日) 21:09:13.08 .net
procps-ng の uptime の説明が分かりやすい

uptime(1) - Linux manual page
http://man7.org/linux/man-pages/man1/uptime.1.html

426 :名無しさん@お腹いっぱい。:2016/02/02(火) 07:53:41.39 .net
>>424
さんくすです。

2コアだから、負荷は半分にした値を考えておけばいいのかな。

>注目するのは、待ちタスク数を数え上げるのにすべてのキューを見て
>合計する一方、その後出力するまでに CPU の数でその値を割ったりは
>していない、という点です。...ロードアベレージは割り算をしていない

427 :名無しさん@お腹いっぱい。:2016/02/02(火) 07:57:31.80 .net
>>425
頑張って読みます。どもです。

428 :名無しさん@お腹いっぱい。:2016/02/02(火) 09:57:29.33 .net
待ち行列とかキューとかの意味がわからずサーバー管理やってるんならな
OSのしくみをほんの少しでも勉強したほうがいいよ
特にタイムシェアリングとかプロセス管理のあたり

429 :名無しさん@お腹いっぱい。:2016/02/02(火) 11:43:42.95 .net
>>426
別に割る必要はないと思うけど
どれくらい溜まってるかを知りたいならだけど

430 :名無しさん@お腹いっぱい。:2016/02/02(火) 17:43:21.96 .net
UNIX上で、”コマンドを利用した”スクリプトを書き始めよう
と思っています。
そこで、pythonかbashのどちらを選ぶかで迷っています。
今日pythonパイソンの有名どころの本をみたら外部コマ
ンドの利用についての記述が少なくてがっかりしました。
素直に以下の本を読むべきなのでしょうか?
それともpythonの勉強して、ネット上で外部コマンドの
利用を紹介したサイトも勉強すべきなのでしょうか?
アドバイスお願いします

http://www.amazon.co.jp/gp/product/4797321946/ref=ox_sc_act_title_1?ie=UTF8&psc=1&smid=AN1VRQENFRJN5

431 :名無しさん@お腹いっぱい。:2016/02/02(火) 18:59:58.26 .net
>>430
マルチ
http://hayabusa6.2ch.net/test/read.cgi/linux/1452251761/324

432 :名無しさん@お腹いっぱい。:2016/02/02(火) 20:16:40.85 .net
言語はあくまで道具

何をしたいかによる

433 :名無しさん@お腹いっぱい。:2016/02/02(火) 21:43:18.36 .net
>>432
レスありがとうございました。マルチってそんなにいけないことなん
ですね。失礼しました。
5年以上ぶりぐらいに2chに戻ってたんで驚いてます。
板にもよるのでしょうが。
こちらだけにすればよかったです。

432さんのおしゃる通りだと思います。自分にとってはコマンド
利用してみたいので、まずはbashにしようかなと思ってます。

434 :名無しさん@お腹いっぱい。:2016/02/02(火) 22:48:53.08 .net
マルチ禁止は2chだけのルールではなく20年以上前のRFCにさえ書かれている基本中の基本

435 :名無しさん@お腹いっぱい。:2016/02/02(火) 23:02:32.01 .net
おまえら叩きすぎw

329 名前: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]
本人はそう思ってないんだろう
死ね

436 :名無しさん@お腹いっぱい。:2016/02/03(水) 00:07:58.02 .net
たたかれても懲りずに勉強してね

スクリプトを色々と探してきて、長さ順にリストアップする
{ 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

437 :名無しさん@お腹いっぱい。:2016/02/03(水) 06:35:39.85 .net
だいたい、bashとpythonどっちかっていう問題か?ww
どっちも並行してやるべき。

438 :名無しさん@お腹いっぱい。:2016/02/04(木) 06:50:05.93 .net
『20年動く』本読んだけどひたすら方言に配慮する話書いてあった
もうpythonでいいや

439 :名無しさん@お腹いっぱい。:2016/02/04(木) 08:44:03.15 .net
>>438
pythonは後付けのなので、そのうちなくなるかもしれません。

Windowsにはそういうものがありました。

440 :名無しさん@お腹いっぱい。:2016/02/04(木) 08:55:41.67 .net
なくならないにしても、python2のスクリプトのかなりがpython3で動かなくなるよ

441 :名無しさん@お腹いっぱい。:2016/02/04(木) 09:06:11.16 .net
pythonはなくなってもUNIXは困らない。

442 :名無しさん@お腹いっぱい。:2016/02/05(金) 01:28:36.41 .net
>>441
vimの拡張にpythonが採用されてることを知らないのか…

443 :名無しさん@お腹いっぱい。:2016/02/05(金) 02:35:34.81 .net
POSIXにvimもpythonも入って無いしな

444 :名無しさん@お腹いっぱい。:2016/02/05(金) 02:49:11.38 .net
UNIX開発にふつーにVIM使われてるぞ

445 :名無しさん@お腹いっぱい。:2016/02/05(金) 04:13:16.68 .net
特定のアプリケーションが使っているから、OSに必要という理屈が分からない。

446 :名無しさん@お腹いっぱい。:2016/02/06(土) 04:39:26.36 .net
>>438
方言覚えるのとPython覚えるの、労力そんなに違うか?

447 :名無しさん@お腹いっぱい。:2016/02/06(土) 06:08:30.34 .net
シェルスクリプトはOSの一部だからな。

pythonとは格が違う。

448 :名無しさん@お腹いっぱい。:2016/02/06(土) 09:18:43.54 .net
#!/usr/bin/shと書いてもbashが走るこんな世の中じゃ

449 :名無しさん@お腹いっぱい。:2016/02/06(土) 17:24:54.45 .net
#!/usr/bin/shと書いてシェルスクリプトを名乗るのか。

450 :名無しさん@お腹いっぱい。:2016/02/06(土) 18:52:59.16 .net
>>448
bashがbshのマネをする変なスクリプトたがら推奨しない。

451 :名無しさん@お腹いっぱい。:2016/02/06(土) 18:54:27.39 .net
>>449
スクリプトの種類を名乗る

452 :名無しさん@お腹いっぱい。:2016/02/06(土) 19:55:26.03 .net
本物と同じ名前の機能の違うコマンドを検索で優先されるディレクトリに置いちゃってドヤ顔する
バッドノウハウ使いの老害は早く死んで欲しい

453 :名無しさん@お腹いっぱい。:2016/02/06(土) 20:35:47.85 .net
大丈夫、そんな人はいない

454 :名無しさん@お腹いっぱい。:2016/02/06(土) 21:23:44.47 .net
/bin じゃなくて /usr/bin なのか?という話だろ

455 :名無しさん@お腹いっぱい。:2016/02/07(日) 04:25:51.93 .net
>>454
/usr/binと/binは基本的に一緒だが、環境によっては違うんじゃないの?

456 :名無しさん@お腹いっぱい。:2016/02/07(日) 12:45:47.23 .net
/usrを別パーティションにしてた頃の名残だよね

457 :名無しさん@お腹いっぱい。:2016/02/07(日) 18:02:30.90 .net
/sbinまでは認めてやっても良い

458 :名無しさん@お腹いっぱい。:2016/02/07(日) 19:26:38.34 .net
Linuxディストリの一部やSolarisではすべて/usrに移動してる(usr mergeまたはusr moveと呼ぶ)
/binと/sbinはシンボリックリンクで残ってる

459 :名無しさん@お腹いっぱい。:2016/02/08(月) 08:20:49.74 .net
いっそ、bashをオブジェクト指向に進化させれば、
pythonなぞいらなくなる

460 :名無しさん@お腹いっぱい。:2016/02/08(月) 10:14:57.97 .net
全角だとバカにしか見えないのは何故だ?

461 :名無しさん@お腹いっぱい。:2016/02/08(月) 10:31:10.92 .net
>>460
おっさんの可能性もある。

462 :名無しさん@お腹いっぱい。:2016/02/08(月) 10:49:58.88 .net
新聞社の方でしょう

463 :名無しさん@お腹いっぱい。:2016/02/08(月) 12:25:26.78 .net
綺麗な見た目に気を遣って作られたプロポーショナルフォントだと全く気にならない
幅が広けりゃいいんでしょ的なやっつけフォントや固定幅フォントを使って表示してると
バランスが悪いのでそうなる

464 :名無しさん@お腹いっぱい。:2016/02/08(月) 12:34:34.64 .net
>>460
裸の王様だからかな

465 :名無しさん@お腹いっぱい。:2016/02/08(月) 13:02:09.16 .net
shebang 行は、種類を名乗るといえば名乗っているけれど、
実際には、実行するコマンドラインを指定するもの


以下、補足
例えばこのスクリプトで試すと
$ cat ~/src/test/script
#!../bin/echo "hoge"
'fuga'

$ pwd
/usr

$ ~/src/test/script 'arg 1' "arg 2"
"hoge" /home/anonymous/src/test/script arg 1 arg 2

上では、結果的に
相対パス/echo "hoge" 引数0 引数1 引数2
が実行された結果が印字されている

普通に #!/bin/sh なスクリプトだと、結果的に実行されるのは次
/bin/sh path/to/スクリプト名 引数1 引数2 ...

466 :名無しさん@お腹いっぱい。:2016/02/08(月) 13:23:29.92 .net
>>465
shebangが種類を名乗るって何のこと?
そのスクリプトを処理するインタプリタを(引数込みで)指定する
以外の説明みたことないけど

467 :名無しさん@お腹いっぱい。:2016/02/08(月) 15:38:21.12 .net
>>466

>>449 !/usr/bin/shと書いてシェルスクリプトを名乗るのか。
>>451 スクリプトの種類を名乗る
>>465 shebang 行は、種類を名乗るといえば名乗っているけれど、

468 :名無しさん@お腹いっぱい。:2016/02/08(月) 17:11:40.36 .net
オプションも渡せるよ。
#!/usr/bin/bash -x
とかね。

469 :名無しさん@お腹いっぱい。:2016/02/08(月) 20:55:16.08 .net
>>468
それなら俺もお前も大体の奴が知ってる。

470 :名無しさん@お腹いっぱい。:2016/02/08(月) 23:06:27.57 .net
一個だけしか渡せないのは意外と知られていない

471 :名無しさん@お腹いっぱい。:2016/02/09(火) 00:18:04.86 .net
変数に含まれる記号で質問です。
curlで、サーバに置いてあるファイルを削除したいのですが、

curl -Q "DELE a.txt" host.sample.com
curl -Q 'DELE a.txt' host.sample.com

これだと動きました。
スクリプトで回したいときなどで変数に格納した場合で、

string="-Q 'DELE a.txt'"
curl ${string} host.sample.com

これだと、-Q以降の「 ”〜〜〜” 」で囲われた引数が伝わらないようで、動きませんでした。

> DELE
< 501 Invalid number of arguments

と返答がありました。

「"」そのものや「'」を変数で伝えるのは、一般的にどのように記述すればよいでしょうか。
記号で検索しても、なかなか情報が出ず、ヒントをお願いできればと思います。

472 :名無しさん@お腹いっぱい。:2016/02/09(火) 02:34:23.06 .net
>>471
curl "-Q 'DELE a.txt'" host.sample.com
ってことじゃん。
コマンドオブションが引数扱いってわけですね。

473 :名無しさん@お腹いっぱい。:2016/02/09(火) 06:18:16.59 .net
string="-Q 'DELE a.txt'"
eval curl ${string} host.sample.com
あるいは
set x -Q 'DELE a.txt'
shift
curl "$@" host.sample.com

474 :名無しさん@お腹いっぱい。:2016/02/09(火) 06:31:19.45 .net
書いている内に、別の解答が...しかも set x; shift の方が良い
とりあえず貼っておく

eval を使う
展開されたくない所は、何も考えずにシングルクォートしておく
$ set -vx #とりあえずデバッグ用に
$ opt471="-Q 'DELE a.txt'"
$ sh -c 'for arg; do echo "$arg"; done' parseArgs ${opt471} #質問時の状態
$ eval 'sh -c '\''for arg; do echo "$arg"; done'\'' parseArgs '${opt471}

set も使う
$ eval set -- ${opt471}
$ sh -c 'for arg; do echo "$arg"; done' parseArgs "$@"

bash の配列を使っても良い
$ opt471=(-Q 'DELE a.txt')
$ bash -c 'for arg; do echo "$arg"; done' parseArgs "${opt471[@]}"

475 :名無しさん@お腹いっぱい。:2016/02/09(火) 12:13:30.71 .net
とりあえず set -- も POSIX なんだけど
autoconf では set x ...; shift をすすめている


少し訂正
eval の際のクォートが抜けていた。連続した空白等で違いが出る
sh -c だと見難いので、function で書きなおした
$ parseArgs () { i=0; for arg; do echo "arg[$((i+=1))]: $arg"; done; }
$ opt471="-Q 'DELE (spaces) a.txt'"

$ eval parseArgs "${opt471}"

$ eval set -- "${opt471}"
$ parseArgs "$@"


ついでにIFS を使うもの
$ LF='
'
$ opt471='
-Q
DELE a.txt
'
$ IFS=$LF; parseArgs $opt471 'another option' 'more...'

476 :名無しさん@お腹いっぱい。:2016/02/09(火) 17:36:27.79 .net
>>471です。

>>472-475
たくさんの方法を、ありがとうございます!
のちほど実験してみます。

477 :名無しさん@お腹いっぱい。:2016/02/09(火) 19:11:23.15 .net
スクリプトの外部からやって来た文字列をエバると危険

478 :名無しさん@お腹いっぱい。:2016/02/09(火) 20:55:40.83 .net
個人的には、host.sample.comにコマンドを渡す
curl -Q "$*" host.sample.com
を関数かスクリプトにするかなぁ
単独でも使えそうだし

479 :名無しさん@お腹いっぱい。:2016/02/09(火) 23:45:01.02 .net
ごちゃごちゃ書いてしまったので、まとめてみる

結局の所
変数からクォートを考慮して単語分割するには、eval を使う

配列(もどき)に入れるには set か val=(...) もしくは改行区切り等

eval 無しだと、sed perl ruby 辺りで自力で単語分割
簡単なものなら xargs も使えるか

480 :名無しさん@お腹いっぱい。:2016/02/11(木) 07:29:09.80 .net
午前1時に
cu -l /dev/ugen0.2 > 160211.log
のコマンドを開始し、
23時間後の午前0時に停止する、というシェルスクリプトを作りたいと思っています。
ログファイルの名前は午前1時の時点の日付が入ります。

ここで質問なのですが、
指定した時刻でコマンド(cu)の起動、停止をするにはどうすれば良いのでしょうか?

OS:FreeBSD10.2-RELEASE
シェル:sh

です。

481 :名無しさん@お腹いっぱい。:2016/02/11(木) 09:25:45.48 .net
>>480
cronやat

482 :名無しさん@お腹いっぱい。:2016/02/11(木) 13:08:07.53 .net
>>481
ありがとうございます!!
これで幸せになれます!!

483 :480:2016/02/12(金) 08:51:56.08 .net
シェルスクリプトでcuのプロセスをkillしようとしたがうまくいかなんだ・・・。
結局、
・起動はcron
・cuからminicomに変更
・minicomのソフト改造
  ・ログファイルを設定なしで保存するように改造
  ・時間を見て終了するように改造
  ・タイムスタンプを設定なしでつけるように改造
で落ち着きそう。

うーんせっかくの有休だが、午前中はFreeBSDになりそうだ。

484 :名無しさん@お腹いっぱい。:2016/02/12(金) 09:40:24.87 .net
意味がわかんないけど普通にコマンドラインからkillしてもkillできないの?

485 :名無しさん@お腹いっぱい。:2016/02/12(金) 09:42:07.41 .net
cuはSIGHUPで殺すんじゃ無かったかな
うろ覚えだけど

486 :名無しさん@お腹いっぱい。:2016/02/12(金) 10:21:20.12 .net
cuを起動/停止するスクリプトを書いて
それをcronから呼び出したらどうかな
起動する時はrun_cu start、停止する時はrun_cu stopみたいな形で

で、起動する時に
cu -l /dev/ugen0.2 > 160211.log &
echo $! > /var/run/lock/run_cu.lock
とやっておいて、停止するときは
kill -HUP $(cat /var/run/lock/run_cu.lock)
みたいにすれば(要するに/etc/init.dにあるデーモンの起動スクリプトみたいな感じ)

487 :名無しさん@お腹いっぱい。:2016/02/12(金) 11:56:41.13 .net
いまいちよくわからん
スクリプトでプロセスIDが調べられないとかじゃないよね?
あとユーザが違っててrootのプロセスkillしようとしてるとか?

488 :名無しさん@お腹いっぱい。:2016/02/12(金) 13:36:32.98 .net
cuは送信プロセスと受信プロセスがいるから完全に殺せてないのでは

489 :480:2016/02/12(金) 20:39:39.88 .net
先ほど完了しました。
minicomの改造と、ログファイルの処理ソフト作るのに丸一日かかった。

1日vi使ってたから2chに書き込むのもj,k,l,hでカーソル移動したくなる。
>>484>>487>>488
うん・・・。できたり、できなかったり。
なんかcu -l /dev/ttyU0 > /unko/tinko/manko/log.txtを実行して、
ps ax | grep cu | grep -v grep
で、2つ出てきたり、出てこなかったり。
で、2つ出る場合には片方をkillしようとするとそんなプロセスないとか言われたり。

なんかもう、良く分からなくて投げ出しました。
>>485
SIGHUP知りませんでした。
minicomのソースの終了処理の中に
SIGHUPなんちゃらと書いてあったので、多分それが正解ですね。
いやぁ、SIGHUPで四苦八苦しました。
>>486
それスマートですね。私が作ったやつよりもw
ただ、まぁ、minicom使ったことでタイムスタンプ入れれたので、良しとします。

490 :480:2016/02/12(金) 20:42:48.13 .net
ちなみに何を作っていたかというと、温度計測システムです。

Xbeeってやつに温度センサーをつないで、無線で親機のXbeeに飛ばして、
親機からPCにシリアルで温度センサーの値を送信するシステムです。
で、ログファイルをsambaにおいておいて、別のPCから見る感じです。

テスト用に温度センサーは1個ですが、部屋中に設置する予定です。

491 :名無しさん@お腹いっぱい。:2016/02/13(土) 00:30:17.31 .net
viを使っている人はシェルのキーバインドもvi風?

492 :名無しさん@お腹いっぱい。:2016/02/13(土) 02:17:17.74 .net
>>489
pkillでできなかったの?

493 :名無しさん@お腹いっぱい。:2016/02/13(土) 02:27:10.99 .net
ちなみに自分は絶対止めたいときは複数回killする
やり方はループするなりsleepで間隔あけたりまちまちだけど

以下cuのマニュアルだけど仕様を理解するって大事だね

> リ モートシステムとの間でコネクションが設定された場合、 cu
> は 2 プロセスを fork します。1 プロセスは、ポートからの デ
> ー タ読みだしと端末へのデータ書き込みを行ない、もう 1 プロ
> セスは、端末からのデータ読み出しとポートへのデータ書き込み
> を受け持ちます。

494 :名無しさん@お腹いっぱい。:2016/02/13(土) 21:20:59.35 .net
bashで調べてもわからないので質問させてください。
次のような記述のとき、
この%はどのように解釈したらいいのでしょうか?
 OLDPATH=(../help/me)
 NEWPATH = $(OLDPATH:../%=./%_fuga)
文字列置換に使う場合と違うようですし、
調べても文字列置換以外に定義がでてきませんでした。
よろしくお願いします。

495 :名無しさん@お腹いっぱい。:2016/02/13(土) 22:07:33.70 .net
>>494
[user@f23 ~]$ OLDPATH=(../help/me)
[user@f23 ~]$ NEWPATH = $(OLDPATH:../%=./%_fuga)
bash: OLDPATH:../%=./%_fuga: そのようなファイルやディレクトリはありません
bash: NEWPATH: コマンドが見つかりませんでした...

496 :名無しさん@お腹いっぱい。:2016/02/13(土) 22:26:10.26 .net
http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
より

${parameter%word}
${parameter%%word}
パターンに後方一致した部分を取り除く。 word が展開され、パス名展開の場合と同じようなパターンを作ります。
このパターンが parameter を展開した値の末尾の部分とマッチする場合、展開結果は parameter を展開した値から
最短一致パターン (``%'' の場合) または最長一致パターン (``%%'' の場合) を取り除いたものになります。 parameter
が @ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして
得られます。 parameter が @ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全て
の要素に順番に適用され、 展開結果はリストとして得られます。


$()じゃなくて${}だんべな。
私は良くわかんない。後は詳しい人にまかせた。

497 :名無しさん@お腹いっぱい。:2016/02/13(土) 22:38:34.46 .net
>>495
なんでOLDPATH=の閉じカッコを半角に、そこだけ改変しちゃったの?

498 :名無しさん@お腹いっぱい。:2016/02/14(日) 00:07:40.09 .net
>>494
どこでそういう記述を見つけたのかな

499 :名無しさん@お腹いっぱい。:2016/02/14(日) 04:49:47.49 .net
仕事で改修やってるんだろ

500 :名無しさん@お腹いっぱい。:2016/02/14(日) 06:05:22.06 .net
どのように解釈したらいいも何も、NEWPATH の次にスペースが有る時点でおかしい
例示を見直して提示し直さない限り、どうにもならんな

501 :名無しさん@お腹いっぱい。:2016/02/14(日) 08:13:57.65 .net
なんの脈絡もない質問に答える義理はない
金払って仕事してもらえ

502 :名無しさん@お腹いっぱい。:2016/02/14(日) 09:11:58.95 .net
OLDPATH:../%=./%_fuga
という相対パスで指定されたファイルを実行し、その結果の前に=をおいてNEWPATHというコマンドを実行する

503 :名無しさん@お腹いっぱい。:2016/02/14(日) 14:58:59.31 .net
>>494
Makefile 全体とは言わんがもっと前後貼れよ

504 :名無しさん@お腹いっぱい。:2016/02/15(月) 05:51:37.58 .net
>>494 >>503
ここを釣り堀にする奴がいるとは思わなかったwww
そういえば Makefile を書いている時は似てるなあって思ったな

505 :503:2016/02/17(水) 23:08:47.15 .net
>>494 は結局返事なしか。
釣りだったってことかな。 イコールの前後に空白いれたり入れなかったりだったし。

一応 make/Makefile での動作例。

$ cat Makefile
OLDPATH = ( ../datadir1 ../datadir2 )
NEWPATH = $(OLDPATH:../%=../%_fuga)
all:
@echo "$(NEWPATH)"

$ make
( ../datadir1_fuga ../datadir2_fuga )

%の使い方は
http://quruli.ivory.ne.jp/document/make_3.79.1/make-jp_5.html
の 6.3.1節を参照しました。

506 :名無しさん@お腹いっぱい。:2016/02/23(火) 08:45:41.83 .net
BASH4.2 $> echo $((1 == 2))
0 #!!!
BASH4.2 $> echo $((1 != 2))
1 #!!!

BASH4.2 $> a=0
BASH4.2 $> echo $a
0
BASH4.2 $> echo $((a++))
0 #?
BASH4.2 $> echo $((a++))
1
BASH4.2 $> echo $((a++))
2
BASH4.2 $> echo $((a++))
3
BASH4.2 $> echo $((a--))
4 #!!!!
BASH4.2 $> echo $((a--))
3

507 :名無しさん@お腹いっぱい。:2016/02/23(火) 10:11:09.22 .net
不思議なことは何も起きていないな
シェルスクリプトの真偽値の表現と後置演算子の意味くらい覚えておけ

508 :名無しさん@お腹いっぱい。:2016/02/24(水) 08:11:13.70 .net
$a=0; echo $((a++))
0

$ a=0; echo $((++a))
1

509 :名無しさん@お腹いっぱい。:2016/02/24(水) 16:41:23.49 .net
なんら不思議でない

510 :名無しさん@お腹いっぱい。:2016/02/25(木) 07:06:49.38 .net
$ a=0; echo $(( ´∀`))
( ´∀`): コマンドが見つかりません

511 :名無しさん@お腹いっぱい。:2016/02/26(金) 20:53:20.57 .net
かわええ

512 :名無しさん@お腹いっぱい。:2016/02/26(金) 22:13:00.20 .net
うまくクオーテーション回避したね

513 :名無しさん@お腹いっぱい。:2016/02/26(金) 22:23:19.78 .net
$ a=0; echo $((a++++++a))
2

514 :名無しさん@お腹いっぱい。:2016/02/26(金) 22:30:46.28 .net
$ a=0; echo $((a+ +++++a))
1
$ a=0; echo $((a+++++ +a))
1
$ a=0; echo $((a+ ++++ +a))
0

515 :名無しさん@お腹いっぱい。:2016/02/27(土) 19:01:27.83 .net
こういう解釈かな?
$ bash -c 'a=0; echo $(( ( a++ ) + +( ++a ) ))'
2

シェルによって解釈が色々みたいだけど
$ ksh -c 'a=0; echo $((a++++++a))'
ksh: a++++++a: assignment requires lvalue

$ dash -c 'a=0; echo $((a++++++a))'
0

516 :名無しさん@お腹いっぱい。:2016/02/29(月) 18:15:35.93 .net
ここにいる人たちは誰かのシェルスクリプト見て
普通のプログラミング言語のようにループして処理してたら
ぷっって笑っちゃう方?

517 :名無しさん@お腹いっぱい。:2016/02/29(月) 18:57:25.92 .net
え? ループ処理しちゃ駄目なの?

518 :名無しさん@お腹いっぱい。:2016/02/29(月) 19:53:29.46 .net
>>516 が言う「ループ」とは変数のインクリメント((++i))とかのことかと。

519 :名無しさん@お腹いっぱい。:2016/02/29(月) 20:08:57.21 .net
>>516
コマンドの内部でループしているのと、スクリプトのループとは速度が違うし
また記述も単純になるから、自然とそうなるだけだし
スクリプトで人を笑ったりとかはしないかな

520 :名無しさん@お腹いっぱい。:2016/02/29(月) 20:36:41.53 .net
どんなループだよ

521 :名無しさん@お腹いっぱい。:2016/03/01(火) 12:43:43.79 .net
それより i=`expr $i + 1`が笑われないか心配。普通だよね(´・ω・`)

522 :名無しさん@お腹いっぱい。:2016/03/01(火) 12:55:47.44 .net
[ "z$1" = "ztest" ]
とかも笑われてるの?

523 :名無しさん@お腹いっぱい。:2016/03/01(火) 13:57:23.36 .net
話の流れが読めなかった >>519 が笑われてる

524 :名無しさん@お腹いっぱい。:2016/03/01(火) 20:21:04.65 .net
>>522
じゃ、どう書くと笑われないと思うんだ?
でも、最近はcaseで比較する事が多い。個人的に。

525 :名無しさん@お腹いっぱい。:2016/03/02(水) 00:02:25.01 .net
>>521
http://www.shellcheck.net/
SC2006 Use $(..) instead of legacy `..`.
SC2003 expr is antiquated. Consider rewriting this using $((..)), ${} or [[ ]].
SC2086 Double quote to prevent globbing and word splitting.

526 :名無しさん@お腹いっぱい。:2016/03/25(金) 00:25:36.80 .net
bash上でwhich sourceってコマンド打った時にsourceコマンドが見つからないって怒られるのが謎だったんですが、sourceコマンドはbashの組み込み関数だと聞きました。
ただdeclare -Fでもsourceって関数は定義されてないようなんですがどこで定義されているかわかりますか?

527 :名無しさん@お腹いっぱい。:2016/03/25(金) 01:32:44.95 .net
>>526
man source

528 :名無しさん@お腹いっぱい。:2016/03/25(金) 01:59:04.54 .net
>>526
type source

529 :名無しさん@お腹いっぱい。:2016/03/25(金) 02:11:33.46 .net
$ type source
source is a shell builtin

$ help source
source: source filename [arguments]
 Execute commands from a file in the current shell.

定義はソースコードの bash-4.3/builtins/source.def にある
source_builtin 関数

530 :名無しさん@お腹いっぱい。:2016/03/25(金) 05:01:14.68 .net
>>527-529
ありがとうございます!
ばっちりです!

531 :名無しさん@お腹いっぱい。:2016/04/02(土) 18:56:42.48 .net
>>521
ただ、そういう硬い書き方してる人のスクリプトは、bashの脆弱性が見つかった時でも
/bin/bash を /bin/ksh とかで代用できるからなんともいえん。

少なくとも i++ よりはポータブルだし

532 :名無しさん@お腹いっぱい。:2016/04/08(金) 08:53:02.48 .net
>>521
ほんの数年前までそれ以外の書き方をすると怒り出す、
純正シェルジジイが粘着してたんだが、リアル墓場行ったかな。喜ばしい事だ

533 :名無しさん@お腹いっぱい。:2016/04/09(土) 20:08:53.43 .net
我がスレ差分メール配送システムが2ヶ月くらい止まってたかのように
見えたのは、2ch鯖が変わっていたせいであったかw
今頃きづいたという。。。

534 :名無しさん@お腹いっぱい。:2016/04/12(火) 18:45:07.55 .net
初心者です。
こんどbashをやることになったのですが、シェルスクリプトの書いて覚える系のいい書籍はないでしょうか?
馬鹿なので読んだだけでは理解できないので手を動かすタイプのを教えてください。

535 :名無しさん@お腹いっぱい。:2016/04/12(火) 19:26:46.24 .net
>>534
シェルプログラミング実用テクニック

536 :名無しさん@お腹いっぱい。:2016/04/12(火) 20:11:06.76 .net
よろしくおねがいします。シェル初心者です。わかんないので、
いろんなサイトに書き込みしても
いろいろ うるさく 叱られます。これがユニックスの流儀なんでしょうか?
とくに言われることは「スクリプトに直接関係ないこと」は書き込むな、と言うことです。
「何でも教えてくれや」「ケチケチすんなよ」「初心者には親切にせろ」
ひとことで言うと これがおれの主張です。シンプルです。

なんで?現実生活でヘイコラしてるのに、ネット上まで、ネコかぶったり
しないといけないのか?とんと理解できません。
何より、バッシュとかGシェルとか、詳しいのが、なんでエライのか?
ここが根本的にわからん。
少し誇張した部分もありますが、素直な気持ちを書きました。

537 :名無しさん@お腹いっぱい。:2016/04/12(火) 20:22:51.31 .net
>>535
ありがとうございます。明日立ち読みしてみます。
>>536
あなたより大きい会社にいると思います。30前にして年収800万です。
ずっとWindowsだったのでわからないんですよね。

538 :名無しさん@お腹いっぱい。:2016/04/12(火) 20:25:20.93 .net
>>536
得意分野などで教える立場になった時、同じこと思うだろうか。

539 :名無しさん@お腹いっぱい。:2016/04/12(火) 20:38:02.87 .net
今の大きい会社って30前でもそんなモンなの?
小さい会社だと1000越えてるのにね。

540 :名無しさん@お腹いっぱい。:2016/04/12(火) 22:24:19.26 .net
>>536
おまえ Limux Mint 公式フォーラムでアラシ認定されたやつじゃね?

541 :名無しさん@お腹いっぱい。:2016/04/13(水) 01:49:11.16 .net
>>539
正社員なら800でもマシな方
なんせ上が詰まっててなかなか上がらないし

でもフリーや少数精鋭のとこなら1000は余裕で行く

542 :名無しさん@お腹いっぱい。:2016/04/14(木) 09:18:08.49 .net
うちはもう1000万じゃなくなったよ

543 :名無しさん@お腹いっぱい。:2016/04/14(木) 22:19:32.09 .net
>>534
サンプルコードがあるような本でも分からないなら、シェルスクリプトはやめた方がいい。

544 :名無しさん@お腹いっぱい。:2016/04/14(木) 22:21:13.69 .net
>>534
「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」を読みなさい。

545 :名無しさん@お腹いっぱい。:2016/04/15(金) 08:51:58.72 .net
ネタだろうけど、あんまり古過ぎる本勧めてやるな。

546 :名無しさん@お腹いっぱい。:2016/04/15(金) 11:45:17.59 .net
>>545
そもそもシェルスクリプト自体が変わっていないが?

547 :名無しさん@お腹いっぱい。:2016/04/15(金) 21:13:21.13 .net
だよね。
さすがに絶版だったらおいおいと思うが。

548 :名無しさん@お腹いっぱい。:2016/04/16(土) 00:27:13.14 .net
>>532
と言ってたら、bashの脆弱性が見つかったのは数年前だね

549 :名無しさん@お腹いっぱい。:2016/04/16(土) 05:01:00.01 .net
明日は我が身だが、2つの変数が両方とも空だった確率が0%じゃなければ、事故が起きてしまうな。
この場合は、どう書けばよかったの?

http://business.newsln.jp/news/201604151116100000.html

レンタルサーバー業者で、従業員のミスによりサーバー上の全データが削除されるという
あり得ない事態が生じたことが14日、英大手紙「Independent」の報道で明らかとなった。

このレンタルサーバー業者では、削除してしまったデータを復元するために、大手QAサイトのserverfaultに
「Recovering from a rm -rf /(rm -rf /から復元する方法を教えてください)」とする書き込みをすることで、
問題の解決方法を模索しているが「バックアップがない限り、復元は難しい」といった回答も寄せられている。

QAサイトのserverfaultでは、日ごろ、初心者からの質問から、かなりの高度な質問まで、様々な質問が寄せられるとただちに、
最適な回答が付く状態が続いているが、さすがのserverfaultの熟練回答者であっても
会社の全データを「rm -rf /」で削除した後にどのような有効な復元策を講じることができるのかは、回答に詰まる状況となっている。

このミスをしてしまったレンタルサーバー業者の管理人となるMarco Marsalaによると、
プログラム中で、「rm -rf {foo}/{bar} 」と指定することで全サーバーを対象に、特定のディレクトリーのファイルだけを削除するスクリプトを動かしたところ、
このプログラムのバグにより、特定のディレクトリーだけでなく、全てのディレクトリーが強制削除の対象になってしまったと説明している。

また、バックアップを事前に取っていなかったのかという質問については、
もちろんバックアップは取得していたが、この全削除のプログラムによりバックアップファイルも削除の対象となってしまったと述べている。
このレンタルサーバー業者は、1535のカスタマーを抱えているが、この事故の発生により、これら全てのカスタマーのファイルが無くなってしまった。

550 :名無しさん@お腹いっぱい。:2016/04/16(土) 09:24:48.15 .net
だから/は変数の中に入れておけとあれだけ

551 :名無しさん@お腹いっぱい。:2016/04/16(土) 10:06:55.21 .net
>>550
そういう問題ではない。

552 :名無しさん@お腹いっぱい。:2016/04/16(土) 10:35:23.38 .net
>>551
だったらどういう問題?

553 :名無しさん@お腹いっぱい。:2016/04/16(土) 10:51:02.13 .net
>>552
なんでテストしてないの?

554 :名無しさん@お腹いっぱい。:2016/04/16(土) 11:15:01.02 .net
バグがあっても大丈夫な設計を心がけろという話なのに
なんでテストしていないという話になる?頭大丈夫か?

555 :名無しさん@お腹いっぱい。:2016/04/16(土) 11:25:08.28 .net
あまりにアレで何か別のことを隠すためのうんたらかんたらを妄想してしまう記事だな

556 :名無しさん@お腹いっぱい。:2016/04/16(土) 13:52:26.18 .net
>>554
設計があって、テストをしないのはありえません。

557 :名無しさん@お腹いっぱい。:2016/04/16(土) 13:56:59.02 .net
>>554
だいたいそれは設計じゃないだろ。

ただのコーディングミスを防げために、コーディングミス用のロジックを書くのは阿呆すぎる。

558 :名無しさん@お腹いっぱい。:2016/04/16(土) 14:43:59.32 .net
>>557
フェイルセーフとフールプルーフの違いを学べよ

559 :名無しさん@お腹いっぱい。:2016/04/16(土) 15:25:19.31 .net
>>558
いかにもインフラの人間がいいそうなことだが、キミは開発側ではありえない助言をしている。

560 :名無しさん@お腹いっぱい。:2016/04/16(土) 15:27:25.43 .net
検証もしないで、ぶっつけ本番でそういう構成になっているから大丈夫という考え方はインフラでもありえない。

561 :名無しさん@お腹いっぱい。:2016/04/16(土) 15:28:05.09 .net
そもそも操作ミスではないじゃん。

562 :名無しさん@お腹いっぱい。:2016/04/16(土) 16:30:24.50 .net
バックアップは特定の権限でしか消せないとか、削除可能な範囲を絞るとか
万が一のためインフラ側で制限しないとダメなんだよ
それでもダメなときはダメだし

設計・テストとかプログラムのみでの対応はコストだけが跳ね上がるし現実的ではない
ジョブ管理システムやコンパイラのバグが絡んでくるともうお手上げになる

563 :名無しさん@お腹いっぱい。:2016/04/16(土) 18:08:55.67 .net
シェルスクリプトなのにコンパイラのバグ?

564 :名無しさん@お腹いっぱい。:2016/04/16(土) 19:49:59.88 .net
例で示しただけだから別にインタプリタでもなんでもいいよ

565 :名無しさん@お腹いっぱい。:2016/04/17(日) 01:23:14.24 .net
バグに絡まれやすそうな奴だな

566 :名無しさん@お腹いっぱい。:2016/04/17(日) 07:15:51.53 .net
>>549
rm -rfはシェル関数で。直接使う事は禁則。
rmしないでmv。定期的に掃除

567 :名無しさん@お腹いっぱい。:2016/04/18(月) 20:09:07.34 .net
>>549
http://japanese.engadget.com/2016/04/15/rm-rf-qanda/

568 :名無しさん@お腹いっぱい。:2016/04/18(月) 20:24:48.32 .net
ひでーw
__
タヒんでしまえよ

569 :名無しさん@お腹いっぱい。:2016/04/18(月) 22:44:34.25 .net
シェルショッカーとかいうおじさんおるよな

570 :名無しさん@お腹いっぱい。:2016/04/25(月) 19:04:26.09 .net
bashで、新しいscreenウィンドウを開いてそこで引数で指定したコマンドを実行する関数
を作りたいのですが、引数の展開をどうやればいいかで悩んでいます。
# 例:sc tail -f ./hoge.log
sc() {
# "cd $PWD; $@"ではダメだった
screen -t "$1" -X screen bash -c "cd $PWD; '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'"
}
10個以上の引数に対応するにはどう書くのがいいでしょうか?

571 :名無しさん@お腹いっぱい。:2016/04/25(月) 21:45:04.21 .net
>>570
"cd $PWD; $@" だと screen のコマンド全体が、
"screen" "-t" "$1" "-X" "screen" "bash" "-c" "cd $PWD; $1" "$2" ...
という引数に展開される。
これは "cd $PWD; $@" がまず、"cd $PWD; ""$@" に変換され、
"$@" が "$1" "$2" ... に展開されて
"cd $PWD; ""$1" が連結されて "cd $PWD; $1" になるため。

なお set - "$@" cd "$PWD" ";" "$@" したら、 screen に渡るのは ; までで肝心のコマンドは渡らない。

"cd $PWD; $*" だと "cd $PWD; $1 $2 $3 ..." (配列としては展開されずに1つの文字列扱いになる)
に展開されて意図した動きになる。 ただ、引数に空白が入る場合はエスケープ入れないとNGね。

572 :570:2016/04/26(火) 19:09:31.05 .net
空白のエスケープはどうやればいいんでしょう?

573 :名無しさん@お腹いっぱい。:2016/04/26(火) 19:43:17.56 .net
>>572
シングルクォートと空白の例。
sc() {
  screen -t "$1" -X screen bash -c "cd $PWD; $*"
}

sc date +Date=\\\'%y\\\ %m/%d

574 :名無しさん@お腹いっぱい。:2016/04/27(水) 12:24:16.19 .net
...なんだかなあ
与えたスクリプトの中で、展開すれば?
sh -c 'some command; "$@"' 'dummy' "$@"


sc() {
  screen -t "$1" -X screen bash -c 'cd $PWD; "$@"' 'dummy' "$@"
}

575 :570:2016/04/27(水) 19:13:45.99 .net
なるほど、dummy 以降が -c で与えたコマンドへの引数になることを利用するわけですね。

ちなみに
screen -t "$1" -X screen bash
は冗長で
screen -t "$1" bash
でいいみたいでした。

576 :名無しさん@お腹いっぱい。:2016/04/27(水) 21:07:51.80 .net
-c の次の次の引数からが $0 以降になるとは知らなかったなぁ。 勉強になったわ。
これは -c AAA BBB CCC DDD ... のとき、BBB 以降は実行されないけど BBB が $0 として、
CCC DDD ... が引数としてセットされた状態でプロセスが開始され、実際に実行される内容の
AAA 内に展開されずに渡された "$@" があるので CCC DDD ... が実行されるってことかな。

ちなみに cd の部分は 'cd "'"$PWD"'"; "$@"' の方がいいかな。
( パスに空白が入っていてもエラーにならないがダブルクォーテーションが入っていたらNGではあるが。 )

577 :名無しさん@お腹いっぱい。:2016/05/12(木) 21:13:45.79 .net
コマンド応答が返ってくるまでの表示に文字を回転させてりしてみたくなった。
例えば、「*」がくるくると回っていたり・・・

578 :名無しさん@お腹いっぱい。:2016/05/13(金) 00:30:46.45 .net
ええね

579 :名無しさん@お腹いっぱい。:2016/05/13(金) 19:21:12.15 .net
>>577
難しい…どなたかヒントを

580 :名無しさん@お腹いっぱい。:2016/05/13(金) 20:19:09.81 .net
>>579
なんだよ、すごい目算があって開発宣言したと期待してたのに

まず、文字回すのは無理
/|\-を同じ位置で順番に繰り返す出す程度

あと、コマンド実行中は通常シェルはwait状態で止まってしまうので
コマンドをバックグラウンドで起動してシェルを動かし続けるか
別プロセスを同時に起動してそいつに表示させる必要がある
どっちもコマンドラインで明示しなきゃならん
普通に起動して同じことをさせるにはシェルの改造くらいしか思いつかん
それともzshくらいになるとすごいモジュールがあったりするのだろうか

581 :名無しさん@お腹いっぱい。:2016/05/13(金) 20:43:34.11 .net
OpenGLでぐりぐり回そうぜ

582 :名無しさん@お腹いっぱい。:2016/05/13(金) 20:57:15.29 .net
bash 依存だけど、こんなんでどう

sleep 10 & {
tput civis
while kill -0 %- &>/dev/null
do
for c in {-,/,\|,\\}
do
printf '%c\r' $c
sleep 0.1
done
done
tput cvvis
}

途中で interrupt されるとカーソルが見えないままになるけど

583 :名無しさん@お腹いっぱい。:2016/05/14(土) 20:15:01.86 .net
npm見れば解決しそう

584 :534:2016/05/21(土) 22:04:30.88 .net
>>535
お陰さまで最低限現場の記述ルールに則ったものは普通に作れるようになりましたm(_ _)m

585 :名無しさん@お腹いっぱい。:2016/05/23(月) 00:15:19.48 .net
>>559
超遅レスだかインフラでも
そんな事言わないあり得ない偏見すごいな
>>558
が伝えたいニュアンスは分かるけど
端的に考え方を言い表したいがために
登場場面が根本的に違う2つの用語だけで
端的に伝えようとするセンスが酷い
それにそもそも元の話と何かズレてるし
後輩育成とかは絶対に任せられないタイプ

586 :名無しさん@お腹いっぱい。:2016/05/23(月) 08:05:15.40 .net
ログファイルのローテート処理のお勧め教えれ
元ファイルをコピーしてヌルを上書きすると
一瞬ログの内容ロストするから

587 :名無しさん@お腹いっぱい。:2016/05/23(月) 08:55:28.11 .net
>>586
ログを出す側で制御 (SIGHUPとかで出力ログファイルを開きなおす) してくれないとその問題は防げない。

mkfifo で FIFO ファイル作ってログローテーション用後続スクリプトに一旦渡す方法やパイプで後続スクリプトに
渡してローテーションする方法も考えられるけど、FIFO のバッファがいっぱいになるとメインプロセス側が処理
待ち(write がブロック)したり、後続スクリプトの異常終了で SIGPIPE 食らってメインプロセスが死んだりする
のでお勧めできないそうな。

588 :名無しさん@お腹いっぱい。:2016/05/23(月) 16:33:22.23 .net
syslogdを kill -STOP; ... ; kill -CONT じゃダメなん?

589 :名無しさん@お腹いっぱい。:2016/05/23(月) 17:04:28.65 .net
logrotateでええやろ

590 :587:2016/05/23(月) 23:22:16.85 .net
>>588
syslogd がつかんでいるのはファイルハンドルであってファイルのパスじゃない。
なのでそれをやっても、リネームした古いファイルの方に書き続けてしまう。
例えば /var/log/messages に書き続けている状態でファイルを mv して messages.1 にしても、syslogdは
messages.1 の方に書き続ける。
kill -HUP するとファイルハンドルを閉じて /var/log/messages を開くので、ここでようやく messages 側に書き始めるわけ。
# STOP/CONT は意味がない。 logrotate では syslogd のログについては HUP しかしない。

>>589
logrotate の samba のログ設定には copytruncate って書いてあるでしょ?
つまり logrotate が >> 586 の言う「コピーしてファイルを空にする」処理をやっている。
samba は syslogd のような開きなおす処理をしてくれないからこの実装にせざるを得ない。

591 :名無しさん@お腹いっぱい。:2016/05/24(火) 04:38:11.44 .net
>>590
kill -HUP に対応してないsyslogdだったら、という話だろ。

kill -STOP してからログファイルを別ファイルにcpして、元のログは > file でゼロにする。
それで -CONT すればいいという話。

>syslogd がつかんでいるのはファイルハンドルであってファイルのパスじゃない。
というのは当然知ってるだろ。

592 :名無しさん@お腹いっぱい。:2016/05/24(火) 08:44:45.64 .net
スレ違いになりつつあるが、便乗して質問。
STOP -> truncate -> CONT って安全?
TCP/UDPで待ち受けしているプログラムで syn やメッセージ取りこぼしたりとかしない?
fork する奴にも使える?

593 :名無しさん@お腹いっぱい。:2016/05/24(火) 09:37:37.23 .net
>>592
TCPなら再送含めてOSがうまくやる
UDPだとバッファあふれたら消える
もともと消えるの前提だから再送はアプリの自己責任
forkしたら止まるのは当たり前だが指定したプロセスだけ
プロセスグループを指定したら該当するやつ全部
どの辺が疑問なのかむしろ知りたいわ

594 :592:2016/05/24(火) 20:11:40.98 .net
>>593
THX

> どの辺が疑問なのかむしろ知りたいわ
logrotate コマンドの copytruncate の欄に SIGSTOP すると良い、とは書かれていない
あたり、何か不都合があるんじゃないかと思うんだがどーよ?

595 :名無しさん@お腹いっぱい。:2016/05/24(火) 22:53:24.96 .net
>>594
そいつとtcpもudpもforkも関係ないのになんで出てきた?

596 :名無しさん@お腹いっぱい。:2016/05/25(水) 08:40:27.70 .net
tcp 再送は5分までいけるが、ロードバランサー/L7swの監視の場合にはファイルコピーしている
ちょっとした間にサービス停止として検知される可能性があるな。

597 :名無しさん@お腹いっぱい。:2016/05/25(水) 15:06:05.26 .net
>>596
5分って、どこの標準か興味がある。

598 :名無しさん@お腹いっぱい。:2016/05/27(金) 20:10:08.30 .net
>>586
普通は単純にリネームしてタッチする

599 :名無しさん@お腹いっぱい。:2016/05/28(土) 12:10:25.23 .net
タッチして逮捕されたらリネームじゃないのか。

600 :名無しさん@お腹いっぱい。:2016/05/29(日) 01:58:44.16 .net
つ 座布団

601 :名無しさん@お腹いっぱい。:2016/05/29(日) 20:46:35.04 .net
ユニックスの入門本が一冊欲しいのですが何がいいでしょうか
特定のコマンドやシェルのノウハウとかではなく
多くの場面で通用する本当に基礎的な知識を学びたいと思っています
私自身はいずれシェルを書きたいと思っていますが
LS、CPコマンドなどの使い方を知りたいわけではないということです

602 :名無しさん@お腹いっぱい。:2016/05/29(日) 20:57:27.92 .net
>>601
UNIXスーパーテキスト
ってまだ売ってたっけ?

603 :名無しさん@お腹いっぱい。:2016/05/29(日) 21:40:46.70 .net
>>601
古い本だけど砂原秀樹さんほかの『プロフェショナルBSD』
UNIXのコマンドはこういうふうに使うという根本的なことの理解に役立つ

604 :名無しさん@お腹いっぱい。:2016/05/29(日) 22:26:33.91 .net
スレチにも回答してあげるとは優しいやつばっかやな

605 :名無しさん@お腹いっぱい。:2016/05/29(日) 23:19:55.20 .net
>>601
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

名著です。

これを挙げると古いとか文句を付ける馬鹿がいますが、無視してください。

606 :名無しさん@お腹いっぱい。:2016/05/29(日) 23:20:36.49 .net
あげ

607 :名無しさん@お腹いっぱい。:2016/05/30(月) 00:14:11.32 .net
>>604
お前の心が汚れているだけだ

608 :名無しさん@お腹いっぱい。:2016/05/30(月) 03:08:51.89 .net
shell から emacs 起動して終了すると、
[1] Done emacs
って出るよな?これって何が出しているんだろう?出来れば止めたい。

609 :名無しさん@お腹いっぱい。:2016/05/30(月) 04:52:05.02 .net
>>608
set +m しておくと出なくなるよ。(出してるのはシェル自身)

610 :名無しさん@お腹いっぱい。:2016/05/30(月) 09:25:10.53 .net
vim7.4使ってますが、書き込み時、sh -n みたいな、構文・文法チェックを
する方法はないでしょうか?
vimプラグインのsyntasticも試してみたのですが、.vimrcの記述のせいか
うまく動いてないようで。

何か簡単でうまい方法ありましたら、ご紹介ください。

611 :名無しさん@お腹いっぱい。:2016/05/30(月) 10:19:27.79 .net
>>609
どうもです。なるほどシェルが出しているのですか。
でも、なぜ emacs しか出ないのでしょう?

教えていただいた set +m 「ジョブ制御の無効」は bash のみでしょうか?
私は tcsh なのですが、tcsh でも同様の事は可能でしょうか?

612 :名無しさん@お腹いっぱい。:2016/05/30(月) 18:00:07.40 .net
ひとつ質問

シェルで2つの日時を元に所要時間を求めたい場合ぐぐるといろいろ方法はありますが
これが便利なコマンド一発で用意されていないのは需要がないと言うか
需要があった人が最終的に誰でも使える簡単な形にせずに終わらせたってことなんでしょうか?

613 :名無しさん@お腹いっぱい。:2016/05/30(月) 18:55:30.71 .net
>>612
広く使われるほどの需要はなかった

614 :名無しさん@お腹いっぱい。:2016/05/30(月) 19:36:20.17 .net
dateコマンドのオプションに互換性がなかったから。
GNU date限定とかならいいんだけど

615 :名無しさん@お腹いっぱい。:2016/05/30(月) 21:40:48.25 .net
内部的にUNIX時間で持てば差分計算は簡単なような

616 :名無しさん@お腹いっぱい。:2016/05/31(火) 08:52:48.30 .net
>>615
32bitマシンが絶滅するまでは難しいな。
あと20年普通に残りそうだし

617 :名無しさん@お腹いっぱい。:2016/05/31(火) 21:45:59.92 .net
内部的にUNIX時間で持つってどういうこと?
内部というのは環境変数やシェル変数という意味?

618 :名無しさん@お腹いっぱい。:2016/05/31(火) 23:23:59.98 .net
256bit機が普及するまで32bit機はなくならないだろうね。

619 :名無しさん@お腹いっぱい。:2016/05/31(火) 23:24:37.85 .net
>>617
epochからの時間ってことじゃない?
>>616
difftime(3)て32bitと64bitで違うのかな

620 :超音波テロの被害者:2016/06/01(水) 16:02:45.59 .net
超音波テロの被害にあっています。
卑劣極まりない被害にあっています。

何が起こったかわからないときから、
わかってみれば、
まだ世の中に知られていない超音波テロ。

世の中の多数の振動源・発信源が
システム化され、 ネットワークを通して、
超音波・音波を集中させて
対象を攻撃するらしい。

超音波による物理的な力で、
ものが飛び、ものが壊れる。
それが人間の体に対してまで。

形のあるもの、ないもの、壊され、奪われ、
聞こえる声、音。超音波テロの加害者の声。
卑猥な内容、卑劣な内容、脅しやいたぶり。

621 :超音波テロの被害者:2016/06/01(水) 16:03:08.53 .net
身体の表面を突き抜け、内臓を攻撃される。
頭蓋骨を突き抜け、意識を失わされる。
臓器不全やがん、命に関わることまで。
人間の身体を壊そうとする超音波テロ。

日本国中、どこにいても超音波で襲われる。
車に乗っている人間が襲われる。
歩いている人間が襲われる。
自宅で超音波の攻撃を受ける。

人や社会が超音波で襲われ、
罪もない人が超音波で襲われ、
卑劣な被害にあっています。
被害を訴えても信じてもらえない。

「見続けるのがいやだから、殺して終わる」、
「証拠隠滅だ」という超音波テロの加害者の声とともに
強烈な超音波の攻撃。

叫ばされ、いたぶられ、それを口実にまた攻撃され、
超音波テロの、残酷残虐で、卑劣な攻撃の被害にあっています。
心の底から被害を訴え、祈っています。

天に神に届きますように。

622 :名無しさん@お腹いっぱい。:2016/06/01(水) 17:45:47.97 .net
>620
これなんつーシェルのスクリプトですか?

623 :名無しさん@お腹いっぱい。:2016/06/02(木) 07:52:05.22 .net
/bin/jpsh

624 :名無しさん@お腹いっぱい。:2016/06/02(木) 08:00:02.53 .net
/bin/chouonpa/itaburare

625 :名無しさん@お腹いっぱい。:2016/06/05(日) 11:03:53.19 .net
ディレクトリを指定する時って、「/dir/」が正しいのか、「/dir」
にすべきか、最後の/をつけるかつけないかでどんな違いがあるのか
いつもすごく気になる。

626 :名無しさん@お腹いっぱい。:2016/06/05(日) 13:34:06.57 .net
>>625
rsync や ln 、mv あたりはありなしで挙動がかわる。
ln や mv はオプションで一応制御できるけど

627 :名無しさん@お腹いっぱい。:2016/06/09(木) 19:13:38.61 .net
json形式のデータをSQLのjoinみたいにキーで結合したいのですが
いいスクリプト知りませんか?
jqはできそうな感じなんだけど、サンプルのページが見当たらなくて

628 :名無しさん@お腹いっぱい。:2016/06/09(木) 21:10:02.49 .net
>json形式のデータをSQLのjoinみたいにキーで結合したいのですが

cpanモジュール使うべし。
力技でゴリゴリでもできるかもしらんが、時間の無駄

629 :名無しさん@お腹いっぱい。:2016/06/09(木) 22:45:45.43 .net
>>627
データがどんなもんか分からないので何とも言えないけど例えば
[
{"id": 1, "name": "Tom", "gender": 1},
{"id": 2, "name": "Alice", "gender": 2},
{"gid": 1, "gender": "male"},
{"gid": 2, "gender": "female"}
]
なんてJSONファイルがあって gender と gid で join する場合、

jq '
map(
(select(has("id")) | { k: .gender, v: { id: .id, name: .name }}),
(select(has("gid")) | { k: .gid, v: { geder: .gender }})
)
| group_by(.k)
| map((map(.v) | add))
' data.json

かなぁ。

630 :629:2016/06/10(金) 01:11:22.91 .net
あー、しまった、思いっきり間違えた…

jq '
(map(select(has("gid")) | {(.gid|tostring): .gender}) | add) as $g
|
map (select(has("id")) | .gender = $g[(.gender|tostring)])
' data.json

631 :名無しさん@お腹いっぱい。:2016/06/10(金) 01:28:18.48 .net
[
{
"id": 1,
"name": "Tom",
"gender": "male"
},
{
"id": 2,
"name": "Alice",
"gender": "female"
}
]
できました、できましたけど書き方わからないです><

>>628
cpan使うのが主流なんですか?

632 :名無しさん@お腹いっぱい。:2016/06/10(金) 01:54:22.40 .net
>>631
json 形式のデータを DB に insert する方法を調べた方がいいかも

633 :名無しさん@お腹いっぱい。:2016/06/10(金) 14:14:19.71 .net
>>631

いやそういうわけではなくて、pythonでもrubyでもいいけど
JSONとかXMLとかYAMLなどの定形式な文書からスライスして取
り出すなら、すでにある専用モジュールとか使ったほうが断然
速いってはなし。俺はperlしかわからんのでcpanモジュール。

perlなら
use JSON::XS;
して、

my $json = 'json.txt'
my $data = decode_json($json); #jsonからperlのハッシュに変換

あとは、ハッシュの内容をダンプしてデータ構造みながら
必要なデータだけを拾う。

print %$data{features}->[$cnt]->{properties}->{title} .

634 :名無しさん@お腹いっぱい。:2016/06/10(金) 16:33:17.98 .net
使うべしって言った割にショボ過ぎ

635 :名無しさん@お腹いっぱい。:2016/06/10(金) 22:15:34.82 .net
スレ的にもここはあくまでシェルスクリプトでやるべきだろ

なんでもありなら今はPythonの方がメジャー
もしくはRubyとか

636 :名無しさん@お腹いっぱい。:2016/06/10(金) 23:07:20.19 .net
場違いだったらすまん。
gomプレイヤーとかのソフト立ち上げるとスクリプトエラー出るんだけどどうしたらいい?
http://imgur.com/9hlJu8w

637 :名無しさん@お腹いっぱい。:2016/06/11(土) 00:12:44.31 .net
スレチ

638 :名無しさん@お腹いっぱい。:2016/06/11(土) 00:34:35.87 .net
スクリプトエラーとやらがでる

にちゃんでスクリプトで検索

シェルスクリプトとかよくわからんけどスクリプトって入ってるからここに書けば誰か完璧な答えを出してくれるはず


ゆとり、ここに極まれり

639 :名無しさん@お腹いっぱい。:2016/06/11(土) 03:40:49.78 .net
引数を受けて同名のサブディレクリ直下にある全てのシェルスクリプト(.sh)を実行するってどう書けばいいんでしょうか?

640 :名無しさん@お腹いっぱい。:2016/06/11(土) 03:41:43.14 .net
bash環境です。同名とは引数に指定された文字です

641 :名無しさん@お腹いっぱい。:2016/06/11(土) 03:53:01.79 .net
find 引数 -name *.sh -exec {};
こんな感じなのだろうか。

642 :名無しさん@お腹いっぱい。:2016/06/11(土) 04:14:09.33 .net
ありがとうございます
こんな感じで良いのかな?

find 引数 -maxdepth 0 -name *.sh -exec bin/sh -c ' {} ' \;

643 :名無しさん@お腹いっぱい。:2016/06/11(土) 10:22:42.97 .net
シェルスクリプトじゃないけどrun-partsが似たような仕事するね

644 :名無しさん@お腹いっぱい。:2016/06/12(日) 05:31:11.76 .net
for sh in $dir/*.sh; do $sh; done

645 :名無しさん@お腹いっぱい。:2016/06/12(日) 11:11:52.76 .net
Cygwin(bash)で特定の拡張子の映像ファイルをforループ文でまわして処理したいと思っています

for input in *
do
 (処理)
done

これだと映像ファイルだけでなく全てのファイルが対象になってしまいます。
そうではなくて WMV、MP4、AVI、MPEG、MPGといった映像ファイルだけを
処理するにはどうしたらいいでしょうか?

646 :名無しさん@お腹いっぱい。:2016/06/12(日) 11:15:55.66 .net
>>645
そもそもなんでファイルを振り分けてないのか?

647 :名無しさん@お腹いっぱい。:2016/06/12(日) 11:25:58.85 .net
>>646
ffmpegで処理してるので映像ファイルの種類は分けなくても良かったりします
あ、ただ変換後の拡張子は統一するようスクリプトを書かないといけませんね

648 :名無しさん@お腹いっぱい。:2016/06/12(日) 11:44:06.36 .net
>>645

for input in $(ls -1 *.{wav,mp4,avi,mpeg,mpg} 2>/dev/null)
do
 (処理)
done

とか。

649 :名無しさん@お腹いっぱい。:2016/06/12(日) 11:52:44.28 .net
>>648
これじゃダメな場合があるんだっけ?

for input in *.wav *.mp4 *.avi *.mpeg *.mpg
do

done

650 :名無しさん@お腹いっぱい。:2016/06/12(日) 12:07:38.74 .net
.wavファイルがないとinputには"*.wav"がそのまま入る
だけど、ループの中で処理する時に
[ -f "$input" ] || continue
とでもしとけばいいよね

651 :名無しさん@お腹いっぱい。:2016/06/12(日) 12:36:44.21 .net
>>648
>>650
なるほど、そういう方法がありましたか。
ありがとうございますm(_ _)m

>>649
>>650さんのご指摘通りその拡張子のファイルが無いとそのまま入っちゃうって問題がありますね

652 :名無しさん@お腹いっぱい。:2016/06/13(月) 20:14:40.91 .net
テキストファイルの最終行に改行がないときだけ
改行を追加するようなスクリプトってどう書けばいいでしょうか?

653 :名無しさん@お腹いっぱい。:2016/06/13(月) 22:21:10.97 .net
>>652
それ、自分が前悩んで作ったのがある。誰か改善してくれ
#!/bin/sh
file=$1
test -f $file || exit 0

# if size -eq 0; then exit 0
if [ ! -s $file ]; then
 exit 0
fi

# if the last character is not \n, then echo
if [ "$(tail -c 1 $file | cat -A)" != "$" ]; then
 echo
fi
if ! tail -n 1 $file | grep '^$' > /dev/null ; then
 echo
fi

654 :名無しさん@お腹いっぱい。:2016/06/13(月) 22:23:13.08 .net
test -n "$(tail -n1 TXT)" && echo > TXT

655 :652:2016/06/13(月) 22:28:48.20 .net
すまない。>>653はmbox形式のファイルにメールを追加するために作ったスクリプトだった
だから>>652さんの求めているスクリプトとはちょっと違った_o_

656 :名無しさん@お腹いっぱい。:2016/06/13(月) 22:49:39.12 .net
>>654
ファイルがぶっ壊れちゃったじゃないか(#゚Д゚) ゴルァ!!
なんつって

657 :名無しさん@お腹いっぱい。:2016/06/13(月) 22:58:56.61 .net
>>653
ありがとうございます
最終文字を取り出して調べるというわけですね
いじれそうです
たぶんGNUのtailが必須じゃないかと思うのですが、
非GNU環境でも動くようにはならないでしょうか

658 :名無しさん@お腹いっぱい。:2016/06/13(月) 23:07:30.48 .net
>>654
ありがとうございます
ただ、これは目的の動作ではありません
末尾に空行が欲しいのではなく、
改行文字で終わっていない最終行に改行をつけたいのです

659 :名無しさん@お腹いっぱい。:2016/06/14(火) 00:26:19.34 .net
>>652

#!/bin/sh
echo wq | ed "$1"

660 :名無しさん@お腹いっぱい。:2016/06/14(火) 00:51:00.50 .net
>>652

for f in *.txt
do
[ $(tail -1 "$f" | wc -l) -eq 0 ] && echo >> "$f"
done

661 :名無しさん@お腹いっぱい。:2016/06/14(火) 00:57:30.09 .net
>>652

for f in *.txt
do
{ tail -1 "$f" | read; } || echo >> "$f"
done

662 :名無しさん@お腹いっぱい。:2016/06/14(火) 02:14:34.40 .net
edかex使ったほうが楽なんじゃないか

663 :名無しさん@お腹いっぱい。:2016/06/14(火) 02:55:20.33 .net
659 と 661 の違いは空ファイル(サイズ0)の場合。
ed はそのままだけど、tail -1 ... | read では newline が追加される。

664 :名無しさん@お腹いっぱい。:2016/06/14(火) 17:09:51.68 .net
>>659-663
みなさんありがとうございます
edは思いつきませんでした
どこでもあるかと思ったらないのもありますね。exはありそうです
改行のない最終行がwcにカウントされないとか
改行がないとreadがエラーコード返すとか
すごくためになりました
空ファイルの動作の差についてはサイズを調べて分岐すればいいですね

665 :名無しさん@お腹いっぱい。:2016/06/15(水) 01:17:10.55 .net
>>652
sed -i -e '$a\' file
http://unix.stackexchange.com/questions/31947/how-to-add-a-newline-to-the-end-of-a-file

666 :名無しさん@お腹いっぱい。:2016/06/15(水) 02:02:23.61 .net
ed や sed で追加する場合は元々ファイルの末尾に "\n" があるファイルの
タイムスタンプを更新してしまうんだな

667 :名無しさん@お腹いっぱい。:2016/06/15(水) 14:17:26.63 .net
おまえら知らんだろうけど、俺の家のそばの歩行者信号はUNIXのコンソールみたいに
青になるまで(赤になるまで)ドット(.)の点滅がひとつずつ消えていくんだぜ・・?

夜なんか見るとKDEみたいな感じですげえカッコイイぜ。

668 :名無しさん@お腹いっぱい。:2016/06/15(水) 14:54:39.46 .net
眼科行けよ・・・

669 :名無しさん@お腹いっぱい。:2016/06/15(水) 14:58:10.28 .net
日常生活の夜景にKDEを妄想する病気か。
IT土方の後遺症

670 :名無しさん@お腹いっぱい。:2016/06/15(水) 17:06:08.30 .net
>>665
おお、これはシンプルですね
空ファイルでもちゃんと対応できています
man見てもそんな動作するとは明示されてないのですが
安定した仕様と考えていいのでしょうか

671 :名無しさん@お腹いっぱい。:2016/06/15(水) 19:20:41.67 .net
$ <- 最終行
a <- add. 置換ならsが有名. pでprint
\ 何もない シェルスクリプトでも改行またぐときに使うやつ

類似した構文
seq 20 | head
seq 20 | sed -n '1,10p'

672 :名無しさん@お腹いっぱい。:2016/06/15(水) 21:22:12.46 .net
それだったら

seq 20 | sed 10q

の方が良いかもしんない

673 :名無しさん@お腹いっぱい。:2016/06/16(木) 01:11:19.56 .net
>>652
http://stackoverflow.com/questions/10082204/add-a-newline-only-if-it-doesnt-exist
awk
{ rm file;awk 1 >file; }<file

bash
[[ $(tail -c1 file) && -f file ]]&&echo ''>>file

674 :名無しさん@お腹いっぱい。:2016/06/16(木) 14:28:12.81 .net
>>673
おお、awkは明白でわかりやすいですね
改行抜きで読んだ各行を改行付きでprintするわけですね
その意味ではawkで完璧なcatはできないのかな
紹介していただいたページには他にもいろいろ解法があっておもしろいです
ありがとうございます

675 :名無しさん@お腹いっぱい。:2016/06/16(木) 15:35:18.42 .net
grep + moreutils の sponge

$ grep '' file | sponge file

676 :名無しさん@お腹いっぱい。:2016/06/16(木) 19:35:59.66 .net
>>675
grepだけでも末尾に改行つけるんですね
でもこの仕様も安定性が心配

677 :名無しさん@お腹いっぱい。:2016/06/16(木) 20:54:54.26 .net
コマンドラインから翻訳API使ってるがおもしろすぎるw

678 :名無しさん@お腹いっぱい。:2016/06/19(日) 12:33:57.95 .net
Windows7上でCygwinを動かしbashスクリプトを記述しています。

特定のタスクが起動するのを監視して、起動を確認したら行動に移すスクリプトを
書こうと思っています。

たとえばWindows Media Playerを起動するとWindowsタスクマネージャー上の
「アプリケーション」タブに"Windows Media Player"が立ち上がるのが分かります。

このように特定のタスク/アプリケーションの起動を検知するスクリプトをbashで
記述するにはどうしたらよろしいでしょうか?

679 :名無しさん@お腹いっぱい。:2016/06/19(日) 14:28:17.66 .net
ps -W | grep "Windows Media Player" | grep -v grep

680 :名無しさん@お腹いっぱい。:2016/06/19(日) 14:30:25.15 .net
"Windows Media Player"の部分は実際のexeになると思うから
ps -Wで表示されるのにしてね

681 :名無しさん@お腹いっぱい。:2016/06/19(日) 15:43:42.63 .net
>>679
>>680
ありがとうございますm(_ _)m

682 :名無しさん@お腹いっぱい。:2016/06/20(月) 18:07:32.11 .net
そういう時は pgrep を使えよ! と思って手元の Cygwin (64bit) に procps-ng を
インストールしてみたんだけど、これって cygwin 配下のプロセスしか見えないのね……

683 :名無しさん@お腹いっぱい。:2016/06/20(月) 23:14:14.04 .net
大変出遅れたけど
>>649
の問題はbashなんだしshopt -s nullglobで済むのでは?

684 :名無しさん@お腹いっぱい。:2016/06/21(火) 02:08:19.29 .net
横からだけど、bash なら nullglob でいけるな〜
むっちゃ参考になった。ありがとう

685 :名無しさん@お腹いっぱい。:2016/07/03(日) 14:58:46.31 .net
OSXのsedメモ

ダメ
echo "123.abcd" | sed -e 's!\.[a-zA-Z]{2}!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]{2,3}!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]+!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]?!!g'
OK
echo "123.abcd" | sed -e 's!\.[a-zA-Z]*!!g'

OK
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\{2\}!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\{2,3\}!!g'
ダメ
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\+!!g'
echo "123.abcd" | sed -e 's!\.[a-zA-Z]\?!!g'

OK
echo "123.abcd" | sed -e 's!\(\.[a-zA-Z]\{2\}\)!z!g'
echo "123.abcd" | sed -e 's!\(\.[a-zA-Z]\{2,3\}\)!z!g'

+と?の代わりになるいい方法ないですか?

686 :名無しさん@お腹いっぱい。:2016/07/03(日) 15:23:02.40 .net
-e じゃなくて -E つかうとか?

687 :名無しさん@お腹いっぱい。:2016/07/03(日) 15:27:38.26 .net
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]+!!g'
123
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]?!!g'
123bcd

688 :名無しさん@お腹いっぱい。:2016/07/03(日) 15:33:05.72 .net
あ、そうか -E は代わりじゃなくて -Ee とすべきだね

689 :名無しさん@お腹いっぱい。:2016/07/03(日) 15:35:22.62 .net
-Eの存在をすっかり忘れてた
ありがとう

690 :名無しさん@お腹いっぱい。:2016/07/03(日) 15:52:51.46 .net
OSXにする人への注意点
デフォのままだと、'、"、-が自動的に置換されるから、環境設定>キーボード>ユーザ辞書で自動置換をoffにしたほうがいい
appごと?、ファイルごと?でもメニューバー>編集>自動置換でも自動置換をoffにできる

691 :名無しさん@お腹いっぱい。:2016/07/03(日) 20:21:24.00 .net
>>690
OSX歴10年ほどだけど、そんなんの知らんかったし、
そんな目にあったことがない。ぐぐったら実在する機能らしいが、
テキストエディットでコーディングするなんて考えられないし、
あたかもすべからく機能するように誤解を誘導するのはよくない。
OSXを使い始めて困ったのは、円とバックスラッシュを区別することぐらいだ。

692 :名無しさん@お腹いっぱい。:2016/07/04(月) 20:49:46.74 .net
注意点でそんな攻撃的にならなくても
そのテキストエディットのデフォ値を晒した方が有益かと

693 :名無しさん@お腹いっぱい。:2016/07/04(月) 21:44:12.04 .net
マカーのレスって 〜 が、おかしいよね。
デフォルトでおかしいのが出ちゃうのか知らんけど、あれをなんとかしてほしい

694 :名無しさん@お腹いっぱい。:2016/07/05(火) 02:10:41.78 .net
ゴシックなのに明朝っぽくなるやつね

自分も知ってるけど一発でマック使いだって分かるから
あのままでいいと思ってる

695 :名無しさん@お腹いっぱい。:2016/07/05(火) 02:24:03.69 .net
波ダッシュの話?
あれは Windows XP がしくっただけじゃなかったっけ。
Unicode の仕様含め結構まとめてくれてる人がいるから一度読んでみたらいい。

696 :名無しさん@お腹いっぱい。:2016/07/05(火) 09:28:26.99 .net
アポが勝手なことをしただけ

697 :名無しさん@お腹いっぱい。:2016/07/05(火) 11:46:58.78 .net
>>696
どうぞ
http://internet.watch.impress.co.jp/docs/special/691658.html
http://internet.watch.impress.co.jp/img/iw/docs/691/658/fig_2_s.jpg

698 :名無しさん@お腹いっぱい。:2016/07/05(火) 14:27:46.64 .net
それより、UFT8-macを何とかしてほしい。
日本語ファイル名だとLinuxマシンとまともに連携が取れない。

699 :名無しさん@お腹いっぱい。:2016/07/05(火) 15:14:05.40 .net
>>697
お前はまとめ見て引用しか出来ない馬鹿だな
そのリンク先にも書いてあるだろ
Unicodeのイメージ(字形)が間違ってたんだよ
XPはその仕様を忠実に実装しただけであって
アポは無視したんだよ
MSもヴィスタから同じ対応をしただけだ

知ったかぶりするんじゃねーよ

700 :名無しさん@お腹いっぱい。:2016/07/06(水) 12:51:14.80 .net
おい、おまえら!

Unixの読み方はユニ(ッ)クスだぞ。Linuxの読み方はリナ(ッ)クスだぞ。

ちなみにASUSはエイサスな、日本語よみでユニックスとかリナックスとかアスースとか読むのは知能が低い証拠だぞ。

Xの前は何でも「ッ」をつければいいと思ってるのは、典型的な日本人のレベルだぞ!

ちなみに、Xの前に正々堂々と「ッ」をつけてもいいのは、貴様らにほとんど関係ない

セ○クス(S○X)だけだぞ!

701 :名無しさん@お腹いっぱい。:2016/07/06(水) 17:47:32.09 .net
むかしYahooをヤッホーって言ってた友達を思い出した

702 :名無しさん@お腹いっぱい。:2016/07/06(水) 19:07:35.87 .net
イット革命の時代には、よくあることだね

703 :名無しさん@お腹いっぱい。:2016/07/06(水) 20:49:19.53 .net
伏せたらSIXだかSOXだかわかんねえな。

704 :名無しさん@お腹いっぱい。:2016/07/06(水) 21:36:34.09 .net
アメリカで働いてたときはごちゃまぜだった
方言によって訛りもあるし正直通じればなんでもいい

705 :名無しさん@お腹いっぱい。:2016/07/07(木) 18:04:30.74 .net
最初は現地読みで「りぬくす」または英語読みで「らいなっくす」と言われてた

706 :名無しさん@お腹いっぱい。:2016/07/12(火) 21:25:52.98 .net
塩味のマムコ

707 :名無しさん@お腹いっぱい。:2016/07/12(火) 23:15:08.76 .net
ちんぽ

708 :名無しさん@お腹いっぱい。:2016/07/14(木) 00:29:39.15 .net
イスドンvsアドスル

709 :名無しさん@お腹いっぱい。:2016/07/19(火) 06:19:56.96 .net
aliasの設定で

alias command='echo "hage"'

commandにスペースを含ませる事できないのでしょうか?

710 :名無しさん@お腹いっぱい。:2016/07/19(火) 08:59:57.76 .net
>>709
bashだよね。普通にできる

711 :名無しさん@お腹いっぱい。:2016/07/19(火) 09:07:33.10 .net
あ。command を "c o m m a n d" にしたいということなら
bashの識別子の条件に反するので不可

712 :名無しさん@お腹いっぱい。:2016/07/19(火) 19:42:55.37 .net
>>710
710=711 と仮定して質問するけど、710はどういう場合? 何を勘違いしたかが気になって。

713 :名無しさん@お腹いっぱい。:2016/07/19(火) 21:28:50.34 .net
>>712
710=711だけど、aliasで別名を定義するコマンド(つまりイコールの右側)に
スペースを入れられるのかという質問だと考えた。例示がそういう形になってるから。

もし、alias名にスペースを入れられるかという質問ならそういう例示をするはず
でも後者の質問という可能性に気づいたので、711を追加した

714 :名無しさん@お腹いっぱい。:2016/07/22(金) 22:58:42.81 .net
<bashのfunctionをdeclare -fで表示すると整形してあることを利用>

http://d.hatena.ne.jp/n9d/20090117/1232182669

ほとんどなんもしてないワンライナーだけど、見事にスクリプト
ファイル整形してくれる。なんか感動すたw

715 :名無しさん@お腹いっぱい。:2016/08/06(土) 14:00:53.40 .net
Windows10のISOをダウンロードするときに考えたんだけど
URLからファイル名だけを抜き出すこれより冴えたやり方ってある?
ちなみにWindows10のISOはISOファイルの後ろに
セッションIDかなにかがクエリで付くんだな

cat download.txt | grep -v ^$ | grep -v ^# | while read url
do
file=`echo "$url" | sed "s/.*\///g" | sed "s/\?.*//g"`

if [ $file == "" ]
then
echo file is null "$url"
continue
fi

ps -ef | grep wget | grep "$file"
if [ $? -eq 0 ]
then
echo download now "$file"
else
wget -c -t 1000 -O "work/$file" "$url"
fi
done

一応、ファイル名を正しく取得するのと
重複ダウンロード防止機能付き

wget -cにしたのは中断後の再開がもったいないし
wget -cで2重起動するとファイルが壊れて
いやな思いをした経験があるのでチェック入れてます

716 :名無しさん@お腹いっぱい。:2016/08/07(日) 00:22:16.73 .net
basenameじゃ駄目なの?

717 :名無しさん@お腹いっぱい。:2016/08/07(日) 11:38:22.64 .net
上のif文、$fileを""で囲わなくていいの?
実際引っかかることはなさそうだけど

718 :名無しさん@お腹いっぱい。:2016/08/08(月) 22:34:42.13 .net
bash の変数内の文字列削除ってどうやるのでしょうか?削除したいのは"(ダブルクォート)なんですが
testvar=aaa"aa"
${testvar##\"}

これじゃ駄目だった

719 :名無しさん@お腹いっぱい。:2016/08/08(月) 23:41:17.18 .net
>>718
## は前方最長一致
全部置換するのは //

testvar='aaa"aa"'
echo ${testvar//\"}

Bashマニュアル「パラメータの展開」セクション内「パターンの置換」
http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBB

720 :名無しさん@お腹いっぱい。:2016/08/10(水) 12:59:48.57 .net
selectはbash専用ですか?

721 :名無しさん@お腹いっぱい。:2016/08/11(木) 00:06:31.61 .net
>>720
はい
https://wiki.ubuntu.com/DashAsBinSh#select
https://github.com/koalaman/shellcheck/wiki/SC2039#select-loops

722 :名無しさん@お腹いっぱい。:2016/08/16(火) 04:34:02.37 .net
特定のディレクトリ配下のファイルの中身に特定の文字列が含まれるかどうかを判定するにはどうしたらいいですか?

find xargs grep?これの行数でも数えてtestに渡す?

723 :名無しさん@お腹いっぱい。:2016/08/16(火) 08:28:28.59 .net
判断ってファイル名をリストすんの?
最終的にどうしたいの?

724 :名無しさん@お腹いっぱい。:2016/08/16(火) 11:19:32.81 .net
grep -qr 文字列 ディレクトリ

725 :名無しさん@お腹いっぱい。:2016/08/16(火) 12:55:22.82 .net
あったら処理Aを実行しその結果を返却、なかったら正常終了としたい

726 :名無しさん@お腹いっぱい。:2016/08/16(火) 13:02:40.67 .net
if grep -qr 文字列 ディレクトリ; then 処理A; else exit 0; fi

727 :名無しさん@お腹いっぱい。:2016/08/20(土) 19:23:45.23 .net
find . | grep xargs 〜

728 :名無しさん@お腹いっぱい。:2016/08/21(日) 09:28:24.43 .net
> find . | grep xargs 〜
とても斬新

729 :名無しさん@お腹いっぱい。:2016/08/23(火) 01:57:32.12 .net
今freebsdのミラーサイトおかしくない?

730 :名無しさん@お腹いっぱい。:2016/08/23(火) 02:07:00.60 .net
どうおかしいのかくわしく

731 :名無しさん@お腹いっぱい。:2016/08/23(火) 02:08:14.36 .net
freebsd-update fetch
freebsd-update install
ができない

732 :名無しさん@お腹いっぱい。:2016/08/23(火) 02:08:58.40 .net
ミラーサイトを色々変えてもだめ

733 :名無しさん@お腹いっぱい。:2016/08/28(日) 20:54:56.49 .net
読み込みたいデータが入ったファイルをcatしてwhileでreadすると
while抜けたときに変数の内容が保持されないんだけど
元のシェルスクリプトと別プロセスになってるからってことなのかな?

以下サンプル

user01@server01 ~/test $ cat t4.sh
cat work/uhl.txt | grep -v ^# | sort | uniq | while read title
do
grepvlist=`echo "$grepvlistw | grep -v \"$title\" "`
grepvlistw=$grepvlist
echo $grepvlist
done
echo "---------"
echo $grepvlist
echo $grepvlistw
echo "---------"
user01@server01 ~/test $ sh t4.sh
| grep -v "111"
| grep -v "111" | grep -v "222"
| grep -v "111" | grep -v "222" | grep -v "333"
| grep -v "111" | grep -v "222" | grep -v "333" | grep -v "444"
---------


---------
user01@server01 ~/test $ cat work/uhl.txt
111
222
333
444
user01@server01 ~/test $

734 :名無しさん@お腹いっぱい。:2016/08/28(日) 21:02:27.99 .net
while ... do ... ; done <<EOT
$(grep -v ^# <file| sort | uniq)
EOT

735 :名無しさん@お腹いっぱい。:2016/08/28(日) 21:03:00.60 .net
パイプせずに-eでやろうってのはその通りですが
疑問の本質ではないのでとりあえずスルーでお願いします

736 :名無しさん@お腹いっぱい。:2016/08/29(月) 03:11:36.41 .net
だったら問題の本質だけのスクリプトにすべきでは?

737 :名無しさん@お腹いっぱい。:2016/08/29(月) 06:36:10.22 .net
単に簡略化して書いただけじゃ?

738 :名無しさん@お腹いっぱい。:2016/08/29(月) 12:49:07.23 .net
パイプが問題の本質なんだな

パイプでつなげたwhileはサブシェルで起動するから、
> while抜けたときに変数の内容が保持されないんだけど
> 元のシェルスクリプトと別プロセスになってるからってことなのかな?
ってことになる

whileをパイプの先に置いてる限り解決しないので、>>734が本質的な解

あるいは、shじゃなくてbashとかならプロセス置換が定石

while read title; do
...
done < <(cat work/uhl.txt | grep -v ^# | sort | uniq)

739 :名無しさん@お腹いっぱい。:2016/09/08(木) 21:25:56.17 .net
urlを取得しようと、テストで下を試したのですがダメでした。
どなたか、どうすればいいか教えてください。
お願いします。
x="http://x"
echo $x | grep -Ee "/[\w\.]"
echo $x | grep -Ee "\/[\w\.]"
echo $x | grep -Ee '/[\w\.]'
echo $x | grep -Ee '\/[\w\.]'
echo $x | grep -e "/[\w\.]"
echo $x | grep -e "\/[\w\.]"
echo $x | grep -e '/[\w\.]'
echo $x | grep -e '\/[\w\.]'

740 :名無しさん@お腹いっぱい。:2016/09/09(金) 00:28:23.04 .net
やりたいことがわからない...

741 :名無しさん@お腹いっぱい。:2016/09/09(金) 13:26:15.96 .net
テキスト中のurlを取得しようと、grepに/が先頭に来るパターンを使ってテストしてみたら、htttp://xが取得できなかった。
ヘルプミー。
だろ。

grepに/が先頭に来るパターンを使った取得は俺も出来ない。

742 :名無しさん@お腹いっぱい。:2016/09/09(金) 13:46:05.11 .net
>>739
期待する出力は?

743 :名無しさん@お腹いっぱい。:2016/09/09(金) 14:07:32.50 .net
>>741
おまえの言うことも分からないから739と741は同一人物っぽいな
$xがURLそのものなら加工する必要が無い

744 :名無しさん@お腹いっぱい。:2016/09/09(金) 15:51:28.22 .net
「grep」ではなくて「sed」による例だが、
URL(URI)の中からホスト名(サーバー名 *1)を抽出したいなら
 *1 スキーム(http:)とパス(/yyy/zzz/index.html)に挟まれた部分

[入力]URL http://www.xxx.co.jp/yyy/zzz/index.html
[出力]ホスト名 www.xxx.co.jp

$ echo "http://www.xxx.co.jp/yyy/zzz/index.html" | sed -e 's/.*http:\/\/\([^\/]*\)\/.*/\1/i'
www.xxx.co.jp

745 :744:2016/09/09(金) 16:31:07.62 .net
実行例、何かURLの後ろに勝手に「; セミコロン」が挿入されているな
これ2chの仕様?
もし試すなら「index.html"」の後ろの「; セミコロン」は削除して試してくれ

746 :名無しさん@お腹いっぱい。:2016/09/09(金) 16:39:00.12 .net
セミコロンなんて入ってない
あんたのブラウザの問題だろ

747 :名無しさん@お腹いっぱい。:2016/09/09(金) 16:57:52.70 .net
>>743
741です。
妄想、乙。そのするどい頭脳でサクッとコマンド貼ってみてくださいね。

ちなみに、\wにこだわらなければ
echo $x | grep -e "/[a-zA-Z0-9\.]"
で、できる。
\wがあると、どうしてだめかはしらない。

>>744
セミコロンないよ。

748 :名無しさん@お腹いっぱい。:2016/09/09(金) 17:27:46.43 .net
書きたかったのは echo 'http://x' | grep -Ee '/(\w|\.)' とかだろうけど
echo 'http://x' | grep :// で良い気がする

749 :名無しさん@お腹いっぱい。:2016/09/09(金) 18:44:47.37 .net
>>744はウェブブラウザで表示するとセミコロンが見える
2chの仕様っていうか read.cgi のバグ

>>747
> \wがあると、どうしてだめかはしらない。

grep や egrep の正規表現では文字クラス […] 内のバックスラッシュ \ が特別な意味を持たないから
[\w] は \ と w にマッチする
[\.] は \ と . にマッチする

750 :名無しさん@お腹いっぱい。:2016/09/09(金) 22:23:01.76 .net
>>747
>>741とやってることが矛盾してるが

751 :名無しさん@お腹いっぱい。:2016/09/09(金) 23:05:57.44 .net
結局>>739が出てこない限り>>740から何一つ進まない

752 :739:2016/09/10(土) 17:00:28.25 .net
言葉足らずで、お騒がせしました。
やりたかったのは、テキスト中のurlの抽出です。

urlには/が入っていて、ドメイン名にはアルファベット、数字、ピリオドがあるので、
いろいろ試しているなかで、上のようなコマンドでgrepが機能しない?と思い込んだ状態に遭遇した所でした。
https+://をgrepから外したのは、ttp://やドメイン名から始まるurl対策のつもりでした。

自分の間違いを>>749の解説と>>747のイグザンプルで理解できました。
みなさん、ありがとうございました。

本来の目的はまだ試行錯誤中ですが。

753 :739:2016/09/10(土) 17:16:44.65 .net
https+じゃなくてhttps?でした

754 :名無しさん@お腹いっぱい。:2016/09/14(水) 14:31:43.86 .net
<<<を使うとechoで変数を渡すより速いというのを見かけて
time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( echo ${x} | sed -Ee s'/b.*//g' ) ; done
time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( sed -Ee s'/b.*//g' <<< ${x} ) ; done
を試したら、<<<の方が1割ほど遅かった。環境:macosx1095+sandy
みんなはどう?

755 :名無しさん@お腹いっぱい。:2016/09/14(水) 20:50:13.24 .net
CentOS6.8(Hyper-V上)/Haswell でも前者の方が早いですね。
time を bash 添付の物ではなく、/usr/bin/time -v /bin/bash -c '...' で計測して詳細をみると、
前者は File system outputs: の値が 0 に対して、後者は 8000 (for の繰り返し1回あたり 8 増える)
となりました。

strace で見る限りどこかに書き込んでいるようには見えないですが、内部での実装に違いが
あるようですね。

756 :名無しさん@お腹いっぱい。:2016/09/15(木) 09:05:23.94 .net
想像だけど、echoはbashのビルトインだから起動ロスが無いのとパイプは同時起動だから、stdinが常に準備状態
<<<だど読み込むときにstdinを準備
じゃないのか?

757 :名無しさん@お腹いっぱい。:2016/09/15(木) 11:53:03.00 .net
<<<(ヒアストリング)ってbashのドキュメントにはビアドキュメントの変形と書かれてる
ってことは、fstat(0, ...)で調べりゃ、レギュラーファイルになってる筈

> <<<を使うとechoで変数を渡すより速いというのを見かけて
と言うデマの火元はどこ?

758 :名無しさん@お腹いっぱい。:2016/09/15(木) 13:09:35.23 .net
前者はサブシェルを起動するからプロセッサが繁忙状態だと多分遅くなる
シングルコア/シングルプロセッサだと確実にヒアストリングの後者の方が速い

759 :名無しさん@お腹いっぱい。:2016/09/15(木) 19:15:16.79 .net
>>756, >>757, >>758
解説d
ヒアストリングという言葉自体初めて知りました。
<<はヒアドキュメントということも知らずに使っていました。
環境によっては、<<<は速くなるんですね。
いい勉強になりました。

760 :名無しさん@お腹いっぱい。:2016/09/24(土) 18:27:52.80 .net
ちょい困り案件が自己解決したのでココに書いておきます。
Macのファイルシステムって、ファイル名を UTF-8 で保存してるかと思いきや
独自の正規化がされてまして (UTF8-MAC) 例えば、
 find . -name "*ドイツ*"
とかやってもあるはずのファイルが出てこないわけです。(内部的に ド の字を ト+[濁点] みたいな格納をしてるせいです)
そこで .bash_profile に以下のように コマンドもどきの find2 を定義してやります。これで万事解決です。

# find に渡す引数を全て UTF8-MAC に変換してしてます
find2(){
eval "find "$(echo "$@" | iconv -f UTF-8 -t UTF8-MAC)
}

761 :名無しさん@お腹いっぱい。:2016/09/24(土) 18:38:10.62 .net
>>760
他文字コードにも応用できそうだね

762 :名無しさん@お腹いっぱい。:2016/09/24(土) 18:47:05.28 .net
変換すべきは-name ... だけでしょ 全部変換は手抜きすぎ
-execで他のプログラムに渡すUTF-8をUTF8-MACに変換されていやーんになる
汎用的にするなら要ブラッシュアップ

763 :名無しさん@お腹いっぱい。:2016/09/24(土) 21:51:49.29 .net
>>762 了解です。
ただ -exec の方は 問題は別にあって
終端を表す \; の \(バックスラッシュ)
が消えちゃうんですね。そもそもiconv変換する前の時点で。

一応対応できたと思うんですが、
長くなったので貼るのはやめときます。

764 :名無しさん@お腹いっぱい。:2016/09/24(土) 22:10:40.49 .net
-execは;じゃ無くて+で終端しないと原人扱いされちゃうよ
;じゃないと困るのはかなり特殊なケース

765 :名無しさん@お腹いっぱい。:2016/09/24(土) 22:13:36.64 .net
>>760
どっかで読んだ内容だなぁと思ったら、これ↓のパクリか!
「新・OS X ハッキング! (169) Terminal上で「ダ」や「パ」が付くファイルを検索できない理由と対策 | マイナビニュース」
 http://news.mynavi.jp/column/osxhack/169/index.html

766 :名無しさん@お腹いっぱい。:2016/09/24(土) 23:20:43.06 .net
やり方だけ覚えてたんですが、昔見たのはソレかもしれません。
ただ現実に必要になってみると
find . -name `echo "オランダ.png" | iconv -f UTF8 -t UTF8-MAC`
これ毎回打ち込むの面倒だなと思ってコマンド化してみた次第です。

767 :名無しさん@お腹いっぱい。:2016/09/24(土) 23:54:36.90 .net
昔って、先月の25日(1ヶ月前)の記事だけどな

768 :名無しさん@お腹いっぱい。:2016/09/24(土) 23:56:11.17 .net
実におもしろいw

769 :名無しさん@お腹いっぱい。:2016/09/25(日) 00:01:20.09 .net
ん、もっと昔から知ってたよ。だから他の記事だと思います。

770 :名無しさん@お腹いっぱい。:2016/09/25(日) 02:09:32.85 .net
>>763
>>終端を表す \; の \(バックスラッシュ) が消えちゃうんですね。

普通にfindするときもfindに渡る前に¥は消えるでしょ

find2(){
find $(echo "$@" | iconv -f UTF-8 -t UTF8-MAC)
}

じゃダメなの?

771 :名無しさん@お腹いっぱい。:2016/09/26(月) 14:04:28.33 .net
それがベストだと思います

772 :名無しさん@お腹いっぱい。:2016/09/26(月) 23:31:45.32 .net
昔から知ってたけどね

773 :名無しさん@お腹いっぱい。:2016/10/16(日) 10:27:03.83 .net
以下のスクリプトはカレントディレクトリに「AABB」というファイルがあると
ワイルドカードが展開されて「find /tmp -name AABB」となってしまいますが、
これを「find /tmp -name

774 :名無しさん@お腹いっぱい。:2016/10/16(日) 10:36:38.42 .net
すみません、失敗しました。

以下のスクリプトはカレントディレクトリに「AABB」というファイルがあると
ワイルドカードが展開されて「find /tmp -name AABB」となってしまいますが、
これを「find /tmp -name "AA*"」とさせるにはどうすればいいのでしょうか?

#!/bin/sh
name="AA*"
option="-name $name"
find /tmp $option
---------------------------
$ ls
AABB test.sh

$ ls /tmp
AACC

$ sh -x test.sh
+ name=AA*
+ option=-name AA*
+ find /tmp -name AABB

/tmp/AACC をヒットさせたくて
下のように変数の書き方を色々変えてみましたが、うまくいかず
悩んでます。
name="AA"*""
name="AA\*"
name="AA\"*\""
option="-name "${name}""
option="-name \${name}"

775 :名無しさん@お腹いっぱい。:2016/10/16(日) 10:45:33.83 .net
option=

776 :名無しさん@お腹いっぱい。:2016/10/16(日) 10:53:11.25 .net
あれ、ダブルクォーテーションで切れちゃった
全角にするけど
option=”-name \”$name\””
とすればよろし

777 :名無しさん@お腹いっぱい。:2016/10/16(日) 11:06:04.27 .net
ダブルクォーテーション
ウェブブラウザで書いてて、書き込んでいいですかの確認画面を経由して書き込むと切れちゃう
俺調べ

778 :名無しさん@お腹いっぱい。:2016/10/16(日) 13:48:12.77 .net
余計な変数使わないで
#!/bin/sh
name="AA*"
find /tmp -name "$name"
ってやればいいのに

779 :名無しさん@お腹いっぱい。:2016/10/16(日) 13:54:36.43 .net
場合によって
option="$option 他のオプション"
とかやりたいんじゃないの

780 :名無しさん@お腹いっぱい。:2016/10/16(日) 17:25:04.68 .net
>>777
まさにそれだったわ。情報ありがとう

781 :名無しさん@お腹いっぱい。:2016/10/16(日) 18:08:50.16 .net
邪道で、bash 用だけど find の前に set -f
find の検索パスにワイルドカード使ってたらだめ

782 :名無しさん@お腹いっぱい。:2016/10/16(日) 19:22:23.01 .net
テス
# name=

783 :名無しさん@お腹いっぱい。:2016/10/16(日) 19:25:37.68 .net
>>777、あぁ、本当だWebブラウザからの書き込みだと回避できないのかな?
スクリプトソース貼るのに致命的だな

784 :名無しさん@お腹いっぱい。:2016/10/16(日) 19:40:18.84 .net
hastebinにでも貼ればいいんだよ

785 :名無しさん@お腹いっぱい。:2016/10/26(水) 22:58:52.49 .net
一般的なペーストビン

786 :名無しさん@お腹いっぱい。:2016/10/26(水) 23:40:35.70 .net
hastebinのほうがちょっと見やすかったりする

787 :名無しさん@お腹いっぱい。:2016/10/29(土) 21:05:55.08 .net
実行中の標準出力と標準エラーをログしながら表示させることって出来る?
むかしリダイレクトとtailでやったらうまく行かなかった覚えがあってやめた気がする

788 :名無しさん@お腹いっぱい。:2016/10/29(土) 21:22:36.46 .net
プロセス置換を使う
cmd > >(tee stdout.log) 2> >(tee stderr.log)

789 :名無しさん@お腹いっぱい。:2016/10/29(土) 22:19:49.67 .net
そういえばPOSIX shにはないな…すまん

790 :名無しさん@お腹いっぱい。:2016/10/30(日) 09:23:07.74 .net
cmd > stdout.log 2> stderr.log & tail -f stdout.log stderr.log
で出来ないか?

791 :名無しさん@お腹いっぱい。:2016/10/30(日) 21:41:34.72 .net
下記でOKだった

{ { cmd | tee stdout.log 1>&3; } 2>&1 | tee stderr.log 1>&2; } 3>&1

・bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 - Qiita
 http://qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc

792 :名無しさん@お腹いっぱい。:2016/11/04(金) 12:24:35.95 .net
音楽CDを突っ込んでmp3を作る。
この時ファイル名とmp3タグにはCDDBから読み込んで来る。

これをやるのに手っ取り早い方法ってなんだろ

793 :名無しさん@お腹いっぱい。:2016/11/04(金) 12:26:20.17 .net
EAC自動化

794 :名無しさん@お腹いっぱい。:2016/11/04(金) 12:31:52.74 .net
abcde使えよ

795 :名無しさん@お腹いっぱい。:2016/11/17(木) 04:52:04.55 .net
/usr/bin/test を使った判定がよくわからなくて困ってます

curl でhttp の応答をチェックしたいのですが
下記みたいにしてもちゃんと判定できないのですが何が原因でしょうか?

test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $?

796 :名無しさん@お腹いっぱい。:2016/11/17(木) 06:02:01.01 .net
くおー

$ [ $(curl -I http://localhost/ 2>&- | head -n 1) = 'HTTP/1.1 200 OK' ]; echo $?
bash: [: too many arguments
2
$ [ "$(curl -I http://localhost/ 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $?
0
$ [ "$(curl -I http://localhost/dummy 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $?
1

っとちょっと色々違うけど、うちでは之でなんとかなってる

797 :名無しさん@お腹いっぱい。:2016/11/17(木) 06:27:40.74 .net
"HTTP/1.1 200 OK"$'\r'

798 :名無しさん@お腹いっぱい。:2016/11/17(木) 08:38:26.65 .net
そういうのはステータスコードだけを見るようにしたほうがいいよ

test "$(curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/)" = 200

HTTPステータス行の Reason-Phrase ("OK" や "Not Found" の部分) は送出者が自由に書けるし
HTTPバージョンも当然固定じゃない

# HTTP2を有効にしてビルドしたcurlの場合:
$ curl -I -s https://www.google.co.jp/ | head -n 1
HTTP/2 200
$

799 :名無しさん@お腹いっぱい。:2016/11/17(木) 08:49:14.72 .net
>>798
訂正
ウェブブラウザで表示すると余分なセミコロンが混じってしまう

test "$( curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/ )" = 200

800 :名無しさん@お腹いっぱい。:2016/11/17(木) 12:19:57.15 .net
>>521
いいお(´・ω・`)

801 :名無しさん@お腹いっぱい。:2016/11/17(木) 12:21:26.17 .net
うちのcurlは終了しなかった
-XHEAD を外してみた
-bash: test: too many argumentsになった
$()を""で括った
awkが効いてなさそう
NR==1 にした
まだ一致しない
行末がCRLFだった
$'\r'を付けた

とりあえず
test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $?
はこう
test "$(curl -s -i https://www.google.co.jp | awk NR==1)" = 'HTTP/1.1 200 OK'$'\r';echo $?
なった

802 :名無しさん@お腹いっぱい。:2016/11/17(木) 12:47:25.00 .net
つまり纏めるとこうか
test "$(curl -I -w "%{http_code}" http://example.com/ 2>&- |tail -1)" = 200; echo $?

803 :名無しさん@お腹いっぱい。:2016/11/17(木) 14:56:39.30 .net
なんでレスポンスを取得する操作と
取得したレスポンスをtestする操作を一度にしようとするのか理解不能

804 :名無しさん@お腹いっぱい。:2016/11/17(木) 16:51:11.77 .net
ワンライナー原理教の方ですかね?w

まあ何でも一度にやってみたくなる衝動は理解できなくもない。
そこに山があるから、的な何か。

805 :名無しさん@お腹いっぱい。:2016/11/17(木) 17:02:47.58 .net
そこにパイプがあるからな

806 :名無しさん@お腹いっぱい。:2016/12/07(水) 08:00:32.91 .net
品位が問われるAdvent Calendar -- シェルスクリプトはどこでも動く!
ttp://www.peeep.us/4a5535c5

なんかあの界隈よく揉めてるな… 👀
Rock54: Caution(BBR-MD5:f4da0c707200fe35c49b788174082785)


807 :名無しさん@お腹いっぱい。:2016/12/07(水) 09:27:19.82 .net
品位のないやつだな

808 :名無しさん@お腹いっぱい。:2016/12/07(水) 10:58:10.89 .net
qiitaとかに書いちゃう輩なんてそんなもんだろ

809 :名無しさん@お腹いっぱい。:2016/12/07(水) 12:13:29.28 .net
この記事がキモいのは認めるけど、十把一絡げにQiitaを悪く言うのはやめて!

とはいうもののオタクのコミュニティって、どこでもちんぽ騎士団ぽいのがいるよね……
ぼっち最高やで。

810 :名無しさん@お腹いっぱい。:2016/12/07(水) 15:49:11.13 .net
シェルスクリプトで、ifとthenの間に改行がある場合で、その間に#をつけたコメント行を入れるのはNGですか?

ifの条件を、動作テストのため、いくつか使い分けたくて、thenより上の行で、テストで使い終わった判定を
コメント化しました。実際の判定が、コメント化したものが活かされたりと、おかしくなりました。

以下の、1分ごとに呼び出されるコードで、毎時40分だけ動いて貰いたいのに、10分おきに条件成立となりました。

#1hour
if [ `date '+%M'` -eq "40" ]
#10min
# if [ `date '+%M' | tail -c 2` -eq 0 ]
#all
# if [ true ]
then
echo 処理
fi

811 :名無しさん@お腹いっぱい。:2016/12/07(水) 16:18:47.23 .net
>>809
あそこで役に立つ記事あるか?
自己満のゴミ情報が大部分だからgoogole personal blockの対象だわ

812 :名無しさん@お腹いっぱい。:2016/12/07(水) 16:49:19.73 .net
>>810 テストの大括弧の後ろにセミコロン付ければいいんでね?

813 :名無しさん@お腹いっぱい。:2016/12/07(水) 18:34:13.86 ID:v2ZV9RF7w
bash3.2+ で IFS=$' \t\n' な状態で

$ echo "foo bar" baz | hoge.bash

とした時に hoge.bash 内で "foo bar" と baz を
別々の引数として取得するにはどうすればいいですか?

814 :名無しさん@お腹いっぱい。:2016/12/07(水) 19:49:58.99 .net
>>811
わかる。盛大な勘違い書いててドャァしてる感がすごい

815 :名無しさん@お腹いっぱい。:2016/12/07(水) 21:31:23.08 .net
googoleとかのことか

816 :名無しさん@お腹いっぱい。:2016/12/07(水) 23:23:03.71 .net
>>810
素直にcrontab使った方が良いんじゃね

817 :名無しさん@お腹いっぱい。:2016/12/08(木) 09:58:48.36 .net
>>810
そんなこと起きないはず
ほんとにそのコード?

818 :名無しさん@お腹いっぱい。:2016/12/10(土) 20:22:24.90 .net
すいません、教えて下さい。
色んなネットーワーク機器のログをsedでズバッとマスキングかけたいんだけど、URLと、IPアドレスの正規表現を教えて下さい。

819 :名無しさん@お腹いっぱい。:2016/12/10(土) 20:25:17.66 .net
817d

820 :名無しさん@お腹いっぱい。:2016/12/14(水) 16:17:30.58 .net
TBS

det dritte folkemn

821 :名無しさん@お腹いっぱい。:2016/12/21(水) 04:35:52.23 .net
文字列から実行して、返り値も標準出力も格納したいんだけど

testCmd="なんかのコマンド"
result=$(eval testCmd)

この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが

822 :名無しさん@お腹いっぱい。:2016/12/21(水) 05:11:40.55 .net
>>821

$0 ってどういうこと?
$? の間違いなら man bash の eval に書いてある。

823 :名無しさん@お腹いっぱい。:2016/12/21(水) 06:35:22.65 .net
普通に考えるなら

export testCmd="コマンド"
$testCmd > ログファイル
戻り値=$?

824 :名無しさん@お腹いっぱい。:2016/12/21(水) 06:47:35.19 .net
ちなみにスクリプトにすると
result=`$testCmd`
で標準出力が入って
$?でも戻り値は取れるけど
標準エラー出力は取れないね

825 :名無しさん@お腹いっぱい。:2016/12/21(水) 11:34:52.01 .net
失礼いたしました$?ですね

testCmd="なんかのコマンド"
result=$(eval $testCmd)

returncode=$?

標準エラーはいらんのですが
プロセス置換?とかでできるのかな

826 :名無しさん@お腹いっぱい。:2016/12/22(木) 09:27:10.08 .net
いまいち何を訊きたいのか分からん。
$?はevalの終了ステータスが設定される。evalの終了ステータスはtestCmdの終了ステータスが設定される

827 :名無しさん@お腹いっぱい。:2016/12/22(木) 12:40:53.01 .net
> この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが

マニュアル読んでわかんなきゃ試してどうなるか調べないと
正常終了するコマンドだけじゃなくてそれ以外もね

828 :名無しさん@お腹いっぱい。:2017/01/15(日) 17:41:24.20 .net
[ .... ] を [[ .... ]]に単純に置き換えて問題あります
でしょうか?

829 :名無しさん@お腹いっぱい。:2017/01/15(日) 18:20:34.24 .net
コマンドの引数を変数化したときって、どうやってその変数をコマンドに渡せばいいの?

#!/bin/bash
opts=“-f $file”
hoge $opts

これだと hogeコマンドが unrecognized option エラーになってしまう。
初歩的な質問ですまん

830 :828:2017/01/15(日) 18:27:02.19 .net
スマソ、自己解決
$fileが不正だっただけやん

831 :名無しさん@お腹いっぱい。:2017/01/16(月) 21:28:07.13 .net
>>828
http://mywiki.wooledge.org/Bashism#Conditionals
> [[ is not defined by POSIX, originated in ksh and is also present in zsh

832 :名無しさん@お腹いっぱい。:2017/01/17(火) 21:34:40.69 .net
bashでif使って変数に"ok"が入ってるかはどうやって確かめればいいんでしょうか?
if [ $a = "ok" ]; then
echo hoge
else
echo fuga
fi
の様にしているのですが"ok"が入っていても別の文字列が入っていてもfugaが出力されてしまいます

833 :名無しさん@お腹いっぱい。:2017/01/17(火) 21:59:37.47 .net
$a の中身が引用符の無い裸の
ok
ならば真になるはず

834 :名無しさん@お腹いっぱい。:2017/01/17(火) 22:02:25.13 .net
できればそのままやりたいんです
cutかなんかで事前に削るしかないですかね?

835 :名無しさん@お腹いっぱい。:2017/01/17(火) 22:14:16.11 .net
831 の "ok" を '"ok"' または "\"ok\"" にすれば

836 :名無しさん@お腹いっぱい。:2017/01/18(水) 09:13:18.95 .net
引用符付きの文字列なの?

837 :名無しさん@お腹いっぱい。:2017/01/18(水) 11:40:24.29 .net
>>835
\"でうまく行きました
ありがとうございます
>>836
そうです
"ok"か"error"、またはそれ以外の文字列(引用符なし)が入ってる

838 :名無しさん@お腹いっぱい。:2017/01/21(土) 12:38:14.00 .net
使ってないと何もかも忘れる・・

839 :名無しさん@お腹いっぱい。:2017/01/21(土) 16:06:57.66 .net
忘れるで思い出した、シェルスクリプトと関係ないけどinfoでいつも迷子になるわ俺

840 :.:2017/01/21(土) 20:26:15.12 .net
これってどうかな?
http://gihyo.jp/magazine/wdpress/plus/978-4-7741-8694-8

841 :名無しさん@お腹いっぱい。:2017/01/21(土) 21:16:52.05 .net
configure全部読めば桶

842 :名無しさん@お腹いっぱい。:2017/01/23(月) 23:25:46.35 .net
httpdのログでIP直でアクセスして来たIPをbanするスクリプト作ってcronで回すようにした

843 :名無しさん@お腹いっぱい。:2017/01/23(月) 23:40:12.97 .net
接続しに来た全IPをBAN判定する負荷のほうが高くなりそうだね

844 :名無しさん@お腹いっぱい。:2017/01/23(月) 23:46:44.50 .net
blockはpfでやってるけど、負荷があるのかわからない。たいして無いように思う。前は中国IPを全部はじいてたけど、特に不都合はなかった

845 :名無しさん@お腹いっぱい。:2017/02/05(日) 17:07:27.34 .net
ビギナーなんですが、教えてくれませんか。
for i in {1..3}
do
echo $i
done

1
2
3
ではなく{1..3}が出力されます。どうして?

846 :名無しさん@お腹いっぱい。:2017/02/05(日) 17:13:16.91 .net
bash じゃないから

847 :名無しさん@お腹いっぱい。:2017/02/05(日) 17:15:56.58 .net
>>846
ありがとう・・・ありがとう・・・

848 :名無しさん@お腹いっぱい。:2017/02/05(日) 19:26:02.43 .net
もう一個お願いします。
testを
1
2
3
というファイルだとして、
cat test|while read line; do sed -e "s/.*/a/"; done
をやると
a
a
a
ではなく
a
a
となるのはなぜですか?

849 :名無しさん@お腹いっぱい。:2017/02/05(日) 20:04:29.97 .net
ホントは、

cat test|while read line; do echo "$line" | sed -e 's/.*/a/'; done

ってしたいんじゃない?

cat test|while read line; do sed -e "s/.*/a/"; done

だと、1行目を read が喰って、2行目以降は全て sed に入力される
ことになるよ。

850 :名無しさん@お腹いっぱい。:2017/02/05(日) 20:26:43.25 .net
>>849
ありがとう・・・。そういう仕組みになってるのは知らなかった。

851 :名無しさん@お腹いっぱい。:2017/02/08(水) 13:58:57.76 .net
list.txt に書いてあるファイルを一括で転送するスクリプトを書いたのですが、
これに送信前と送信後のmd5を比較して、一致しなかったら再送させるにはどうすればいいですか?
http://pastebin.com/aXucBuHW

852 :名無しさん@お腹いっぱい。:2017/02/08(水) 23:14:15.74 .net
一度 mvしてしまったものは再送出来ない

853 :名無しさん@お腹いっぱい。:2017/02/09(木) 12:54:00.09 .net
こういうファイルを重複箇所は2度目に出現する箇所のみ削ってマージする方法ってある?

$ cat file1.txt
1
2
3
4

$ cat file2.txt
3
4
5
5
6

センスない自分としてはheadとtailを使って逐一チェックしながら
マージすると言うプログラミング的な方法しか思いつかなかった・・・

854 :名無しさん@お腹いっぱい。:2017/02/09(木) 13:09:23.15 .net
cat file1.txt file2.txt | sort -nu
あくまでも中には数字しかないならばの話で。

855 :名無しさん@お腹いっぱい。:2017/02/09(木) 13:17:38.41 .net
連結してsortしてuniqじゃダメなの?

856 :名無しさん@お腹いっぱい。:2017/02/09(木) 13:35:43.26 .net
>>854-855
ありがとうございます
数字を使ったのは単なるサンプルなので・・・実際は文字列が入っています
今はcatで単純マージしたあとにviで重複箇所を削っていて
かつそのファイルを利用する時にsortしてuniqしています
できればファイルサイズとかも気にしたいので
パイプとかで簡単かつ堅実に出来ないかなと思ったのです

857 :名無しさん@お腹いっぱい。:2017/02/09(木) 13:40:12.55 .net
すでにソートされてるんならuniqだけでいいんじゃね
そうじゃないんなら、ありうる最大限一般的な例を出さないのがだめ

858 :名無しさん@お腹いっぱい。:2017/02/09(木) 16:02:59.69 .net
awk 使うとか

$ cat file1.txt file2.txt | awk '{if(!u[$0]){u[$0]=1;print;}}'

859 :名無しさん@お腹いっぱい。:2017/02/09(木) 19:01:56.53 .net
https://www.youtube.com/watch?v=quIHgwuF6r4&sns=em

860 :名無しさん@お腹いっぱい。:2017/02/09(木) 19:13:20.28 .net
2次元座標をy座標 -> x座標の順でソートしたいんだけど
ソートキーの値がある範囲内(例えばプラスマイナス100)にある場合は同じ値とみなすみたいなことできますか?

入力イメージ
0001 31 149
0002 21 156
0003 11 145
0004 52 344
0005 42 356
0005 12 353
0006 53 594
0007 13 613

出力イメージ
0003 11 145
0002 21 156
0001 31 149
0005 12 353
0005 42 356
0004 52 344
0007 13 613
0006 53 594

比較ロジック(0はa=b、-1はa<b, 1はa>b)
function compare (a, b) {
if (a.y < b.y - 100) return -1
if (a.y > b.y + 100) return 1
if (a.x < b.x - 100) return -1
if (a.x > b.x + 100) return 1
return 0
}

861 :名無しさん@お腹いっぱい。:2017/02/09(木) 19:14:30.15 .net
>>860
入力イメージは(id, x, y)で
3カラム目がy座標、2カラム目がx座標です

862 :名無しさん@お腹いっぱい。:2017/02/09(木) 19:50:30.95 .net
区間に分けていいんなら、100単位で丸めたキーを追加してソートすればいいけど、
その比較関数をきっちり実装するのは無理があるね
awkかそれ以上のスクリプト言語使うくらいかな

863 :名無しさん@お腹いっぱい。:2017/02/09(木) 20:07:21.71 .net
プラマイ100とかだと全部同じ値になるんじゃないの?
四捨五入で丸めるなら分かるけど

864 :名無しさん@お腹いっぱい。:2017/02/09(木) 21:01:26.79 .net
pythonのsortはstableだと保証されてるけど、他のは?

865 :859:2017/02/09(木) 21:46:47.59 .net
>>862
>>863
入力イメージの値にあるみたいに丸めだと欲しい結果が得られないのでスクリプト言語使ってみます
ありがとうございます

>>864
stableかどうかはあんまり考えてませんでした
1カラム目のユニークな値でソート済みなところからの処理なので
stableじゃないsortの場合は比較ロジックに1カラム目を追加して対応します

866 :名無しさん@お腹いっぱい。:2017/02/09(木) 22:44:27.46 .net
んー、500=560で、560=620だけど、500<620って、ソート誤らんかな

867 :名無しさん@お腹いっぱい。:2017/02/09(木) 23:31:32.77 .net
>>865
このスレで言うべきでは無い気はするけど
Excelとかの表計算ソフトを使った方が良さそうな気が

868 :859:2017/02/10(金) 00:45:19.33 .net
>>866
ユニークなキーも比較条件に追加すれば並び順は一意に決まるので誤ることはないかと

>>867
シェルスクリプトでいろいろ処理する途中の処理なんです

869 :名無しさん@お腹いっぱい。:2017/02/10(金) 01:36:54.52 .net
>>868
qsortを仮定して、たまたまピボットが560になったときと
620になったときで結果が変わるよ

誤るというか、結果が一意でない

870 :名無しさん@お腹いっぱい。:2017/02/10(金) 02:16:12.75 .net
1カラム目がユニークキーだとしてそれも比較条件に入れれば
各行の比較で必ず上下関係が明確になるのでqsortでも大丈夫じゃないでしょうか

001 620
002 560
003 500

871 :名無しさん@お腹いっぱい。:2017/02/10(金) 05:48:37.28 .net
シェルでも他言語でもプログラミングが必要で
ループ処理しながら選択ソートするしかないね

まあまずシェルで〜とかじゃなくて
ExcelでもJavaでも何でもいいから簡単に実装できる方法を調べてみて
シェルに落としこめるかを調べた方がいいと思う
例えば偏差とか一般的で誰でも使うから統計処理なんてawkで楽に出来るんだけど
>>860がやりたいのって特殊だから独自実装が必要になると思うよ

茶化してるわけじゃないけど
はじめに自分がやりたいことは何なんでしょうって聞くのが早いと思う

872 :名無しさん@お腹いっぱい。:2017/02/10(金) 06:15:23.45 .net
数学詳しくないけど
前後のデータの単純比較じゃなくて
全データとの比較が必要になるから
コマンド1発じゃ無理だね(10発くらいでも無理だけど)

キーを追加するにしてもデータ数-1分のキーが必要になるし(xとyでさらに2倍か)
キーが別だからそこからソートする方法が浮かばない
スクリプトでもプログラムでもいいけど
プラマイ100を同値とするソートのロジック組むしかないと思う

873 :名無しさん@お腹いっぱい。:2017/02/10(金) 08:25:47.98 .net
>>870
qsortの中身知ってる?
パーティショニングしたらあとはブロック内の入れ替えしかしないよ

874 :名無しさん@お腹いっぱい。:2017/02/10(金) 08:29:02.88 .net
>>872
データ数-1とか2倍とか意味わからん

875 :名無しさん@お腹いっぱい。:2017/02/10(金) 09:53:38.19 .net
>>868
並び順は良いだろうけど
A=B B=C A≠C の時そもそもどうなれば良いの?
001 A
001 B
??? C

876 :名無しさん@お腹いっぱい。:2017/02/10(金) 10:06:02.58 .net
ソートっていうのは同値類とその間の全順序を決めて要素を並べることだよね

>>860のcompareだと推移律を満たさないので同値類になっていない
だからおかしなことになる

877 :名無しさん@お腹いっぱい。:2017/02/10(金) 10:15:12.36 .net
このように複雑になる場合は要求定義が不適切な事が多い

878 :名無しさん@お腹いっぱい。:2017/02/10(金) 10:16:20.47 .net
普通に全部出せよ
何で小出しにしてんだよアホじゃねえよ

879 :名無しさん@お腹いっぱい。:2017/02/10(金) 10:35:17.25 .net
複雑って言うか単純なんだけど特殊なだけでしょ

880 :名無しさん@お腹いっぱい。:2017/02/10(金) 10:52:33.90 .net
こんなアホソート誰が必要とするんだよwww

ソート前
001 200 200
002 100 100
003 0 0

ソート後
003 0 0 ←一番小さく200との差が100を超えているため入れ替える
001 200 200 ←一番大きいが100からは100以内なので入れ替えない
002 100 100 ←200より小さいが200からは100以内なので入れ替えない

アホだw

コレ意味の分かってないやつがロジック組むと
100から見たら0も200もプラマイ100以内だから
並べ替えしないとか言うことになるだろう

要するにプラマイ100を見込んだ最小値を求めて
2週目のループでそれを除外した中からさらに最小値を求めていくだけ
終わりまで選択ソートをやるだけなんだけど
そこにプラマイ100の比較を追加する必要がある

ぶっちゃけソート結果を見れば分かるように
こいつソートしてんの?って思うだろう
そもそも>>874の考えが破綻していると言うか思いつきソートなんだろうと思う
統計とか学んだ方がいいかな〜

881 :名無しさん@お腹いっぱい。:2017/02/10(金) 10:59:36.91 .net
ぶっちゃけプログラムを書くのは簡単

882 :名無しさん@お腹いっぱい。:2017/02/10(金) 11:04:25.90 .net
特殊じゃなくて曖昧なんでしょ
早い話、1000x1000の平面のすべての整数座標に点があったらどうソートしたいわけ?
2次元だからややこしいわけでなく1次元でも同じこと

883 :873:2017/02/10(金) 11:07:21.05 .net
>>880
俺になんの用?

884 :名無しさん@お腹いっぱい。:2017/02/10(金) 11:15:25.85 .net
>>883
ごめん間違えた>>860

>>882
いや曖昧じゃない
2次元と言うのもちょっと複雑にしてるだけだろう
プラマイ100以内は同じと言う明確な基準がある

ただたぶんこのソートの結果は>>880に記したように
初期のデータの並びによって変わる部分があると思うね
だからこのソートは>>860の思いつきソートだってことだ

885 :名無しさん@お腹いっぱい。:2017/02/10(金) 11:38:39.44 .net
多分、縦横10000くらいある座標にポツポツしかないと予想した処理なんだろうよ

886 :名無しさん@お腹いっぱい。:2017/02/10(金) 14:05:33.33 .net
>>884
(0, 100)
(99, 300)
(198, 200)
どう並べりゃ良いのよ?

887 :名無しさん@お腹いっぱい。:2017/02/10(金) 14:12:56.80 .net
>>886
(0, 202)
(99, 101)
(198, 0)
こうか

888 :873:2017/02/10(金) 14:39:27.08 .net
(0,999)
(0,998)
...
(0,1)
(0,0)

どう並べる?

889 :名無しさん@お腹いっぱい。:2017/02/10(金) 15:26:37.64 .net
cygwinでスクリプト書いてて時々

bar=`ls foo_*.txt|tail -1|cut -d\. -f1`
で$barに高確率で何も入らなかったり(foo_*.txtはあるのに)

bar=`echo $foo|perl -pE 's/^.*"hoge":"([^"]+)".*$/HOGE_\1/'`
echo $bar > /dev/null
echo "result:"$bar
の2行目がないと何故か3行目で$barが空のように表示されたり

というような現象が起きるんだけど、これってよくあること?
cygwin64にしてから起きているような気もする

890 :名無しさん@お腹いっぱい。:2017/02/10(金) 15:56:58.38 .net
.
.
東京都三鷹市 元ニコ生主の莉里子です (整形後) http://i.imgur.com/SLcz3dS.jpg (整形前) http://i.imgur.com/zPvxpx5.png
不倫・浮気・密会・不道徳な行為は著名な小説家でしている人がいるので真似しちゃう池沼です http://i.imgur.com/vZeIuO3.png


■2015年2月 釣りニコ生主コジコジと沖縄旅行でオフパコ

2015年2月2日-3日...釣り生主コジコジと沖縄旅行でセックス/やり捨てされ逆ギレ
2015年2月4日.........莉里子の父親から電話があって脅されたとコジコジに放送で暴露される
2015年2月6日.........リスカ画像UP 
2015年2月9日.........ツイ全消し/コミュ爆破逃亡
http://imgur.com/a/58WQC 

■2016年6月 バンドマン兼ニコ生ツイキャス配信者と密会 その3日後に穴るセックス〜継続中
http://imgur.com/a/Lx8o2


●早川莉里子●土井莉里子●土井寧々●土井剛●早川剛●星崎●りりこ●りりこし●にゃんぱす
●ね子●にゃこ●みんち●めう●ねね●猫又●剛


※名古屋ゲイ風俗ホストとも体の関係※

891 :名無しさん@お腹いっぱい。:2017/02/10(金) 15:57:21.03 .net
.
.
莉里子(本人公表)1994年3月7日 or 1996年4月25日 http://imgur.com/a/oJZpv
生主時代(にゃんぱす、りりこし、莉里子)
剛 http://i.imgur.com/dQxxGuV.png  http://imgur.com/a/gPaof
 

東京都三鷹市 シティハイツ吉祥寺通り
http://i.imgur.com/UmTmbcu.jpg
http://i.imgur.com/cODTuzm.png
http://i.imgur.com/KdyuUod.png
http://imgur.com/a/eeixK (見せたがり乱交好きのメンヘラ) http://i.imgur.com/9V5mmTh.png

http://i.imgur.com/lobby7w.png
http://i.imgur.com/AdewV6O.jpg
http://i.imgur.com/YQaNYBd.png
http://i.imgur.com/pdsCXHG.jpg


莉里子 緊縛ハメ撮り師 『相馬ドリルrenji』 とラブホに2人で入って フルヌード緊縛ハメ撮り
https://pbs.twimg.com/media/CpFjMz0UEAAurD-.jpg  http://i.imgur.com/xaAhkiD.png
https://twitter.com/somadrill/status/761498960028499968
http://imgur.com/a/3dnz5
http://i.imgur.com/SAAZ0fQ.png

892 :名無しさん@お腹いっぱい。:2017/02/10(金) 15:57:31.97 .net
.
.
.

>悪質パクツイ垢(自称ハッカー)のコピーライティング特定されててワロた

@copy__writing の中の人は東京都三鷹市の莉里子

https://twitter.com/copy__writing
http://i.imgur.com/LyXsDj9.png
http://i.imgur.com/nqT3xBN.png
http://i.imgur.com/2FlhfLE.jpg
https://www.mercari.com/jp/u/446591929/

893 :名無しさん@お腹いっぱい。:2017/02/10(金) 15:58:37.98 .net
■莉里子プライベート垢
@riricoco0
@bibliophilia333
@muzimuzi333
@nekomatagensou
@hanasoraumimori
@mirainosekai3
@zibanyan666
@parlorchild
@liliririko
@EriotN
@mike_peko
@riricoco0
@ririko_neko
@nyanpas ※1
@telegraphyneko
@riricatputi (新アカ) http://imgur.com/a/X1vQA

894 :名無しさん@お腹いっぱい。:2017/02/10(金) 22:49:49.54 .net
>>889
再現性はあるの?
手で実行してるのか知らないけど
lsの結果をファイルにリダイレクトしといて(ログ残しておいて)
地道に調べるしかないと思う

895 :名無しさん@お腹いっぱい。:2017/02/14(火) 09:44:10.27 .net
SJISで漢字を含むCSVファイルを入力として、

while read line
do
なんちゃら
done < CSV

みたいに一行ずつ読み込んでなんちゃらすると、特定の漢字をreadで取った時に文字化けするんだが
これの回避策って兄貴何かないかな
とりあえずIFSを改行のみにしてfor line in `cat CSV`にして凌いだが、IFSいじるのが気持ち悪くて仕方がない

896 :名無しさん@お腹いっぱい。:2017/02/14(火) 10:11:22.08 .net
なんの漢字?

897 :名無しさん@お腹いっぱい。:2017/02/14(火) 10:13:38.18 .net
SJISなんてウンコを触っておきながらIFS弄るのが気持ち悪いというのは矛盾

898 :名無しさん@お腹いっぱい。:2017/02/14(火) 10:35:53.64 .net
>>895
0x5C を含む漢字でしょ、「表」とか
だったら read -r line で

899 :名無しさん@お腹いっぱい。:2017/02/14(火) 10:44:50.39 .net
>>898
KOREDAAAAA!!!
ありがとう兄貴
ちなみに構造って感じでつまづいてた
SJIS扱うのは古いプロジェクトならよくあることよ

900 :名無しさん@お腹いっぱい。:2017/02/14(火) 10:54:10.92 .net
そうか2バイト文字の1バイトが&#165;なせいでエスケープ扱いしちゃってたのな…
UTF8とかだと回避出来るんかなこれは

901 :名無しさん@お腹いっぱい。:2017/02/14(火) 11:54:23.78 .net
んなもん当たり前だろ、としか思えない私はおっさん確定。SJIS死すべしと思っていたのは25年前くらい?
これが世代というものなんですね……

902 :894:2017/02/14(火) 13:40:31.07 .net
25年前からプログラマやってる人と並んだらさすがに俺はクソガキだわ
にしても意外なほどググっても出ないな、それほどマイナーなのかこの症状
もしくは当たり前すぎるのか

903 :名無しさん@お腹いっぱい。:2017/02/14(火) 15:20:01.03 .net
>>902
sjis ダメ文字でググればごろごろと

904 :894:2017/02/14(火) 15:23:50.72 .net
>>903
sh read 漢字 文字化け とかで出てほしかった…
勉強なったわサンクス

905 :名無しさん@お腹いっぱい。:2017/02/14(火) 15:40:03.34 .net
sjis 文字化け でも出るで
もう少しやったな

906 :894:2017/02/14(火) 16:05:30.25 .net
あー、出るには出るけど多分readとの関連に気づかなかったろうな…ダメ文字ってものをまず知らなかったし
特定の漢字が文字化けってあたりの記事から推察して、SJISがなんかマズイってとこにはたどり着いたかもしれんが、多分それでもread -rには気づかなかったと思うわ
iconv -t utf8してたと思う

907 :名無しさん@お腹いっぱい。:2017/02/14(火) 17:11:17.24 .net
>>906
iconv を利用するのはアリだと思うよ。
業務系のシェルスクリプトでも「SJIS データを一時的に UTF-8 にコンバートして何らかの処理をした後に SJIS に戻す」という手法で実装することがある。

908 :894:2017/02/14(火) 17:17:09.33 .net
>>907
便利だよねiconv

909 :名無しさん@お腹いっぱい。:2017/02/14(火) 20:50:41.08 .net
おれは、使い慣れてるnkfでcp932→utf-8に変換してから作業してるわ。

910 :名無しさん@お腹いっぱい。:2017/02/15(水) 01:22:16.71 .net
そんで戻ってこない文字が出てきて泣きそうになるまでがテンプレだね。

911 :名無しさん@お腹いっぱい。:2017/02/15(水) 01:34:33.21 .net
それでもiconvなら
iconvならきっとなんとかしてくれる

912 :名無しさん@お腹いっぱい。:2017/02/15(水) 04:53:01.40 .net
元がcp932なら変換不能になることはないだろう
そう、iconvならね

913 :名無しさん@お腹いっぱい。:2017/02/18(土) 04:37:58.77 .net
#!/bin/bash
echo A > test.txt ; echo B >> test.txt
ARRAY=$(cat test.txt)
for item in ${ARRAY[@]}; do
echo $item
done
としたら
A
B
と表示されるので、$ARRAYは 2個の要素を持つ配列になったのだと思っていました。

ところが要素数を
echo ${#ARRAY[@]}
で表示させたら 1 が表示されます。

$ARRAYは配列になっていないのでしょうか?
だとすると、なぜ for item … で表示されたのか?

914 :名無しさん@お腹いっぱい。:2017/02/18(土) 04:55:39.09 .net
indexも表示させればわかるよ

echo A > test.txt; echo B >> test.txt

ARRAY=$(cat /tmp/test.txt)
for (( i=0; i<${#ARRAY[@]}; i++ )) do
printf "ARRAY index:%d value:%s\n" "$i" "${ARRAY[i]}"
done

readarray -t ARRAY2 < <(cat /tmp/test.txt)
for (( i=0; i<${#ARRAY2[@]}; i++ )) do
printf "ARRAY2 index:%d value:%s\n" "$i" "${ARRAY2[i]}"
done

915 :名無しさん@お腹いっぱい。:2017/02/18(土) 05:52:55.03 .net
>>914
readarray -t ARRAY < <(cat test.txt)
で綺麗に配列として読まれますね。
これでいま作っている自作ツールが完成出来ます。
ありがとうございます

916 :名無しさん@お腹いっぱい。:2017/02/18(土) 09:43:20.54 .net
最初の例のやつ、多分配列になってないんじゃないか

917 :名無しさん@お腹いっぱい。:2017/02/18(土) 14:18:47.86 .net
>>916
#!/bin/bash
echo A > test.txt ; echo B >> test.txt
ARRAY=$(cat test.txt)
N=1
for item in ${ARRAY[@]}; do
echo ARRAY[$N]=$item
N=$(($N + 1))
done

としたら
ARRAY[1]=A
ARRAY[2]=B
と表示されて、配列になっているようです

918 :名無しさん@お腹いっぱい。:2017/02/18(土) 16:02:36.82 .net
>>917
それは配列になってるんじゃなくてforループで一つ目の要素がsplitされてるだけ
echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると対処できないからそういうコードはやめたほうがいい
for item in "${ARRAY[@]}"; do ってクウォートすると結果変わるでしょ?

あと”<(cat test.txt)”は比較のために書いただけでcatしなくても大丈夫
readarray -t ARRAY < test.txt

while readするかreadarray(=mapfile)使うか
http://mywiki.wooledge.org/BashFAQ/005#Loading_lines_from_a_file_or_stream

919 :名無しさん@お腹いっぱい。:2017/02/18(土) 17:07:28.86 .net
>>918
> それは配列になってるんじゃなくてforループで一つ目の要素がsplitされてるだけ
> for item in "${ARRAY[@]}"; do ってクウォートすると結果変わるでしょ?

なるほど。
配列になっていないのと、検証の方法が間違っていたことがよく理解出来ました。

> echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると対処できないからそういうコードはやめたほうがいい

気を付けます。

> あと”<(cat test.txt)”は比較のために書いただけでcatしなくても大丈夫
> readarray -t ARRAY < test.txt
> while readするかreadarray(=mapfile)使うか
> http://mywiki.wooledge.org/BashFAQ/005#Loading_lines_from_a_file_or_stream

ありがとうございます。
もっと勉強します

920 :名無しさん@お腹いっぱい。:2017/02/20(月) 13:16:49.47 .net
>>919
[user@f25 ~]$ ARRAY=$(cat test.txt)
[user@f25 ~]$ declare -p ARRAY
declare -- ARRAY="A
B"
[user@f25 ~]$ readarray -t ARRAY < test.txt
[user@f25 ~]$ declare -p ARRAY
declare -a ARRAY='([0]="A" [1]="B")'

921 :名無しさん@お腹いっぱい。:2017/02/20(月) 18:00:26.41 .net
>>920
declare -p !!!
知らなんだ

922 :名無しさん@お腹いっぱい。:2017/02/20(月) 18:11:16.14 .net
このスレ来ると度々便利な知識得られるからいいわ
grep -oとか

923 :名無しさん@お腹いっぱい。:2017/02/21(火) 05:20:06.32 .net
配列にするなら
ARRAY=( $(cat test.txt) )

924 :名無しさん@お腹いっぱい。:2017/02/21(火) 16:45:06.28 .net
>>923
echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると…

925 :名無しさん@お腹いっぱい。:2017/02/21(火) 19:03:20.01 .net
IFS=$'\n'
ARRAY=( $(cat test.txt) )
declare -p ARRAY

とすれば空白混じりの行も1行として扱われるが、
空行(何も文字が無い行)は$ARRAYに読み込まれない

readarray -t ARRAY < test.txt
declare -p ARRAY

だと空行も読み込んでくれる

926 :名無しさん@お腹いっぱい。:2017/02/28(火) 23:57:54.64 .net
echo test | grep a
みたいな時に終了コードはgrepこの場合1
でかつ標準出力にはtestが出ていて欲しいのですが

どうしたらいいでしょうか?
環境はbashです

927 :名無しさん@お腹いっぱい。:2017/03/01(水) 00:40:42.45 .net
echo test | tee /dev/tty | grep a

でどうだろう?

928 :名無しさん@お腹いっぱい。:2017/03/01(水) 00:57:07.01 .net
終了コード1のときにはその文字列を表示したいとかによって違う気がする。
常に入力をそのまま出力していいのだろうか。

929 :名無しさん@お腹いっぱい。:2017/03/01(水) 01:36:33.88 .net
仕様を細かく詰めてない気がするけど とりあえず
echo test | ( grep -v a; exit $(expr \( "$?" + 1 \) % 2 ))

930 :名無しさん@お腹いっぱい。:2017/03/01(水) 02:35:11.20 .net
みなさん、ありがとうございます

echo の部分は常に表示、grepは結果のみ欲しいので-qで、判定につかうインプットは常に全量表示して、結果はリターンコード、標準出力は人が見るよう、リターコードはその後のシステム的な分岐につかう的な目的です(後続はbashの世界でないのでワンライナーが嬉しい)

931 :名無しさん@お腹いっぱい。:2017/03/01(水) 05:09:32.29 .net
macのsipsコマンドについて質問しても大丈夫ですか?
例えば-zと-sを一緒に実行して--out でフォルダに書き出したいとして
どういうルールで並べて記述すればいいでしょうか?

sips -Z 200 * -s format jpeg --out Converted/
あれこれいじって、たまたまこれで動いたのですが
正しいのかわかりません。
よろしくお願いします。スレチだったらすいません。

932 :名無しさん@お腹いっぱい。:2017/03/01(水) 09:20:45.49 .net
>>930
grep にこだわらくても良くて、GNU sed を使ってもいい場合:

$ echo test | sed '/a/!q1'
test
$ echo $?
1

933 :名無しさん@お腹いっぱい。:2017/03/01(水) 09:22:21.87 .net
>>931
正しいけどスレチ
man見ろ
見られないんなら
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sips.1.html

934 :名無しさん@お腹いっぱい。:2017/03/01(水) 09:41:41.92 .net
要求満たしつつ個人的に好きなのは>>927

935 :名無しさん@お腹いっぱい。:2017/03/01(水) 09:50:14.78 .net
「標準出力」じゃないから要求満たしてないんじゃない?

936 :名無しさん@お腹いっぱい。:2017/03/01(水) 10:04:09.41 .net
>>931
そういえばこういうスレもあったり
【Macintosh】MacでUNIX【Terminal】
http://echo.2ch.net/test/read.cgi/unix/1123501408/

mac板でよかった気もするけど
OS XをUnixとして使ってる人の為のスレ 18
http://potato.2ch.net/test/read.cgi/mac/1462475819/

937 :名無しさん@お腹いっぱい。:2017/03/01(水) 10:17:52.51 .net
>>932
あ、間違えた…こうしないと

$ echo test | sed -n 'p;/a/H;${x;/./q0;q1}'

938 :名無しさん@お腹いっぱい。:2017/03/01(水) 12:19:32.48 .net
echo test | awk '/a/{x=1}//END{exit !x}'

939 :名無しさん@お腹いっぱい。:2017/03/01(水) 17:16:16.75 .net
$ echo test | awk '/a/{x=1}{print}END{exit !x}'

じゃないの?

940 :名無しさん@お腹いっぱい。:2017/03/01(水) 17:36:55.41 .net
$ echo test | grep -B10000 -A10000 a

941 :名無しさん@お腹いっぱい。:2017/03/01(水) 17:38:08.89 .net
あああ、1行もマッチしないとダメだ

942 :名無しさん@お腹いっぱい。:2017/03/01(水) 21:54:56.86 .net
>>933 >>936
スレチにもかかわらずありがとうございました!

943 :名無しさん@お腹いっぱい。:2017/03/04(土) 09:13:31.42 .net
>>931
うちでもよく使うが、sips なんて他には無いからな

for i *.jpg; do sips -Z 200 $i -s format jpeg --out Converted/$i; done

ところでマカーな人はbash4入れてるんですかね。bash3なので、最近ココで出てくるreadarrayが使えない

944 :名無しさん@お腹いっぱい。:2017/03/04(土) 09:17:20.48 .net
あー in が抜けてる
for i in *.jpg ; do な

945 :名無しさん@お腹いっぱい。:2017/03/04(土) 10:32:40.92 .net
ImageMagickのconvertみたいなものか

946 :名無しさん@お腹いっぱい。:2017/03/04(土) 18:32:17.60 .net
>>943
>ところでマカーな人はbash4入れてるんですかね。

Homebrewで入れてそっち使うようにしてる

947 :名無しさん@お腹いっぱい。:2017/03/07(火) 19:02:41.56 .net
いつもシェルが使える環境ある?
自分は仕事ならcygwin(今は使ってない)、実機、仮想環境
プライベートならラズパイ、仮想環境かな

948 :名無しさん@お腹いっぱい。:2017/03/07(火) 22:43:56.07 .net
Mac

949 :名無しさん@お腹いっぱい。:2017/03/07(火) 23:30:24.96 .net
俺はスマホにzsh入れてるけど

950 :名無しさん@お腹いっぱい。:2017/03/08(水) 01:50:34.93 .net
>>947
SL-Zaurus(SL-C860)を今だに現役で使っているよ

951 :名無しさん@お腹いっぱい。:2017/03/09(木) 02:31:23.57 .net
そういうのって
ただ書けるだけじゃなくて動かせたり
実際にその機械で便利に使えたりするのですか?

952 :名無しさん@お腹いっぱい。:2017/03/09(木) 17:50:34.83 .net
pythonの出力をシェルの変数にするにはどうやれできますか?

x=$( python test.py )
はダメでした

953 :名無しさん@お腹いっぱい。:2017/03/09(木) 17:58:17.55 .net
$ cat test.py
print("Hello world!")
$ python test.py
Hello world!
$ x=$(python test.py)
$ echo $x
Hello world!

954 :名無しさん@お腹いっぱい。:2017/03/10(金) 09:16:11.80 .net
あれ?そうだよなと思ったら、pythonの文字コードの扱いが変でした
シェルごめんよ

955 :名無しさん@お腹いっぱい。:2017/03/10(金) 13:07:41.33 .net
pythonのせいにするのもどうかと

956 :名無しさん@お腹いっぱい。:2017/03/10(金) 16:08:16.57 .net
pythonは文字コード周り落とし穴が多いすぎ
pythonのせい

957 :名無しさん@お腹いっぱい。:2017/03/11(土) 22:32:29.75 .net
$@から$1を除いたものを関数に渡す方法を教えてくだしあ

958 :名無しさん@お腹いっぱい。:2017/03/11(土) 22:46:42.79 .net
shiftするしかないんじゃないかな
呼出し後に元に戻したいとするとsetかな

959 :名無しさん@お腹いっぱい。:2017/03/11(土) 23:06:24.73 .net
呼び出し先でshiftすりゃいいじゃん

960 :名無しさん@お腹いっぱい。:2017/03/12(日) 00:12:25.14 .net
せやな!

961 :名無しさん@お腹いっぱい。:2017/03/12(日) 01:47:16.95 .net
>>957
bash なら "${@:2}" でええんちゃう

962 :名無しさん@お腹いっぱい。:2017/03/12(日) 04:14:35.39 .net
>>961
その発想もなかった
パラメータとして渡すならこっちの方が分かりやすいな

963 :名無しさん@お腹いっぱい。:2017/03/12(日) 19:17:36.56 .net
ずっと、行の抜き出しはprcegrepを使ってたげど
sed -n -e '/hoge1/,/hoge2/p'
これでできるのを、今知って感動中。しかも、こっちの方が速い。
そのあとの置換は
sed -n -e '/hoge1/,/hoge2/p' | sed -e 's/foo/bar/g'
としかできなかったけど
sed -n -e '/hoge1/,/hoge2/p' -e 's/foo/bar/g'
で、やる方法とかであるんですか?

964 :名無しさん@お腹いっぱい。:2017/03/12(日) 20:09:10.06 .net
sed -n -e 's/foo/bar/g' -e '/hoge1/,/hoge2/p'
じゃだめなの?

965 :名無しさん@お腹いっぱい。:2017/03/12(日) 20:49:35.74 .net
sed -ne '/hoge1/,/hoge2/{s/foo/bar/g;p;}'
でもいけそう

966 :名無しさん@お腹いっぱい。:2017/03/13(月) 15:22:55.40 .net
sedスレあるのに忘れられてそうw

967 :名無しさん@お腹いっぱい。:2017/03/13(月) 17:19:42.05 .net
sed -e '/hoge1/,/hoge2/!d' -e 's/foo/bar/g'

968 :名無しさん@お腹いっぱい。:2017/03/13(月) 19:49:20.42 .net
ありがとうございます
さらに速くなりました

一番最後の文字はコマンドというのを実感

969 :名無しさん@お腹いっぱい。:2017/03/13(月) 20:38:32.02 .net
sedは-n使ったら負け

970 :名無しさん@お腹いっぱい。:2017/03/15(水) 13:36:43.93 .net
なんで?

971 :名無しさん@お腹いっぱい。:2017/03/15(水) 13:37:42.13 .net
うるさい!
俺が負けだって言ったら負けなんだよ
大人しく言う事聞け

972 :名無しさん@お腹いっぱい。:2017/03/15(水) 13:43:38.36 .net
なんだそのダメな親みたいな言い分は

973 :名無しさん@お腹いっぱい。:2017/03/15(水) 13:45:42.22 .net
むしろジャイアンかな

974 :名無しさん@お腹いっぱい。:2017/03/15(水) 16:27:57.38 .net
pでプリントした行は元質問にもあるようにストリームを流れて行かない、
お漏らししたようなものだからね

975 :名無しさん@お腹いっぱい。:2017/03/15(水) 18:03:51.07 .net
sed だと、後方参照の時にバックスラッシュでエスケープしまくることになるのがどうにも…
それで、いつの間にか perl を代わりに使うようになった。

976 :名無しさん@お腹いっぱい。:2017/03/15(水) 19:02:59.32 .net
sedでできることをperlでやるのは微妙に悔しいw

977 :名無しさん@お腹いっぱい。:2017/03/15(水) 20:28:01.98 .net
sed -e "s/微妙に/非常に/" >976

978 :名無しさん@お腹いっぱい。:2017/03/15(水) 20:45:20.13 .net
入力なくね?

979 :名無しさん@お腹いっぱい。:2017/03/15(水) 20:58:18.06 .net
考えすぎ

980 :名無しさん@お腹いっぱい。:2017/03/16(木) 12:44:27.48 .net
>>978
sed -e "s/微妙に/非常に/" <975 >976
ってやって空のファイルを作ってしまったあの頃...

981 :名無しさん@お腹いっぱい。:2017/03/16(木) 12:47:16.46 .net
分からんでもない

982 :名無しさん@お腹いっぱい。:2017/03/16(木) 16:23:09.20 .net
最初に head/tail、grep、sort 辺りを処理の都合上先にやることが多いので、
sed の入力にはパイプを使うことが多いかな。

983 :名無しさん@お腹いっぱい。:2017/03/16(木) 22:48:37.43 .net
日本語下手かw

984 :名無しさん@お腹いっぱい。:2017/03/18(土) 22:25:35.75 .net
grepしてsedは素人

985 :名無しさん@お腹いっぱい。:2017/03/18(土) 23:27:17.30 .net
なんで?

986 :名無しさん@お腹いっぱい。:2017/03/19(日) 00:04:19.09 .net
sedだけでできるからかと

987 :名無しさん@お腹いっぱい。:2017/03/19(日) 00:24:39.59 .net
grepである程度簡単なワードで絞ってからのほうが、複雑な置換は早そうだけど

988 :名無しさん@お腹いっぱい。:2017/03/19(日) 00:57:36.33 .net
実験して見せられるまで性能に関する予想は信じない

989 :名無しさん@お腹いっぱい。:2017/03/19(日) 01:06:54.08 .net
まぁこじらせた人にてみればその手間は実に腹立つだろうな

990 :名無しさん@お腹いっぱい。:2017/03/19(日) 10:07:51.17 .net
「ひとつのことを上手くやる」から考えると、grep してから sed の方がマッチしてそう

991 :名無しさん@お腹いっぱい。:2017/03/19(日) 11:41:33.99 .net
windowsのdos窓は使えるけれど、grep、sed、awk、perlなどはなし。当然他のスクリプト言語もなし。
さらに、新たなソフトのインスコはできない。
まあ、notepadでソースの編集はできる。

Eドライブには多くのフォルダがあって、中にはjpegのえろ画像が1テラ分てんこ盛り
えろ画像だけを全部Dドライブにコピーしたい。
Eドライブのフォルダを見ると8階層ぐらいのフォルダもあって、とても手作業のコピペはムリ。

にゃんとか目的を達成する方法はないであろうか?!
各位のお知恵を拝借したい。

992 :名無しさん@お腹いっぱい。:2017/03/19(日) 13:00:13.49 .net
powershell でも使えばいいんじゃないかな

993 :名無しさん@お腹いっぱい。:2017/03/19(日) 14:12:15.82 .net
ここじゃなくてもっと他に聞くべき所があるだろうな

994 :名無しさん@お腹いっぱい。:2017/03/19(日) 20:18:27.47 .net
その環境的な制限がありつつ、エロ画像を扱うという状況が想像できないな
仕事でエロ画像を扱ってるか上司の個人環境とかかな

995 :名無しさん@お腹いっぱい。:2017/03/19(日) 20:31:39.22 .net
robocopyでコピーすれば良い

996 :名無しさん@お腹いっぱい。:2017/03/19(日) 20:55:37.07 .net
>>988
GNU grep + GNU awk の場合だけど、GNU awk単独よりも早いらしいぞ
http://papiro.hatenablog.jp/entry/2015/05/19/003432

997 :名無しさん@お腹いっぱい。:2017/03/19(日) 22:03:55.18 .net
ドライブを別のPCからアクセス可能にしたらいいのに

998 :名無しさん@お腹いっぱい。:2017/03/19(日) 23:09:48.69 .net
>>996
timeの使い方を知らないって事を自慢してどうしたいんだ?

999 :名無しさん@お腹いっぱい。:2017/03/19(日) 23:10:46.82 .net
エロ画像に寛容なUNIX板

1000 :名無しさん@お腹いっぱい。:2017/03/20(月) 10:44:19.74 .net
>>994
昔社内から netnews が見れてたので perl でスクリプト組んでエロ画像落としまくってたのをふと思い出した
当時は普通にFDに移動して持ち帰ってたけど

1001 :名無しさん@お腹いっぱい。:2017/03/20(月) 12:06:05.49 .net
俺にはもうFDってのがもうすごいわ

総レス数 1001
259 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★