板検索:
シェルスクリプト総合 その25 (835)
まとめビュー
1
名無しさん@お腹いっぱい。[sageteoff]   投稿日:2015/08/14 23:42:01
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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


2
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/14 23:42:43
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や 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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/14 23:44:39
□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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/14 23:50:19
□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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/14 23:53:33
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/14 23:56:30
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. ☆シェルスクリプトを勉強するにあたって☆
 UNIX板の別スレッドへ
2. 便利なシェルスクリプト見せろ
 UNIX板の別スレッドへ
3. シェルスクリプト総合 その1
 UNIX板の別スレッドへ
後略。検索して下さい
コメント1件

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

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

8
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/15 00:04:34
テンプレは以上です。
漏れや要求があれば各自追記願います。

9
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/15 03:33:33
Windows用のはないの?

10
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/15 13:42:11
Windows用の何?

11
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/15 14:41:40
bashとかTraditional Bourne Shellとか。

12
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/15 17:47:20
Cygwin入れれば

13
名無しさん@お腹いっぱい。[]   投稿日:2015/08/16 00:14:04
ping使うやつが移植性無くなるな
コメント1件

14
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/16 21:47:33
テキストファイルの分割で教えてください

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

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

15
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/16 22:42:11
すればいいじゃん。

16
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/16 23:56:46
>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"
コメント1件

17
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/17 00:28:08
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 合計
コメント1件

18
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/17 07:22:58
>16
なるほど
まずは処理内容を勉強して、考えます

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

19
名無しさん@お腹いっぱい。[]   投稿日:2015/08/23 21:52:42
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}"/*としてもうまくいきませんでした
コメント2件


20
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/23 22:25:01
>19
チルダがクォートされているかどうかで違う
$ echo ~/Desktop/foo
/home/hoge/Desktop/foo
$ echo "~/Desktop/foo"
~/Desktop/foo
コメント1件

21
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/23 22:53:07
>19
$ sh test.sh "${HOME}/Desktop/foo"

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

23
19[sage]   投稿日:2015/08/23 23:37:21
すみません
${1}/* と "${1}/*" はだめでしたが "${1}"/* としたらうまくいきました
ダブルクォートって難しいです

24
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/24 04:09:11
${1}/ 中のファイルに空白を含むファイル名があるとダメ

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

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

と2行に渡って表示される
コメント2件

25
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/25 09:55:00
そうでもないよ
$ 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
コメント2件

26
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/25 11:38:42
>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
コメント1件

27
26[sage]   投稿日:2015/08/25 11:40:11
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/25 12:23:17
>25
>24 が駄目と言ってるのは ${1} の場合の話だろw

"$1"ならもちろん問題ないよ。
コメント1件

29
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/25 12:29:22
bash-2.05 とか古いの使うにも程がある。劣度法度9か何かか?

30
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/25 12:55:51
>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
$
コメント1件

31
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/25 13:12:03
話を理解していない人々が多過ぎる。スルーしよw

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

33
26[sage]   投稿日:2015/08/25 13:25:30
「"${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[sage]   投稿日:2015/08/25 13:26:35
【続き】
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/25 13:30:12
>26 それは改行コード入りファイル名があるからNG

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

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

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

38
名無しさん@お腹いっぱい。[]   投稿日:2015/09/06 16:40:59
引数 $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
コメント3件

39
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/06 17:58:01
>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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/06 17:59:13
引数はそういうものです
bug_versionを引数無しで呼び出してるので$1には何も設定されません

41
39[sage]   投稿日:2015/09/06 18:00:18
【訂正】
$ sh bug.sh arg
argument arg can't handle in function
argument arg can handle out of function

42
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/06 19:34:01
>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
愚かにも引数忘れてた
みんなありがとう
コードが綺麗になった

44
名無しさん@お腹いっぱい。[]   投稿日:2015/09/09 19:11:24
質問です。

grep "aaa\|bbb" はokなのに、grep "aaa\&bbb" はなぜ
だめなんでしょう?
コメント3件

45
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/09 20:10:57
>44
どちらも仕様どおりに正しく動く
何をもってダメという?
コメント2件

46
名無しさん@お腹いっぱい。[]   投稿日:2015/09/09 20:21:28
>45

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

$ echo "aaa bbb" | grep "aaa\|bbb"; echo $?
aaa bbb ccc
0
$ echo "aaa bbb" | grep "aaa\&bbb"; echo $?
1
コメント3件

47
名無しさん@お腹いっぱい。[]   投稿日:2015/09/09 20:25:36
>45

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

48
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/09 20:50:24
>46
だからそれは仕様どおり

49
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/09 20:54:06
\|には特別な意味があるけど\&にはないんだよ
単に&と書いたのと同じ

50
39、41[sage]   投稿日:2015/09/10 02:49:03
>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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/10 07:50:58
$ grep -E 'aaa.*bbb|bbb.*aaa'

か、GNU grep なら

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

でもOK。

52
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/10 07:56:54
awk 使え awk '/aaa/&&/bbb/'

53
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/10 17:51:40
\& なんてどこに書いてあったの

54
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/24 23:16:07
宣伝

【POSIX】UNIXプログラミング【BSD】 [転載禁止]&#169;2ch.net
【POSIX】UNIXプログラミング【BSD】

55
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/27 16:29:45
こんな風なテキストファイル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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/27 16:38:38
力技でも動いているならそれでいいんじゃない?
この間、似たような事を業務でやったけど考えるの面倒だったから
pasteコマンドでひとつのファイルにして、特定フィールドを読み込む方法にした。
なにぶん、思想が古い年代なもんで複数ファイルを
同時に読み込んであーだこーだするのはCで書きたくなる。

57
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/27 17:34:07
きれいでも動かないコードより
きたなくてもちゃんと動作するコードの方がよい
そんな格言なかったっけ?
コメント1件

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

59
名無しさん@お腹いっぱい。[sage]   投稿日:2015/09/28 01:10:28
過疎ってるけど
awkについて語るスレ /プログラム板
もありますよ。a11からb24が全部数値で3つまでは確実に値が入ってるなら
awk 'BEGIN{OFS=","};!~/%/{print $1,$2,$3,$4+0,0}'
で済む気がするけど。

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

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

61
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/04 22:53:55
正規表現で書くとどうなるんだ?

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

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

65
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/15 01:00:25
\p{Hiragana}

66
名無しさん@お腹いっぱい。[]   投稿日:2015/10/16 00:12:27
第一感その手のものを使って保守性ケアするよな

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

68
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/16 13:35:52
WMとかDEの機能使った方がいいんじゃね
シェルスクリプトの話ではない

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

70
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/16 16:30:40
キーバインド割り当てかaliasを作るかじゃない?

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

72
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/18 03:29:42
busyboxでunicode変換ってどうする?

73
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/19 12:52:16
busybox sh に限らず、iconv とかuconvとか入れて使うんじゃない?

74
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/19 14:00:50
すみませんが詳しい方のみ回答をお願いします

75
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/19 14:28:46
unicodeの何を?何へ?何から?変換するのかもうちょっと具体的に書かないと応える気にならない

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

77
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/20 00:06:45
只のコピペの別人にキレてどうするよ。

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

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

AAAAAAAAA
BBBB
CCCCCCCCCC
DDDDDDDDDDD
EEEEEEEEEEE

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

AAAAAAAAA
AAAAAAAAA
BBBB
BBBB
CCCCCCCCCC
CCCCCCCCCC
DDDDDDDDDDD
DDDDDDDDDDD
EEEEEEEEEEE
EEEEEEEEEEE

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

79
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/20 07:41:49
>78
sed p foo.txt
コメント1件

80
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/20 21:45:48
>79
ありがとうございます
こんなに簡単にできちゃった・・・

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

81
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/20 23:06:19
coolだよね

82
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 00:43:12
>78を元に戻す方法は?

83
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 00:49:57
uniq

84
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 01:33:11
4行並んだら破綻

85
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 01:46:20
awk NR%2

86
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 01:56:17
あえてsedで
sed 'N; s/.*\n//'

87
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 06:13:41
GNU sed 限定

sed -n 1~2p

88
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 06:38:20
sed 'n;d' だけでいいのにw

89
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/21 07:02:03
尊い

90
名無しさん@お腹いっぱい。[]   投稿日:2015/10/22 08:26:25
そうだな
現代でも使える場面のあるsedは凄い

91
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/22 12:24:50
sedでutfの変換テーブル書いたらどの位の速度で動くものだろうか?

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

93
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/22 15:27:18
変換しないとだめです
pdftotext あたりで標準出力に吐かせて grep とか

94
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/22 15:55:01
こんな感じになりました
pdftotext hoge.pdf - | grep aaa

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


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

96
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 08:43:35
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
コメント1件

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

98
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 11:16:32
でも実際速くなったんでしょ?
コメント1件

99
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 12:25:26
今の時代マルチコアしかないような気がするんだけど・・・

100
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 12:54:33
今の時代Linuxしかないような気がするんだけど・・・
今の時代SSDしかないような気がするんだけど・・・

101
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 17:55:11
>98
他の環境だとリダイレクトの方が速かったよ

102
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 18:45:52
それは反論になってない

103
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 23:01:18
C言語で書いたほうが早かったよ
コメント1件

104
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/27 23:24:17
>103
その書いたやつを見せてください。ぜひとも参考にしたいです

105
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 05:47:50
system("cat file | command");

106
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 06:27:57
同じスクリプトでもcatを使うと電解コンデンサがライトアップしやすいよw

107
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 07:30:41
windowsでいうINIファイルのような、設定情報を格納したファイルを作ろうとしています。

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

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

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

108
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 08:21:07
>107
あなたはどんな業界の人ですか?

109
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 10:38:06
設定ファイル自体をシェルスクリプトにして . しちゃうのが楽じゃね
RedHat系なら /etc/sysconfig/ 以下、Debian系なら /etc/default/ 以下を参考に
コメント1件

110
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 11:48:34
またbusyboxの人か

111
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 11:54:18
こうするのが楽とかじゃなくて業界標準でお願いします

112
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 12:20:06
普通にINIファイル形式でいい
シェルスクリプトから呼べば(実行すれは)環境変数として設定されるようになる
コメント1件

113
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 12:21:45
ポイントは読み込むんじゃなくて実行させるってこと
readしてexportするんじゃなくてそのまま実行して環境変数に設定する
コメント1件

114
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 13:28:25
実行はしたくないです。インジェクションされます。。

115
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 13:35:42
セキュリティが心配なら標準とは対極の方向に向かうべきだろアホか

116
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 15:00:41
>109
>112
>113

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

117
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 22:16:32
質問してるくせに偉そうだな
コメント1件

118
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/28 23:07:56
>117
具体的にどこが偉そうなの?どこがカンに障るの?

119
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 04:20:02
教えを乞うてるくせにお腹いっぱいなのが気にくわない。
コメント1件

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

121
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 07:39:00
>119
お腹いっぱいとは?

122
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 08:29:26
名前じゃね

123
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 09:02:26
シェルスクリプトっていう性質上、ある程度仕方ない面もあるけども
最近は余りにもスレ違いな話題が多くないか?
コメント2件

124
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 10:15:07
スレ違いでも板違いでもかまってもらえるからな
コメント1件

125
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 11:15:37
>120
お前脳みそついてなくてUnix使ってんのか?
Windowsでも使ってろよ
希望してることができるから

126
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 12:04:46
コピペに釣られんな

127
名無しさん@お腹いっぱい。[sage]   投稿日:2015/10/29 22:18:02

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

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

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

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

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....#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"}
コメント1件

132
129[sage]   投稿日:2015/11/02 14:09:15
>130
アドバイスありがとうございます。自分もよくそこ見ます

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

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

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

134
131[sage]   投稿日:2015/11/03 18:32:53
>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
ADB shellを使ってるのですが.shで保存したadbのスクリプトを順番に実行させることって可能ですか?
例えばダブルクリックした時点で1.shが動いて〜10秒後に2.shを動かして〜というような感じにしたいです。
お力貸していただけると幸いです。

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

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

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

138
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/04 13:15:27
>uwscというフリーソフトを使って1.batを起動させて〜10秒後に2.batといった具合に

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

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

140
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/04 13:33:00
あとは、何をやりたいのか具体的に書くしか

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

141
飛来したオバハン[sage]   投稿日:2015/11/04 13:33:27
アンタ泥とかwindowsとかイタチじゃないの?

142
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/04 17:24:19
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/04 17:24:50
又は、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
みなさんありがとうございました。すこし足がかりが得られました。
やっぱりlinuxのほうが軽くて動作も安定してる感じなのでこれからはlinux中心にデバッグを行っていけたらと思います。

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

146
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/08 20:08:08
シェルスクリプトと違って、シェルの話だと思う
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/08 20:14:18
シェルスクリプトのポータビリティーの話とも言えるか...
訂正

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

echo -e "test\ttest"



-e test test

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

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

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

149
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/08 22:14:22
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

ってしたらその行が出力されなくてハマったことがあった…
コメント1件

150
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/09 12:53:41
>149
どうやって回避したの?参考までに知りたい

151
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/09 18:25:32
え? 単に printf '%s\n' "$str" ってしただけだよ

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

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

154
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/11 19:33:08
それは書き込まなくてよかったんじゃないか

155
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/12 14:52:38
複数ファイルのダウンロードアルゴリズムについて教えてください

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

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

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

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

156
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/12 15:11:44
なんで大きいファイルから始めると全体の終了時間が早くなるの?

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

たとえば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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/12 15:28:52
例えば他のファイル全部の合計より大きなファイルが一つある場合、
この大きなファイルのダウンロードを最初からスタートさせれば
全体ダウンロード時間はこのファイルのダウンロード時間になるけど、
この大きなファイルのダウンロード開始を遅らせると
全体ダウンロード時間もそれだけ長くなることになるってことだよね
コメント1件

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

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

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

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

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

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

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

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

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

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

166
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/13 02:37:34
多重ダウンロード禁止

167
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/13 02:48:29
分割ダウンロード禁止

168
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/13 12:04:00
健全でない言葉が含まれているため表示しません 内容を確認する

169
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/13 12:06:28
\(^o^)/

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

171
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/14 00:11:59
回線異常で止まった時にさらに追い討ちかけるのか
コメント1件

172
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/14 00:39:23
ん、ヒントにならなかったか
ファイルを分割してダウンロードすればいい

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

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

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

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

175
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/19 07:28:16
sudo コマンドが >>/path/a.txt を持って行ってしまうのが問題(だと思う)
sudo sh -c 'echo "abc" >> /path/a.txt'
コメント2件

176
名無しさん@お腹いっぱい。[]   投稿日:2015/11/19 07:30:35
174です。

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

177
名無しさん@お腹いっぱい。[]   投稿日:2015/11/19 09:35:05
>175

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

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

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

178
名無しさん@お腹いっぱい。[]   投稿日:2015/11/19 09:36:39
まちがった。

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

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

179
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/19 13:15:22
ググると、これらはよく見る様になりました
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"
コメント1件

180
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/19 22:35:50
>179
スレ違い
というかシェルスクリプトにすれば問題ないのに

181
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/20 13:29:04
どういう事?
スクリプトで使う要点の一行を書くのは、このスレでなくともよく有る事では?

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

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

183
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/20 13:54:47
なんでスレ違い?

184
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/20 14:14:40
ラベルが低いから。

185
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/20 14:38:57
要点を貼るのはいいんだが
スクリプトの意図がよくわからない

186
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/20 19:37:14
自演くさっ

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

モジモジ
文字文字
コメント2件

188
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 00:03:09
無い

189
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 00:06:00
じゃ、GNU grep で。

#!/bin/sh

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

190
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 00:15:34
>187
ありません

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

191
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 00:18:18
>189
保守性ゼロ、使い回せる可能性ゼロのいい見本だな

192
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 00:48:31
いいんじゃない、それで

193
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 00:52:28
>189
できました、ありがとうございます!

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

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

195
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 01:04:07
>193
if文とか無いの?


関数の中に

}

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

196
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 01:05:28
かぶってた

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

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

198
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 01:26:46
indent(1) と組み合わせればどうか

199
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 02:25:44
tag作れよ

200
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 17:10:42
sedならどうなの?
コメント1件

201
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 18:12:48
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 18:21:02
こんなんでいいんじゃない

grep -E 'aaa|bbb.*ccc|ccc.*bbb' a.txt
コメント1件

203
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/21 18:27:53
>202
できました
「bbb.*ccc」「ccc.*bbb」という書き方が思いつきませんでした

ありがとうございました

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

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

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

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

orange 25「かんきつ」

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

環境はMac El Capitanです
コメント2件

206
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/22 20:11:25
>205
for i in {01..25}
do
mv $i.mp4 $(grep $i List.txt).mp4
done
コメント2件

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

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

208
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/22 20:57:02
ありがとうございます

209
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/23 10:43:36
常にダブルクォートを心がけること

210
名無しさん@お腹いっぱい。[]   投稿日:2015/11/23 14:52:02
>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
}
コメント1件

211
名無しさん@お腹いっぱい。[]   投稿日:2015/11/23 14:53:07
ごめん引数の順序が逆になってる。

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

213
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/23 21:42:42
>206
bashism

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

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

215
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/24 06:19:42
そういう、スペース入りファイル名未対応回答はいいです

216
名無しさん@お腹いっぱい。[]   投稿日:2015/11/24 07:10:44
ごめんねーzshだと大丈夫なんだけどな。
じゃあちょっと分らないな。

217
名無しさん@お腹いっぱい。[]   投稿日:2015/11/24 07:13:51
しかし根本的なお勧めな解答をするならば、fileにはわざわざ音楽名をつけない事だね。

218
名無しさん@お腹いっぱい。[]   投稿日:2015/11/24 07:15:07
zshを使ってないならそんな事なおさらだよ。

219
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/24 08:53:18
>214
xargsが無駄です。
catが無駄です。

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

220
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/24 09:27:10
ていうか、>214動く?

221
名無しさん@お腹いっぱい。[]   投稿日:2015/11/24 10:13:12
こっちの台詞だよ。それ動くのかね。

222
名無しさん@お腹いっぱい。[]   投稿日:2015/11/24 10:16:52
まあどうでもいいや。

223
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/24 11:42:10
こっちってどっちだ

224
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/25 00:35:58
>205
bash でもいいなら

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

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

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

int main(int argc, char *argv[]) {
コメント1件

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

227
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/29 10:07:15
$sed -e '$-3,$d' file
sed: -e expression #1, char 2: 不明なコマンド: `-'

なして?
コメント1件

228
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/29 14:16:20
>227
sedのアドレスで $-3 とか使えませんw

head -n -4 で行けるよ。 ($-3から$までだから終りの4行削除)
コメント1件

229
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/29 18:57:29
ここUNIX板だよ

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

231
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/30 09:32:38
>228

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

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

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

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

233
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/30 12:19:42
使える実装もあんのかな

234
名無しさん@お腹いっぱい。[sage]   投稿日:2015/11/30 13:05:21
>231
同様の記述ってどこ?

235
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/01 02:36:00
>231の謝罪マダァ-? (・∀・ )っ/凵⌒☆チンチン

236
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/01 15:02:08
健全でない言葉が含まれているため表示しません 内容を確認する

237
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/01 15:30:51
あなたもコメントしてみませんか :)

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

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

240
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/01 17:18:23
面白そうじゃないか

241
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/01 18:23:49
> 全部パッファしなきゃ実装できない
最後に切る行数分だけバッファーすれば良い

242
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/01 21:49:07
そんなことしか思いつかないところが壊滅的にセンス悪い
1,$-3s/hoge/hage/
コメント1件

243
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/01 22:53:36
なんだまた一人で自演だったか

244
not 238[sage]   投稿日:2015/12/02 07:07:15
>242 でも、4行分バッファして4行分処理を遅延すればできるが。

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

245
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/02 23:21:03
バッファーした後は、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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/04 00:22:12
# 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
コメント1件

247
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/04 06:04:34
>246
-e オプションで複数に分ける意味ないだろ。

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

248
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/04 06:26:55
シェルスクリプトでオブジェクト指向ってできないんですか?
コメント1件

249
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/04 07:53:54
>248
つ 『Unix Shell Objects』
http://www.amazon.co.jp/dp/toc/

250
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 10:28:27
httpsでファイル入手するスクリプトで一番汎用的な書き方ってなんだろう?
コメント2件

251
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 10:33:45
wget

252
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 10:48:19
curl

253
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 11:21:08
古い環境だと結局ブラウザ使うのが一番確実だったりするのだろうか?
コメント1件

254
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 13:20:40
>253
スクリプトからブラウザ呼ぶの?

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

256
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 21:08:34
linux - Is wget or similar programs always available on POSIX systems? - Stack Overflow
http://stackoverflow.com/questions/9490872/is-wget-or-similar-programs...

まあ、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
コメント2件

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

258
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 21:27:45
httpsってsslかなんかだっけ?

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

260
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 23:08:08
https telnet で検索
コメント1件

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

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

263
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/07 23:53:10
s_clientつーのがある

264
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 00:09:05
telnetとoepnsslの区別が出来ない人がいるな

265
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 00:54:46
256のように標準入力からコマンド流しこめる奴って話だろ。アスペ。


266
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 07:04:54
同様に扱える

{
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
コメント2件

267
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 07:25:22
>250

perlのモジュール使う
コメント1件

268
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 10:24:12
>267
それこそ環境選ばないか?

269
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 11:28:41
perl入ってない環境使う機会なんて
もうほとんどなくなったなぁ

270
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 11:50:28
perl入ってる環境使う機会なんて
もうほとんどなくなったなぁ

271
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 12:05:03
初版から標準対応しているものでないと使いにくいよね。

272
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 14:20:28
入ってなくて、入れていいなら入れるもの

273
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 14:29:50
入れ替えるのはどこかで不都合があるかわかったもんじゃないからな。

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

もっと頑張ってくださいよ。
コメント1件

275
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 16:28:48
条件後出し北w

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

277
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 17:49:54
じゃ、その4MBのROMの中身、開示しないとだめだろ。
つーか、なんか白けてきた。。。
コメント1件

278
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 17:50:49
それは>274に聞いてくれ

279
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 17:55:37
>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
コメント1件

280
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 18:25:47
wget使えんのか?

281
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 18:28:57
busyboxでwgetは使えるが、httpsには対応してない。(httpとftpのみ)

282
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 19:30:56
最近はスクリプトと言えばbusyboxの仕事ばかり。
perl使いは社史編纂室に送られたw
コメント1件

283
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 19:31:25
条件を増やしても減らしても後出し

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

後出し条件
4MBのルーターのtelnet接続で動く技で
コメント1件

284
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 20:02:22
>283
前者は汎用的、後者はカスタムで、条件が正反対だろうが

285
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 20:08:32
条件は部分集合だろ?
コメント1件

286
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 20:11:56
いまどきだとtelnetがなくてsshだけだったりするのもあるのだろうか?

287
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 20:25:44
>285
違うからブランチだと言ってるんだろう。そもそも別人なので後出しも前田氏もない。

288
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 20:52:44
へぇ〜別人ねぇ〜
別人が横から条件変えてるのか

何故に言い切るの?
あほらし。相手して損した
コメント3件


289
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 21:01:10
>288
250だけど何か質問ある?

290
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 21:16:23
grepを破壊的に使うことってできます?
あればおしえてください
他のフィルタ系コマンドでも応用できるものだとよりよいです
コメント2件

291
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 21:38:58
>288
リテラシー低いよ

292
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 21:44:05
>290
(rm file; grep hoge >file) <file
Cygwinじゃ無理かも
コメント2件

293
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 21:47:39
あとファイルシステムの容量が不足したら
元ファイルまで失われるという欠陥もある

294
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 21:48:19
>288
>279で条件提示したんだから、この中のコマンドで完結できる案を出しなさいよ

295
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/08 21:49:52
>292
できました(Cygwin64でも
ありがとうございます!

296
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 05:48:14
初歩的な質問ですみません。
find . -type f -name '*.txt' と
find . -name '*.txt' -type f は、どっち良いとかありますか?
コメント3件

297
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 07:16:13
>282

まじかw 
ワロタ

298
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 07:31:45
>296
どっちでもいいよ
ほとんどプレーンファイルっていう普通の状況なら、
名前を先に判定したほうが計測できないレベルで速いかもしれない
コメント1件

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

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

301
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 09:01:58
>296
レギュラーファイル以外のディレクトリとかが1000万個あるなら、名前を比較しないで済む前者の方が良いかもしれない
コメント1件

302
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 12:39:47
>299
wgetがhttps対応したのは後出しなんじゃないか?
busyboxが登場した頃のwgetでは標準では無かったと思われ

303
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 12:53:18
そもそも軽くするのにashなんて必要だろうか?
コメント1件

304
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 13:12:18
>303
他の選択肢は?

305
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 13:38:24
2001年からHTTPSサポートしてるんだぜ
それ以上古い環境なんて考慮する必要ないよ

306
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 14:03:30
そんな事言ってる奴はbashとopensslの穴に落ちるがいい。
なんと言われようとshが標準

307
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/10 15:56:58
>298>301
ありがとうございます、実質変わらないんですね。
気にしないことにします。

308
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/11 00:02:46
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/11 00:30:35
>296
そういう時は time コマンドを使って CPU 時間計測するというのも手だぞ。
コメント1件

310
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/11 01:31:31
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 こりゃムリゲーだわ
コメント2件

311
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/11 13:13:34
>310

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

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

313
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/12 12:37:42
>310-311
ちょっと待った、216KBあればスクリプト何行書けるよ?
前スレのRSA暗号のスクリプトの10倍程度に膨れたとしても余裕で入らないか?
コメント1件

314
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/12 14:30:14
>313
エラーメッセージ読めないなら黙ってなよ

315
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/12 14:35:22
openssl相当をシェルスクリプトで書くっていう
意味だと読み取れないなら黙ってろよ
コメント1件

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

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

318
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/12 20:44:59
楕円曲線暗号、メッセージダイジェスト、asn1デコーダ、エンコーダ、pemエンコーダ、デコーダーが
シェルスクリプトだけで作れない証明は?
コメント1件

319
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/12 21:06:08
>318
作って公開したら全員黙るよ

320
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/13 01:42:09
後、共通鍵暗号も要るね
ワクワク

321
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/13 02:03:11
なんかガキが出てきて凄そうなキーワード上げてるって感じにしか見えん

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

323
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/13 03:26:03
っていうか、作り方わかってるなら組めるだろ
自分で作れないものを挙げろよ
コメント1件

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

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

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

(別の意味で)黙るよね

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

328
名無しさん@お腹いっぱい。[age]   投稿日:2015/12/13 11:05:38
できるよ。無意味だからしないけど。
黙らなくていいよ。グズグズ言い続けて。

329
名無しさん@お腹いっぱい。[]   投稿日:2015/12/13 11:19:13
世界初だから全然無意味じゃない。
コメント1件

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

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

331
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/13 13:57:10
uname

332
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/18 20:07:27
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/18 20:08:17
スクリプト
#!/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
328が来年のusenixでopenssl相当のシェルスクリプトの実装を発表する

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

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

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

338
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/20 19:12:40
perl -e "fork while fork" &

339
名無しさん@お腹いっぱい。[]   投稿日:2015/12/20 21:35:35
>336
cpanのどれ利用した?
それとも使ってない
コメント1件

340
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/20 22:33:07
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/21 16:40:57
>337
表面はきれいに見えても、接続口が汚れてることはよくある。
接続部の汚れはなかなか落ちないから4ヶ月ぐらい待ってみて。

342
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/21 18:49:28
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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/21 23:00:15
勉強でシンプルなものを作成しました

#!/bin/bash

while :
do
usr=`id | cut -d

344
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/21 23:01:19
勉強でシンプルなものを作成しました

#!/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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/21 23:56:53
id -un
- or -
whoami
コメント1件

346
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/22 00:13:25
現在の 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
コメント1件

347
344[sage]   投稿日:2015/12/22 00:15:04
>345
回答ありがとうございます。

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

348
344[sage]   投稿日:2015/12/22 00:22:29
>346
回答いただきありがとうございます。

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

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

349
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/22 00:45:28
そのスクリプトをバックグラウンドで起動して 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
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/22 08:00:39
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
ID変わってますが348です。

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

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

352
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/23 23:18:50
IDが変わったようには見えないが

353
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/23 23:40:21
ていうかIDが見えないが
コメント1件

354
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/24 04:08:04
2chMateなら見えるよ

355
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/24 12:24:50
本質的でないところでばかり実力を揮発するクラスタの皆さん!
コンニチワ

356
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/24 18:48:12
>353
ワロタw

357
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/24 18:59:35
スレ違いすんません。

>339

>336です。

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

ggrば出ます。

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

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

で、投稿できるようにしてみた。嵐はしてないよ。
コメント1件

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

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

359
名無しさん@お腹いっぱい。[]   投稿日:2015/12/25 00:19:36
>357
thanks

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

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

361
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/27 12:23:52
-iは引数のあるなしで動かなかったりするな

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

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

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

365
名無しさん@お腹いっぱい。[sage]   投稿日:2015/12/27 19:37:36
>364
closeして誰も参照しなくなるまではi-nodeも含めて再利用されないよ
コメント1件

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

367
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/01 11:20:57
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
コメント1件

368
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/01 22:44:41
a happy new yeah.

>367
素晴らしい!

369
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/02 22:52:05
有難う!ファイルを書いた人は素晴らしいよね

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

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

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

371
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/14 12:18:20
テキストファイルだけのデータベースってどんなん?

372
名無しさん@お腹いっぱい。[]   投稿日:2016/01/14 12:37:09
女だらけの水泳大会みたいなものだろ

373
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/14 13:49:41
Berkeley DB使え、とかそういう話?

374
名無しさん@お腹いっぱい。[]   投稿日:2016/01/14 19:07:54
人のボケつぶした上にダダスベリって最悪じゃね?
コメント1件

375
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/14 19:32:14
職場の開発環境がLinuxでcshなのですが
cshでいいリファレンスはありませんか?
ネットが使えないのでWebページは無理です。
コメント3件

376
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/14 20:23:34
定年間近の老人から口伝で受け継ぎましょう

377
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/14 22:27:43
changelogで日記書く人もいるしな

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

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

380
名無しさん@お腹いっぱい。[]   投稿日:2016/01/14 23:24:27
いまどきc shell使っているところってC言語でも使ってるの?

381
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/14 23:24:38
ネットが使えないのにアマゾン?

382
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/15 00:15:28
みんとちゃんは天使

383
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/15 11:42:41
>374
もともとのボケからすべってるじゃん

384
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/15 14:57:47
ここにいる様な人たちとだけは仕事したくないな〜

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

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

387
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/15 15:51:51
データーリカバリーとデリヘルって似てるね

388
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/15 16:08:50
ディスカバリーチャンネルとデタリカバリーチャンネルも似てるね。

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

390
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/15 21:54:24
&#9747; 進められた

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

>375
manは入ってないの?

392
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/17 00:38:52
shって配列使えないんだ?
bashは使えるよね、二次元配列も

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

394
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/17 15:16:57

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

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

396
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/21 09:51:46
sed -iとかな

397
名無しさん@お腹いっぱい。[sega]   投稿日:2016/01/21 21:38:36
オプションをある程度統一してほしいよね
-hでヘルプ、-vでバージョン見るくらいは統一してほしい
コメント2件

398
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/22 09:43:42
>397

ほんとになw

399
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/22 10:23:07
grep -v してるスクリプトが動かなくなったりしたら嫌だな

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

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

401
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/23 00:27:07
ロングオプションを使い給え。
コメント1件

402
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/23 16:57:11
ロングオプションって、ロング過ぎてなんだかなあ
でも今度から意識してみよっと


ちょっと暇つぶし

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

whatis $( which who )

403
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/23 19:06:44
>397
http://www.gnu.org/software/coreutils/manual/html_node/Common-op...
‘--help’ ヘルプ
‘--version’ バージョン
‘--’ オプションリスト区切り
コメント1件

404
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/23 19:21:27
>403
そういうことじゃないだろ…

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

406
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/28 05:58:34
毎回ランダムに、コマンドを紹介
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-ca...
> cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2>/dev/null | shuf -n 1)

407
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/28 06:13:04
shufって何?

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

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

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

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

410
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/28 11:04:04
pgrepがあるならpkillもあるでしょ

411
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/28 11:35:34
pkillだとshを殺してしまうことになって都合が悪いです〜

412
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/28 11:50:19
pkill -f 'sh script.sh'

413
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/28 16:03:14
ありがとう
帰ってから試してみる

414
名無しさん@お腹いっぱい。[]   投稿日:2016/01/30 08:10:48
tputで表示させたいのですが改行されません

#!/bin/sh

while :
do
# Get Time
time=

415
名無しさん@お腹いっぱい。[]   投稿日:2016/01/30 08:14:07
すいませんダブルクォーテーションよりしたが表示されませんでした

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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/30 09:44:44
tput についていちいち覚えていないので適当でスマンが
気になる点を上げておいた

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

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


417
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/30 09:50:10
訂正

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

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

419
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/30 10:03:02
ls でソートされなければ、
find sort awk cut xargs 等を組み合わせる

420
名無しさん@お腹いっぱい。[]   投稿日:2016/01/31 10:50:47
質問です。

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

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

421
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/31 11:10:19
>420
待ち行列の長さ
コメント1件

422
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/31 14:36:00

423
名無しさん@お腹いっぱい。[]   投稿日:2016/01/31 16:34:32
>421 >422
ありがとうございます。

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

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

424
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/31 21:07:22

425
名無しさん@お腹いっぱい。[sage]   投稿日:2016/01/31 21:09:13
procps-ng の uptime の説明が分かりやすい

uptime(1) - Linux manual page
http://man7.org/linux/man-pages/man1/uptime.1.html
コメント1件

426
名無しさん@お腹いっぱい。[]   投稿日:2016/02/02 07:53:41
>424
さんくすです。

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

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

427
名無しさん@お腹いっぱい。[]   投稿日:2016/02/02 07:57:31
>425
頑張って読みます。どもです。

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

429
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/02 11:43:42
>426
別に割る必要はないと思うけど
どれくらい溜まってるかを知りたいならだけど

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

http://www.amazon.co.jp/dp/4797321946/
コメント1件

431
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/02 18:59:58

432
名無しさん@お腹いっぱい。[]   投稿日:2016/02/02 20:16:40
言語はあくまで道具

何をしたいかによる
コメント1件

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

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

434
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/02 22:48:53
マルチ禁止は2chだけのルールではなく20年以上前のRFCにさえ書かれている基本中の基本

435
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/02 23:02:32
健全でない言葉が含まれているため表示しません 内容を確認する

436
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/03 00:07:58
たたかれても懲りずに勉強してね

スクリプトを色々と探してきて、長さ順にリストアップする
{ 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
だいたい、bashとpythonどっちかっていう問題か?ww
どっちも並行してやるべき。

438
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/04 06:50:05
『20年動く』本読んだけどひたすら方言に配慮する話書いてあった
もうpythonでいいや
コメント2件

439
名無しさん@お腹いっぱい。[]   投稿日:2016/02/04 08:44:03
>438
pythonは後付けのなので、そのうちなくなるかもしれません。

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

440
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/04 08:55:41
なくならないにしても、python2のスクリプトのかなりがpython3で動かなくなるよ

441
名無しさん@お腹いっぱい。[]   投稿日:2016/02/04 09:06:11
pythonはなくなってもUNIXは困らない。
コメント1件

442
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/05 01:28:36
>441
vimの拡張にpythonが採用されてることを知らないのか…

443
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/05 02:35:34
POSIXにvimもpythonも入って無いしな

444
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/05 02:49:11
UNIX開発にふつーにVIM使われてるぞ

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

446
名無しさん@お腹いっぱい。[]   投稿日:2016/02/06 04:39:26
>438
方言覚えるのとPython覚えるの、労力そんなに違うか?

447
名無しさん@お腹いっぱい。[]   投稿日:2016/02/06 06:08:30
シェルスクリプトはOSの一部だからな。

pythonとは格が違う。

448
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/06 09:18:43
#!/usr/bin/shと書いてもbashが走るこんな世の中じゃ
コメント1件

449
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/06 17:24:54
#!/usr/bin/shと書いてシェルスクリプトを名乗るのか。
コメント2件

450
名無しさん@お腹いっぱい。[]   投稿日:2016/02/06 18:52:59
>448
bashがbshのマネをする変なスクリプトたがら推奨しない。

451
名無しさん@お腹いっぱい。[]   投稿日:2016/02/06 18:54:27
>449
スクリプトの種類を名乗る
コメント1件

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

453
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/06 20:35:47
大丈夫、そんな人はいない

454
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/06 21:23:44
/bin じゃなくて /usr/bin なのか?という話だろ
コメント1件

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

456
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/07 12:45:47
/usrを別パーティションにしてた頃の名残だよね

457
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/07 18:02:30
/sbinまでは認めてやっても良い

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

459
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 08:20:49
いっそ、bashをオブジェクト指向に進化させれば、
pythonなぞいらなくなる

460
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 10:14:57
全角だとバカにしか見えないのは何故だ?
コメント2件

461
名無しさん@お腹いっぱい。[]   投稿日:2016/02/08 10:31:10
>460
おっさんの可能性もある。

462
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 10:49:58
新聞社の方でしょう

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

464
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 12:34:34
>460
裸の王様だからかな

465
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 13:02:09
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 ...
コメント2件

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

467
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 15:38:21
>466

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

468
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 17:11:40
オプションも渡せるよ。
#!/usr/bin/bash -x
とかね。
コメント1件

469
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 20:55:16
>468
それなら俺もお前も大体の奴が知ってる。

470
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/08 23:06:27
一個だけしか渡せないのは意外と知られていない

471
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 00:18:04
変数に含まれる記号で質問です。
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

と返答がありました。

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

472
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 02:34:23
>471
curl "-Q 'DELE a.txt'" host.sample.com
ってことじゃん。
コマンドオブションが引数扱いってわけですね。
コメント1件

473
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 06:18:16
string="-Q 'DELE a.txt'"
eval curl ${string} host.sample.com
あるいは
set x -Q 'DELE a.txt'
shift
curl "$@" host.sample.com

474
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 06:31:19
書いている内に、別の解答が...しかも 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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 12:13:30
とりあえず 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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 17:36:27
>471です。

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

477
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 19:11:23
スクリプトの外部からやって来た文字列をエバると危険

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

479
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/09 23:45:01
ごちゃごちゃ書いてしまったので、まとめてみる

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

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

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

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

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

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

です。
コメント1件

481
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/11 09:25:45

482
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/11 13:08:07
>481
ありがとうございます!!
これで幸せになれます!!

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

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

484
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/12 09:40:24
意味がわかんないけど普通にコマンドラインからkillしてもkillできないの?
コメント1件

485
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/12 09:42:07
cuはSIGHUPで殺すんじゃ無かったかな
うろ覚えだけど
コメント1件

486
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/12 10:21:20
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にあるデーモンの起動スクリプトみたいな感じ)
コメント1件

487
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/12 11:56:41
いまいちよくわからん
スクリプトでプロセスIDが調べられないとかじゃないよね?
あとユーザが違っててrootのプロセスkillしようとしてるとか?
コメント1件

488
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/12 13:36:32
cuは送信プロセスと受信プロセスがいるから完全に殺せてないのでは
コメント1件

489
480[sage]   投稿日:2016/02/12 20:39:39
先ほど完了しました。
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使ったことでタイムスタンプ入れれたので、良しとします。
コメント1件

490
480[sage]   投稿日:2016/02/12 20:42:48
ちなみに何を作っていたかというと、温度計測システムです。

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

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

491
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/13 00:30:17
viを使っている人はシェルのキーバインドもvi風?

492
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/13 02:17:17
>489
pkillでできなかったの?

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

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

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

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

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

496
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/13 22:26:10
http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
より

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


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

497
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/13 22:38:34
>495
なんでOLDPATH=の閉じカッコを半角に、そこだけ改変しちゃったの?

498
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/14 00:07:40
>494
どこでそういう記述を見つけたのかな

499
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/14 04:49:47
仕事で改修やってるんだろ

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

501
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/14 08:13:57
なんの脈絡もない質問に答える義理はない
金払って仕事してもらえ

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

503
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/14 14:58:59
>494
Makefile 全体とは言わんがもっと前後貼れよ
コメント1件

504
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/15 05:51:37
>494 >503
ここを釣り堀にする奴がいるとは思わなかったwww
そういえば Makefile を書いている時は似てるなあって思ったな

505
503[sage]   投稿日:2016/02/17 23:08:47
>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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/23 08:45:41
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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/23 10:11:09
不思議なことは何も起きていないな
シェルスクリプトの真偽値の表現と後置演算子の意味くらい覚えておけ

508
名無しさん@お腹いっぱい。[]   投稿日:2016/02/24 08:11:13
$a=0; echo $((a++))
0

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

509
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/24 16:41:23
なんら不思議でない

510
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/25 07:06:49
$ a=0; echo $(( ´∀`))
( ´∀`): コマンドが見つかりません

511
名無しさん@お腹いっぱい。[]   投稿日:2016/02/26 20:53:20
かわええ

512
名無しさん@お腹いっぱい。[]   投稿日:2016/02/26 22:13:00
うまくクオーテーション回避したね

513
名無しさん@お腹いっぱい。[]   投稿日:2016/02/26 22:23:19
$ a=0; echo $((a++++++a))
2

514
名無しさん@お腹いっぱい。[]   投稿日:2016/02/26 22:30:46
$ a=0; echo $((a+ +++++a))
1
$ a=0; echo $((a+++++ +a))
1
$ a=0; echo $((a+ ++++ +a))
0

515
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/27 19:01:27
こういう解釈かな?
$ 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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/29 18:15:35
ここにいる人たちは誰かのシェルスクリプト見て
普通のプログラミング言語のようにループして処理してたら
ぷっって笑っちゃう方?
コメント2件

517
名無しさん@お腹いっぱい。[]   投稿日:2016/02/29 18:57:25
え? ループ処理しちゃ駄目なの?

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

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

520
名無しさん@お腹いっぱい。[sage]   投稿日:2016/02/29 20:36:41
どんなループだよ

521
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/01 12:43:43
それより i=`expr $i + 1`が笑われないか心配。普通だよね(´・ω・`)
コメント4件

522
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/01 12:55:47
[ "z$1" = "ztest" ]
とかも笑われてるの?
コメント1件

523
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/01 13:57:23
話の流れが読めなかった >519 が笑われてる

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

525
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/02 00:02:25
>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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/25 00:25:36
bash上でwhich sourceってコマンド打った時にsourceコマンドが見つからないって怒られるのが謎だったんですが、sourceコマンドはbashの組み込み関数だと聞きました。
ただdeclare -Fでもsourceって関数は定義されてないようなんですがどこで定義されているかわかりますか?
コメント2件

527
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/25 01:32:44

528
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/25 01:59:04
>526
type source

529
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/25 02:11:33
$ 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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/03/25 05:01:14
>527-529
ありがとうございます!
ばっちりです!

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

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

532
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/08 08:53:02
>521
ほんの数年前までそれ以外の書き方をすると怒り出す、
純正シェルジジイが粘着してたんだが、リアル墓場行ったかな。喜ばしい事だ
コメント1件

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

534
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/12 18:45:07
初心者です。
こんどbashをやることになったのですが、シェルスクリプトの書いて覚える系のいい書籍はないでしょうか?
馬鹿なので読んだだけでは理解できないので手を動かすタイプのを教えてください。
コメント3件

535
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/12 19:26:46
>534
シェルプログラミング実用テクニック
コメント2件

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

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

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

538
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/12 20:25:20
>536
得意分野などで教える立場になった時、同じこと思うだろうか。

539
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/12 20:38:02
今の大きい会社って30前でもそんなモンなの?
小さい会社だと1000越えてるのにね。
コメント1件

540
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/12 22:24:19
>536
おまえ Limux Mint 公式フォーラムでアラシ認定されたやつじゃね?

541
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/13 01:49:11
>539
正社員なら800でもマシな方
なんせ上が詰まっててなかなか上がらないし

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

542
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/14 09:18:08
うちはもう1000万じゃなくなったよ

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

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

545
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/15 08:51:58
ネタだろうけど、あんまり古過ぎる本勧めてやるな。
コメント1件

546
名無しさん@お腹いっぱい。[]   投稿日:2016/04/15 11:45:17
>545
そもそもシェルスクリプト自体が変わっていないが?

547
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/15 21:13:21
だよね。
さすがに絶版だったらおいおいと思うが。

548
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 00:27:13
>532
と言ってたら、bashの脆弱性が見つかったのは数年前だね

549
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 05:01:00
明日は我が身だが、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のカスタマーを抱えているが、この事故の発生により、これら全てのカスタマーのファイルが無くなってしまった。
コメント2件

550
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 09:24:48
だから/は変数の中に入れておけとあれだけ
コメント1件

551
名無しさん@お腹いっぱい。[]   投稿日:2016/04/16 10:06:55
>550
そういう問題ではない。
コメント1件

552
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 10:35:23
>551
だったらどういう問題?
コメント1件

553
名無しさん@お腹いっぱい。[]   投稿日:2016/04/16 10:51:02
>552
なんでテストしてないの?

554
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 11:15:01
バグがあっても大丈夫な設計を心がけろという話なのに
なんでテストしていないという話になる?頭大丈夫か?
コメント2件

555
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 11:25:08
あまりにアレで何か別のことを隠すためのうんたらかんたらを妄想してしまう記事だな

556
名無しさん@お腹いっぱい。[]   投稿日:2016/04/16 13:52:26
>554
設計があって、テストをしないのはありえません。

557
名無しさん@お腹いっぱい。[]   投稿日:2016/04/16 13:56:59
>554
だいたいそれは設計じゃないだろ。

ただのコーディングミスを防げために、コーディングミス用のロジックを書くのは阿呆すぎる。
コメント1件

558
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 14:43:59
>557
フェイルセーフとフールプルーフの違いを学べよ
コメント2件

559
名無しさん@お腹いっぱい。[]   投稿日:2016/04/16 15:25:19
>558
いかにもインフラの人間がいいそうなことだが、キミは開発側ではありえない助言をしている。
コメント1件

560
名無しさん@お腹いっぱい。[]   投稿日:2016/04/16 15:27:25
検証もしないで、ぶっつけ本番でそういう構成になっているから大丈夫という考え方はインフラでもありえない。

561
名無しさん@お腹いっぱい。[]   投稿日:2016/04/16 15:28:05
そもそも操作ミスではないじゃん。

562
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 16:30:24
バックアップは特定の権限でしか消せないとか、削除可能な範囲を絞るとか
万が一のためインフラ側で制限しないとダメなんだよ
それでもダメなときはダメだし

設計・テストとかプログラムのみでの対応はコストだけが跳ね上がるし現実的ではない
ジョブ管理システムやコンパイラのバグが絡んでくるともうお手上げになる

563
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 18:08:55
シェルスクリプトなのにコンパイラのバグ?

564
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/16 19:49:59
例で示しただけだから別にインタプリタでもなんでもいいよ

565
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/17 01:23:14
バグに絡まれやすそうな奴だな

566
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/17 07:15:51
>549
rm -rfはシェル関数で。直接使う事は禁則。
rmしないでmv。定期的に掃除

567
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/18 20:09:07

568
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/18 20:24:48
ひでーw
__
タヒんでしまえよ

569
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/18 22:44:34
シェルショッカーとかいうおじさんおるよな

570
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/25 19:04:26
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個以上の引数に対応するにはどう書くのがいいでしょうか?
コメント1件

571
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/25 21:45:04
>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[sage]   投稿日:2016/04/26 19:09:31
空白のエスケープはどうやればいいんでしょう?
コメント1件

573
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/26 19:43:17
>572
シングルクォートと空白の例。
sc() {
  screen -t "$1" -X screen bash -c "cd $PWD; $*"
}

sc date +Date=\\\'%y\\\ %m/%d

574
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/27 12:24:16
...なんだかなあ
与えたスクリプトの中で、展開すれば?
sh -c 'some command; "$@"' 'dummy' "$@"


sc() {
  screen -t "$1" -X screen bash -c 'cd $PWD; "$@"' 'dummy' "$@"
}

575
570[sage]   投稿日:2016/04/27 19:13:45
なるほど、dummy 以降が -c で与えたコマンドへの引数になることを利用するわけですね。

ちなみに
screen -t "$1" -X screen bash
は冗長で
screen -t "$1" bash
でいいみたいでした。

576
名無しさん@お腹いっぱい。[sage]   投稿日:2016/04/27 21:07:51
-c の次の次の引数からが $0 以降になるとは知らなかったなぁ。 勉強になったわ。
これは -c AAA BBB CCC DDD ... のとき、BBB 以降は実行されないけど BBB が $0 として、
CCC DDD ... が引数としてセットされた状態でプロセスが開始され、実際に実行される内容の
AAA 内に展開されずに渡された "$@" があるので CCC DDD ... が実行されるってことかな。

ちなみに cd の部分は 'cd "'"$PWD"'"; "$@"' の方がいいかな。
( パスに空白が入っていてもエラーにならないがダブルクォーテーションが入っていたらNGではあるが。 )

577
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/12 21:13:45
コマンド応答が返ってくるまでの表示に文字を回転させてりしてみたくなった。
例えば、「*」がくるくると回っていたり・・・
コメント1件

578
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/13 00:30:46
ええね

579
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/13 19:21:12
>577
難しい…どなたかヒントを
コメント1件

580
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/13 20:19:09
>579
なんだよ、すごい目算があって開発宣言したと期待してたのに

まず、文字回すのは無理
/|\-を同じ位置で順番に繰り返す出す程度

あと、コマンド実行中は通常シェルはwait状態で止まってしまうので
コマンドをバックグラウンドで起動してシェルを動かし続けるか
別プロセスを同時に起動してそいつに表示させる必要がある
どっちもコマンドラインで明示しなきゃならん
普通に起動して同じことをさせるにはシェルの改造くらいしか思いつかん
それともzshくらいになるとすごいモジュールがあったりするのだろうか

581
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/13 20:43:34
OpenGLでぐりぐり回そうぜ

582
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/13 20:57:15
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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/14 20:15:01
npm見れば解決しそう

584
534[]   投稿日:2016/05/21 22:04:30
>535
お陰さまで最低限現場の記述ルールに則ったものは普通に作れるようになりましたm(_ _)m

585
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/23 00:15:19
>559
超遅レスだかインフラでも
そんな事言わないあり得ない偏見すごいな
>558
が伝えたいニュアンスは分かるけど
端的に考え方を言い表したいがために
登場場面が根本的に違う2つの用語だけで
端的に伝えようとするセンスが酷い
それにそもそも元の話と何かズレてるし
後輩育成とかは絶対に任せられないタイプ

586
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/23 08:05:15
ログファイルのローテート処理のお勧め教えれ
元ファイルをコピーしてヌルを上書きすると
一瞬ログの内容ロストするから
コメント2件

587
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/23 08:55:28
>586
ログを出す側で制御 (SIGHUPとかで出力ログファイルを開きなおす) してくれないとその問題は防げない。

mkfifo で FIFO ファイル作ってログローテーション用後続スクリプトに一旦渡す方法やパイプで後続スクリプトに
渡してローテーションする方法も考えられるけど、FIFO のバッファがいっぱいになるとメインプロセス側が処理
待ち(write がブロック)したり、後続スクリプトの異常終了で SIGPIPE 食らってメインプロセスが死んだりする
のでお勧めできないそうな。

588
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/23 16:33:22
syslogdを kill -STOP; ... ; kill -CONT じゃダメなん?
コメント1件

589
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/23 17:04:28
logrotateでええやろ
コメント1件

590
587[sage]   投稿日:2016/05/23 23:22:16
>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 のような開きなおす処理をしてくれないからこの実装にせざるを得ない。
コメント1件

591
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/24 04:38:11
>590
kill -HUP に対応してないsyslogdだったら、という話だろ。

kill -STOP してからログファイルを別ファイルにcpして、元のログは > file でゼロにする。
それで -CONT すればいいという話。

>syslogd がつかんでいるのはファイルハンドルであってファイルのパスじゃない。
というのは当然知ってるだろ。

592
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/24 08:44:45
スレ違いになりつつあるが、便乗して質問。
STOP -> truncate -> CONT って安全?
TCP/UDPで待ち受けしているプログラムで syn やメッセージ取りこぼしたりとかしない?
fork する奴にも使える?
コメント1件

593
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/24 09:37:37
>592
TCPなら再送含めてOSがうまくやる
UDPだとバッファあふれたら消える
もともと消えるの前提だから再送はアプリの自己責任
forkしたら止まるのは当たり前だが指定したプロセスだけ
プロセスグループを指定したら該当するやつ全部
どの辺が疑問なのかむしろ知りたいわ
コメント1件

594
592[sage]   投稿日:2016/05/24 20:11:40
>593
THX

> どの辺が疑問なのかむしろ知りたいわ
logrotate コマンドの copytruncate の欄に SIGSTOP すると良い、とは書かれていない
あたり、何か不都合があるんじゃないかと思うんだがどーよ?
コメント1件

595
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/24 22:53:24
>594
そいつとtcpもudpもforkも関係ないのになんで出てきた?

596
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/25 08:40:27
tcp 再送は5分までいけるが、ロードバランサー/L7swの監視の場合にはファイルコピーしている
ちょっとした間にサービス停止として検知される可能性があるな。
コメント1件

597
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/25 15:06:05
>596
5分って、どこの標準か興味がある。

598
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/27 20:10:08
>586
普通は単純にリネームしてタッチする

599
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/28 12:10:25
タッチして逮捕されたらリネームじゃないのか。

600
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/29 01:58:44
つ 座布団

601
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/29 20:46:35
ユニックスの入門本が一冊欲しいのですが何がいいでしょうか
特定のコマンドやシェルのノウハウとかではなく
多くの場面で通用する本当に基礎的な知識を学びたいと思っています
私自身はいずれシェルを書きたいと思っていますが
LS、CPコマンドなどの使い方を知りたいわけではないということです
コメント3件

602
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/29 20:57:27
>601
UNIXスーパーテキスト
ってまだ売ってたっけ?

603
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/29 21:40:46
>601
古い本だけど砂原秀樹さんほかの『プロフェショナルBSD』
UNIXのコマンドはこういうふうに使うという根本的なことの理解に役立つ

604
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/29 22:26:33
スレチにも回答してあげるとは優しいやつばっかやな
コメント1件

605
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/29 23:19:55
>601
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

名著です。

これを挙げると古いとか文句を付ける馬鹿がいますが、無視してください。

606
名無しさん@お腹いっぱい。[]   投稿日:2016/05/29 23:20:36
あげ

607
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/30 00:14:11
>604
お前の心が汚れているだけだ

608
名無しさん@お腹いっぱい。[]   投稿日:2016/05/30 03:08:51
shell から emacs 起動して終了すると、
[1] Done emacs
って出るよな?これって何が出しているんだろう?出来れば止めたい。
コメント1件

609
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/30 04:52:05
>608
set +m しておくと出なくなるよ。(出してるのはシェル自身)
コメント1件

610
名無しさん@お腹いっぱい。[]   投稿日:2016/05/30 09:25:10
vim7.4使ってますが、書き込み時、sh -n みたいな、構文・文法チェックを
する方法はないでしょうか?
vimプラグインのsyntasticも試してみたのですが、.vimrcの記述のせいか
うまく動いてないようで。

何か簡単でうまい方法ありましたら、ご紹介ください。

611
名無しさん@お腹いっぱい。[]   投稿日:2016/05/30 10:19:27
>609
どうもです。なるほどシェルが出しているのですか。
でも、なぜ emacs しか出ないのでしょう?

教えていただいた set +m 「ジョブ制御の無効」は bash のみでしょうか?
私は tcsh なのですが、tcsh でも同様の事は可能でしょうか?

612
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/30 18:00:07
ひとつ質問

シェルで2つの日時を元に所要時間を求めたい場合ぐぐるといろいろ方法はありますが
これが便利なコマンド一発で用意されていないのは需要がないと言うか
需要があった人が最終的に誰でも使える簡単な形にせずに終わらせたってことなんでしょうか?
コメント1件

613
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/30 18:55:30
>612
広く使われるほどの需要はなかった

614
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/30 19:36:20
dateコマンドのオプションに互換性がなかったから。
GNU date限定とかならいいんだけど

615
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/30 21:40:48
内部的にUNIX時間で持てば差分計算は簡単なような
コメント1件

616
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/31 08:52:48
>615
32bitマシンが絶滅するまでは難しいな。
あと20年普通に残りそうだし
コメント1件

617
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/31 21:45:59
内部的にUNIX時間で持つってどういうこと?
内部というのは環境変数やシェル変数という意味?
コメント1件

618
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/31 23:23:59
256bit機が普及するまで32bit機はなくならないだろうね。

619
名無しさん@お腹いっぱい。[sage]   投稿日:2016/05/31 23:24:37
>617
epochからの時間ってことじゃない?
>616
difftime(3)て32bitと64bitで違うのかな

620
超音波テロの被害者[]   投稿日:2016/06/01 16:02:45
超音波テロの被害にあっています。
卑劣極まりない被害にあっています。

何が起こったかわからないときから、
わかってみれば、
まだ世の中に知られていない超音波テロ。

世の中の多数の振動源・発信源が
システム化され、 ネットワークを通して、
超音波・音波を集中させて
対象を攻撃するらしい。

超音波による物理的な力で、
ものが飛び、ものが壊れる。
それが人間の体に対してまで。

形のあるもの、ないもの、壊され、奪われ、
聞こえる声、音。超音波テロの加害者の声。
卑猥な内容、卑劣な内容、脅しやいたぶり。

621
超音波テロの被害者[]   投稿日:2016/06/01 16:03:08
身体の表面を突き抜け、内臓を攻撃される。
頭蓋骨を突き抜け、意識を失わされる。
臓器不全やがん、命に関わることまで。
人間の身体を壊そうとする超音波テロ。

日本国中、どこにいても超音波で襲われる。
車に乗っている人間が襲われる。
歩いている人間が襲われる。
自宅で超音波の攻撃を受ける。

人や社会が超音波で襲われ、
罪もない人が超音波で襲われ、
卑劣な被害にあっています。
被害を訴えても信じてもらえない。

「見続けるのがいやだから、殺して終わる」、
「証拠隠滅だ」という超音波テロの加害者の声とともに
強烈な超音波の攻撃。

叫ばされ、いたぶられ、それを口実にまた攻撃され、
超音波テロの、残酷残虐で、卑劣な攻撃の被害にあっています。
心の底から被害を訴え、祈っています。

天に神に届きますように。

622
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/01 17:45:47
>620
これなんつーシェルのスクリプトですか?

623
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/02 07:52:05
/bin/jpsh

624
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/02 08:00:02
/bin/chouonpa/itaburare

625
名無しさん@お腹いっぱい。[]   投稿日:2016/06/05 11:03:53
ディレクトリを指定する時って、「/dir/」が正しいのか、「/dir」
にすべきか、最後の/をつけるかつけないかでどんな違いがあるのか
いつもすごく気になる。
コメント1件

626
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/05 13:34:06
>625
rsync や ln 、mv あたりはありなしで挙動がかわる。
ln や mv はオプションで一応制御できるけど

627
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/09 19:13:38
json形式のデータをSQLのjoinみたいにキーで結合したいのですが
いいスクリプト知りませんか?
jqはできそうな感じなんだけど、サンプルのページが見当たらなくて
コメント1件

628
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/09 21:10:02
>json形式のデータをSQLのjoinみたいにキーで結合したいのですが

cpanモジュール使うべし。
力技でゴリゴリでもできるかもしらんが、時間の無駄
コメント1件

629
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/09 22:45:45
>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[sage]   投稿日:2016/06/10 01:11:22
あー、しまった、思いっきり間違えた…

jq '
(map(select(has("gid")) | {(.gid|tostring): .gender}) | add) as $g
|
map (select(has("id")) | .gender = $g[(.gender|tostring)])
' data.json

631
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/10 01:28:18
[
{
"id": 1,
"name": "Tom",
"gender": "male"
},
{
"id": 2,
"name": "Alice",
"gender": "female"
}
]
できました、できましたけど書き方わからないです><

>628
cpan使うのが主流なんですか?
コメント2件

632
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/10 01:54:22
>631
json 形式のデータを DB に insert する方法を調べた方がいいかも

633
名無しさん@お腹いっぱい。[]   投稿日:2016/06/10 14:14:19
>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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/10 16:33:17
使うべしって言った割にショボ過ぎ

635
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/10 22:15:34
スレ的にもここはあくまでシェルスクリプトでやるべきだろ

なんでもありなら今はPythonの方がメジャー
もしくはRubyとか

636
名無しさん@お腹いっぱい。[]   投稿日:2016/06/10 23:07:20
場違いだったらすまん。
gomプレイヤーとかのソフト立ち上げるとスクリプトエラー出るんだけどどうしたらいい?
http://imgur.com/9hlJu8w

637
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/11 00:12:44
スレチ

638
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/11 00:34:35
スクリプトエラーとやらがでる

にちゃんでスクリプトで検索

シェルスクリプトとかよくわからんけどスクリプトって入ってるからここに書けば誰か完璧な答えを出してくれるはず


ゆとり、ここに極まれり

639
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/11 03:40:49
引数を受けて同名のサブディレクリ直下にある全てのシェルスクリプト(.sh)を実行するってどう書けばいいんでしょうか?

640
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/11 03:41:43
bash環境です。同名とは引数に指定された文字です

641
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/11 03:53:01
find 引数 -name *.sh -exec {};
こんな感じなのだろうか。

642
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/11 04:14:09
ありがとうございます
こんな感じで良いのかな?

find 引数 -maxdepth 0 -name *.sh -exec bin/sh -c ' {} ' \;

643
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/11 10:22:42
シェルスクリプトじゃないけどrun-partsが似たような仕事するね

644
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/12 05:31:11
for sh in $dir/*.sh; do $sh; done

645
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/12 11:11:52
Cygwin(bash)で特定の拡張子の映像ファイルをforループ文でまわして処理したいと思っています

for input in *
do
 (処理)
done

これだと映像ファイルだけでなく全てのファイルが対象になってしまいます。
そうではなくて WMV、MP4、AVI、MPEG、MPGといった映像ファイルだけを
処理するにはどうしたらいいでしょうか?
コメント2件

646
名無しさん@お腹いっぱい。[]   投稿日:2016/06/12 11:15:55
>645
そもそもなんでファイルを振り分けてないのか?
コメント1件

647
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/12 11:25:58
>646
ffmpegで処理してるので映像ファイルの種類は分けなくても良かったりします
あ、ただ変換後の拡張子は統一するようスクリプトを書かないといけませんね

648
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/12 11:44:06
>645

for input in $(ls -1 *.{wav,mp4,avi,mpeg,mpg} 2>/dev/null)
do
 (処理)
done

とか。
コメント2件

649
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/12 11:52:44
>648
これじゃダメな場合があるんだっけ?

for input in *.wav *.mp4 *.avi *.mpeg *.mpg
do

done
コメント2件

650
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/12 12:07:38
.wavファイルがないとinputには"*.wav"がそのまま入る
だけど、ループの中で処理する時に
[ -f "$input" ] || continue
とでもしとけばいいよね
コメント2件

651
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/12 12:36:44
>648
>650
なるほど、そういう方法がありましたか。
ありがとうございますm(_ _)m

>649
>650さんのご指摘通りその拡張子のファイルが無いとそのまま入っちゃうって問題がありますね

652
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/13 20:14:40
テキストファイルの最終行に改行がないときだけ
改行を追加するようなスクリプトってどう書けばいいでしょうか?
コメント7件

653
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/13 22:21:10
>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
コメント2件

654
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/13 22:23:13
test -n "$(tail -n1 TXT)" && echo > TXT
コメント2件

655
652[sage]   投稿日:2016/06/13 22:28:48
すまない。>653はmbox形式のファイルにメールを追加するために作ったスクリプトだった
だから>652さんの求めているスクリプトとはちょっと違った_o_

656
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/13 22:49:39
>654
ファイルがぶっ壊れちゃったじゃないか(#゚Д゚) ゴルァ!!
なんつって

657
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/13 22:58:56
>653
ありがとうございます
最終文字を取り出して調べるというわけですね
いじれそうです
たぶんGNUのtailが必須じゃないかと思うのですが、
非GNU環境でも動くようにはならないでしょうか

658
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/13 23:07:30
>654
ありがとうございます
ただ、これは目的の動作ではありません
末尾に空行が欲しいのではなく、
改行文字で終わっていない最終行に改行をつけたいのです

659
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/14 00:26:19
>652

#!/bin/sh
echo wq | ed "$1"
コメント1件

660
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/14 00:51:00
>652

for f in *.txt
do
[ $(tail -1 "$f" | wc -l) -eq 0 ] && echo >> "$f"
done

661
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/14 00:57:30
>652

for f in *.txt
do
{ tail -1 "$f" | read; } || echo >> "$f"
done

662
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/14 02:14:34
edかex使ったほうが楽なんじゃないか

663
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/14 02:55:20
659 と 661 の違いは空ファイル(サイズ0)の場合。
ed はそのままだけど、tail -1 ... | read では newline が追加される。

664
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/14 17:09:51
>659-663
みなさんありがとうございます
edは思いつきませんでした
どこでもあるかと思ったらないのもありますね。exはありそうです
改行のない最終行がwcにカウントされないとか
改行がないとreadがエラーコード返すとか
すごくためになりました
空ファイルの動作の差についてはサイズを調べて分岐すればいいですね

665
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/15 01:17:10

666
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/15 02:02:23
ed や sed で追加する場合は元々ファイルの末尾に "\n" があるファイルの
タイムスタンプを更新してしまうんだな

667
名無しさん@お腹いっぱい。[]   投稿日:2016/06/15 14:17:26
おまえら知らんだろうけど、俺の家のそばの歩行者信号はUNIXのコンソールみたいに
青になるまで(赤になるまで)ドット(.)の点滅がひとつずつ消えていくんだぜ・・?

夜なんか見るとKDEみたいな感じですげえカッコイイぜ。

668
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/15 14:54:39
眼科行けよ・・・

669
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/15 14:58:10
健全でない言葉が含まれているため表示しません 内容を確認する

670
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/15 17:06:08
>665
おお、これはシンプルですね
空ファイルでもちゃんと対応できています
man見てもそんな動作するとは明示されてないのですが
安定した仕様と考えていいのでしょうか

671
名無しさん@お腹いっぱい。[]   投稿日:2016/06/15 19:20:41
$ <- 最終行
a <- add. 置換ならsが有名. pでprint
\ 何もない シェルスクリプトでも改行またぐときに使うやつ

類似した構文
seq 20 | head
seq 20 | sed -n '1,10p'

672
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/15 21:22:12
それだったら

seq 20 | sed 10q

の方が良いかもしんない

673
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/16 01:11:19
>652
http://stackoverflow.com/questions/10082204/add-a-newline-only-if-it-d...
awk
{ rm file;awk 1 >file; }<file

bash
[[ $(tail -c1 file) && -f file ]]&&echo ''>>file
コメント1件

674
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/16 14:28:12
>673
おお、awkは明白でわかりやすいですね
改行抜きで読んだ各行を改行付きでprintするわけですね
その意味ではawkで完璧なcatはできないのかな
紹介していただいたページには他にもいろいろ解法があっておもしろいです
ありがとうございます

675
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/16 15:35:18
grep + moreutils の sponge

$ grep '' file | sponge file
コメント1件

676
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/16 19:35:59
>675
grepだけでも末尾に改行つけるんですね
でもこの仕様も安定性が心配

677
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/16 20:54:54
コマンドラインから翻訳API使ってるがおもしろすぎるw

678
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/19 12:33:57
Windows7上でCygwinを動かしbashスクリプトを記述しています。

特定のタスクが起動するのを監視して、起動を確認したら行動に移すスクリプトを
書こうと思っています。

たとえばWindows Media Playerを起動するとWindowsタスクマネージャー上の
「アプリケーション」タブに"Windows Media Player"が立ち上がるのが分かります。

このように特定のタスク/アプリケーションの起動を検知するスクリプトをbashで
記述するにはどうしたらよろしいでしょうか?

679
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/19 14:28:17
ps -W | grep "Windows Media Player" | grep -v grep
コメント1件

680
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/19 14:30:25
"Windows Media Player"の部分は実際のexeになると思うから
ps -Wで表示されるのにしてね
コメント1件

681
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/19 15:43:42
>679
>680
ありがとうございますm(_ _)m

682
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/20 18:07:32
そういう時は pgrep を使えよ! と思って手元の Cygwin (64bit) に procps-ng を
インストールしてみたんだけど、これって cygwin 配下のプロセスしか見えないのね……

683
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/20 23:14:14
大変出遅れたけど
>649
の問題はbashなんだしshopt -s nullglobで済むのでは?

684
名無しさん@お腹いっぱい。[sage]   投稿日:2016/06/21 02:08:19
横からだけど、bash なら nullglob でいけるな〜
むっちゃ参考になった。ありがとう

685
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/03 14:58:46
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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/03 15:23:02
-e じゃなくて -E つかうとか?

687
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/03 15:27:38
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]+!!g'
123
$ echo "123.abcd" | sed -Ee 's!\.[a-zA-Z]?!!g'
123bcd

688
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/03 15:33:05
あ、そうか -E は代わりじゃなくて -Ee とすべきだね

689
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/03 15:35:22
-Eの存在をすっかり忘れてた
ありがとう

690
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/03 15:52:51
OSXにする人への注意点
デフォのままだと、'、"、-が自動的に置換されるから、環境設定>キーボード>ユーザ辞書で自動置換をoffにしたほうがいい
appごと?、ファイルごと?でもメニューバー>編集>自動置換でも自動置換をoffにできる
コメント1件

691
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/03 20:21:24
>690
OSX歴10年ほどだけど、そんなんの知らんかったし、
そんな目にあったことがない。ぐぐったら実在する機能らしいが、
テキストエディットでコーディングするなんて考えられないし、
あたかもすべからく機能するように誤解を誘導するのはよくない。
OSXを使い始めて困ったのは、円とバックスラッシュを区別することぐらいだ。

692
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/04 20:49:46
注意点でそんな攻撃的にならなくても
そのテキストエディットのデフォ値を晒した方が有益かと

693
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/04 21:44:12
マカーのレスって 〜 が、おかしいよね。
デフォルトでおかしいのが出ちゃうのか知らんけど、あれをなんとかしてほしい

694
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/05 02:10:41
ゴシックなのに明朝っぽくなるやつね

自分も知ってるけど一発でマック使いだって分かるから
あのままでいいと思ってる

695
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/05 02:24:03
波ダッシュの話?
あれは Windows XP がしくっただけじゃなかったっけ。
Unicode の仕様含め結構まとめてくれてる人がいるから一度読んでみたらいい。

696
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/05 09:28:26
アポが勝手なことをしただけ
コメント1件

697
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/05 11:46:58

698
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/05 14:27:46
それより、UFT8-macを何とかしてほしい。
日本語ファイル名だとLinuxマシンとまともに連携が取れない。

699
名無しさん@お腹いっぱい。[]   投稿日:2016/07/05 15:14:05
>697
お前はまとめ見て引用しか出来ない馬鹿だな
そのリンク先にも書いてあるだろ
Unicodeのイメージ(字形)が間違ってたんだよ
XPはその仕様を忠実に実装しただけであって
アポは無視したんだよ
MSもヴィスタから同じ対応をしただけだ

知ったかぶりするんじゃねーよ

700
名無しさん@お腹いっぱい。[]   投稿日:2016/07/06 12:51:14
おい、おまえら!

Unixの読み方はユニ(ッ)クスだぞ。Linuxの読み方はリナ(ッ)クスだぞ。

ちなみにASUSはエイサスな、日本語よみでユニックスとかリナックスとかアスースとか読むのは知能が低い証拠だぞ。

Xの前は何でも「ッ」をつければいいと思ってるのは、典型的な日本人のレベルだぞ!

ちなみに、Xの前に正々堂々と「ッ」をつけてもいいのは、貴様らにほとんど関係ない

セ○クス(S○X)だけだぞ!

701
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/06 17:47:32
むかしYahooをヤッホーって言ってた友達を思い出した

702
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/06 19:07:35
イット革命の時代には、よくあることだね

703
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/06 20:49:19
伏せたらSIXだかSOXだかわかんねえな。

704
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/06 21:36:34
アメリカで働いてたときはごちゃまぜだった
方言によって訛りもあるし正直通じればなんでもいい

705
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/07 18:04:30
最初は現地読みで「りぬくす」または英語読みで「らいなっくす」と言われてた

706
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/12 21:25:52
塩味のマムコ

707
名無しさん@お腹いっぱい。[]   投稿日:2016/07/12 23:15:08
ちんぽ

708
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/14 00:29:39
イスドンvsアドスル

709
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/19 06:19:56
aliasの設定で

alias command='echo "hage"'

commandにスペースを含ませる事できないのでしょうか?
コメント1件

710
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/19 08:59:57
>709
bashだよね。普通にできる
コメント1件

711
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/19 09:07:33
あ。command を "c o m m a n d" にしたいということなら
bashの識別子の条件に反するので不可

712
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/19 19:42:55
>710
710=711 と仮定して質問するけど、710はどういう場合? 何を勘違いしたかが気になって。
コメント1件

713
名無しさん@お腹いっぱい。[sage]   投稿日:2016/07/19 21:28:50
>712
710=711だけど、aliasで別名を定義するコマンド(つまりイコールの右側)に
スペースを入れられるのかという質問だと考えた。例示がそういう形になってるから。

もし、alias名にスペースを入れられるかという質問ならそういう例示をするはず
でも後者の質問という可能性に気づいたので、711を追加した

714
名無しさん@お腹いっぱい。[]   投稿日:2016/07/22 22:58:42
<bashのfunctionをdeclare -fで表示すると整形してあることを利用>

http://d.hatena.ne.jp/n9d/20090117/1232182669

ほとんどなんもしてないワンライナーだけど、見事にスクリプト
ファイル整形してくれる。なんか感動すたw

715
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/06 14:00:53
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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/07 00:22:16
basenameじゃ駄目なの?

717
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/07 11:38:22
上のif文、$fileを""で囲わなくていいの?
実際引っかかることはなさそうだけど

718
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/08 22:34:42
bash の変数内の文字列削除ってどうやるのでしょうか?削除したいのは"(ダブルクォート)なんですが
testvar=aaa"aa"
${testvar##\"}

これじゃ駄目だった
コメント1件

719
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/08 23:41:17
>718
## は前方最長一致
全部置換するのは //

testvar='aaa"aa"'
echo ${testvar//\"}

Bashマニュアル「パラメータの展開」セクション内「パターンの置換」
http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBB

720
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/10 12:59:48
selectはbash専用ですか?
コメント1件

721
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/11 00:06:31

722
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/16 04:34:02
特定のディレクトリ配下のファイルの中身に特定の文字列が含まれるかどうかを判定するにはどうしたらいいですか?

find xargs grep?これの行数でも数えてtestに渡す?

723
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/16 08:28:28
判断ってファイル名をリストすんの?
最終的にどうしたいの?

724
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/16 11:19:32
grep -qr 文字列 ディレクトリ

725
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/16 12:55:22
あったら処理Aを実行しその結果を返却、なかったら正常終了としたい

726
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/16 13:02:40
if grep -qr 文字列 ディレクトリ; then 処理A; else exit 0; fi

727
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/20 19:23:45
find . | grep xargs 〜

728
名無しさん@お腹いっぱい。[]   投稿日:2016/08/21 09:28:24
> find . | grep xargs 〜
とても斬新

729
名無しさん@お腹いっぱい。[]   投稿日:2016/08/23 01:57:32
今freebsdのミラーサイトおかしくない?

730
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/23 02:07:00
どうおかしいのかくわしく

731
名無しさん@お腹いっぱい。[]   投稿日:2016/08/23 02:08:14
freebsd-update fetch
freebsd-update install
ができない

732
名無しさん@お腹いっぱい。[]   投稿日:2016/08/23 02:08:58
ミラーサイトを色々変えてもだめ

733
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/28 20:54:56
読み込みたいデータが入ったファイルを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
while ... do ... ; done <<EOT
$(grep -v ^# <file| sort | uniq)
EOT
コメント1件

735
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/28 21:03:00
パイプせずに-eでやろうってのはその通りですが
疑問の本質ではないのでとりあえずスルーでお願いします

736
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/29 03:11:36
だったら問題の本質だけのスクリプトにすべきでは?

737
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/29 06:36:10
単に簡略化して書いただけじゃ?

738
名無しさん@お腹いっぱい。[sage]   投稿日:2016/08/29 12:49:07
パイプが問題の本質なんだな

パイプでつなげたwhileはサブシェルで起動するから、
> while抜けたときに変数の内容が保持されないんだけど
> 元のシェルスクリプトと別プロセスになってるからってことなのかな?
ってことになる

whileをパイプの先に置いてる限り解決しないので、>734が本質的な解

あるいは、shじゃなくてbashとかならプロセス置換が定石

while read title; do
...
done < <(cat work/uhl.txt | grep -v ^# | sort | uniq)

739
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/08 21:25:56
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\.]'
コメント2件

740
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 00:28:23
やりたいことがわからない...
コメント1件

741
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 13:26:15
テキスト中のurlを取得しようと、grepに/が先頭に来るパターンを使ってテストしてみたら、hthttp://xが取得できなかった。
ヘルプミー。
だろ。

grepに/が先頭に来るパターンを使った取得は俺も出来ない。
コメント2件

742
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 13:46:05
>739
期待する出力は?

743
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 14:07:32
>741
おまえの言うことも分からないから739と741は同一人物っぽいな
$xがURLそのものなら加工する必要が無い
コメント1件

744
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 15:51:28
「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
コメント2件

745
744[sage]   投稿日:2016/09/09 16:31:07
実行例、何かURLの後ろに勝手に「; セミコロン」が挿入されているな
これ2chの仕様?
もし試すなら「index.html"」の後ろの「; セミコロン」は削除して試してくれ

746
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 16:39:00
セミコロンなんて入ってない
あんたのブラウザの問題だろ

747
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 16:57:52
>743
741です。
妄想、乙。そのするどい頭脳でサクッとコマンド貼ってみてくださいね。

ちなみに、\wにこだわらなければ
echo $x | grep -e "/[a-zA-Z0-9\.]"
で、できる。
\wがあると、どうしてだめかはしらない。

>744
セミコロンないよ。
コメント3件

748
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 17:27:46
書きたかったのは echo 'http://x' | grep -Ee '/(\w|\.)' とかだろうけど
echo 'http://x' | grep :// で良い気がする

749
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 18:44:47
>744はウェブブラウザで表示するとセミコロンが見える
2chの仕様っていうか read.cgi のバグ

>747
> \wがあると、どうしてだめかはしらない。

grep や egrep の正規表現では文字クラス […] 内のバックスラッシュ \ が特別な意味を持たないから
[\w] は \ と w にマッチする
[\.] は \ と . にマッチする
コメント1件

750
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 22:23:01
>747
>741とやってることが矛盾してるが

751
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/09 23:05:57
結局>739が出てこない限り>740から何一つ進まない

752
739[sage]   投稿日:2016/09/10 17:00:28
言葉足らずで、お騒がせしました。
やりたかったのは、テキスト中のurlの抽出です。

urlには/が入っていて、ドメイン名にはアルファベット、数字、ピリオドがあるので、
いろいろ試しているなかで、上のようなコマンドでgrepが機能しない?と思い込んだ状態に遭遇した所でした。
https+://をgrepから外したのは、ttp://やドメイン名から始まるurl対策のつもりでした。

自分の間違いを>749の解説と>747のイグザンプルで理解できました。
みなさん、ありがとうございました。

本来の目的はまだ試行錯誤中ですが。

753
739[sage]   投稿日:2016/09/10 17:16:44
https+じゃなくてhttps?でした

754
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/14 14:31:43
<<<を使うと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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/14 20:50:13
CentOS6.8(Hyper-V上)/Haswell でも前者の方が早いですね。
time を bash 添付の物ではなく、/usr/bin/time -v /bin/bash -c '...' で計測して詳細をみると、
前者は File system outputs: の値が 0 に対して、後者は 8000 (for の繰り返し1回あたり 8 増える)
となりました。

strace で見る限りどこかに書き込んでいるようには見えないですが、内部での実装に違いが
あるようですね。

756
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/15 09:05:23
想像だけど、echoはbashのビルトインだから起動ロスが無いのとパイプは同時起動だから、stdinが常に準備状態
<<<だど読み込むときにstdinを準備
じゃないのか?
コメント1件

757
名無しさん@お腹いっぱい。[]   投稿日:2016/09/15 11:53:03
<<<(ヒアストリング)ってbashのドキュメントにはビアドキュメントの変形と書かれてる
ってことは、fstat(0, ...)で調べりゃ、レギュラーファイルになってる筈

> <<<を使うとechoで変数を渡すより速いというのを見かけて
と言うデマの火元はどこ?
コメント1件

758
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/15 13:09:35
前者はサブシェルを起動するからプロセッサが繁忙状態だと多分遅くなる
シングルコア/シングルプロセッサだと確実にヒアストリングの後者の方が速い
コメント1件

759
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/15 19:15:16
>756, >757, >758
解説
ヒアストリングという言葉自体初めて知りました。
<<はヒアドキュメントということも知らずに使っていました。
環境によっては、<<<は速くなるんですね。
いい勉強になりました。

760
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 18:27:52
ちょい困り案件が自己解決したのでココに書いておきます。
Macのファイルシステムって、ファイル名を UTF-8 で保存してるかと思いきや
独自の正規化がされてまして (UTF8-MAC) 例えば、
 find . -name "*ドイツ*"
とかやってもあるはずのファイルが出てこないわけです。(内部的に ド の字を ト+[濁点] みたいな格納をしてるせいです)
そこで .bash_profile に以下のように コマンドもどきの find2 を定義してやります。これで万事解決です。

# find に渡す引数を全て UTF8-MAC に変換してしてます
find2(){
eval "find "$(echo "$@" | iconv -f UTF-8 -t UTF8-MAC)
}
コメント2件

761
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 18:38:10
>760
他文字コードにも応用できそうだね

762
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 18:47:05
変換すべきは-name ... だけでしょ 全部変換は手抜きすぎ
-execで他のプログラムに渡すUTF-8をUTF8-MACに変換されていやーんになる
汎用的にするなら要ブラッシュアップ
コメント1件

763
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 21:51:49
>762 了解です。
ただ -exec の方は 問題は別にあって
終端を表す \; の \(バックスラッシュ)
が消えちゃうんですね。そもそもiconv変換する前の時点で。

一応対応できたと思うんですが、
長くなったので貼るのはやめときます。
コメント1件

764
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 22:10:40
-execは;じゃ無くて+で終端しないと原人扱いされちゃうよ
;じゃないと困るのはかなり特殊なケース

765
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 22:13:36
>760
どっかで読んだ内容だなぁと思ったら、これ↓のパクリか!
「新・OS X ハッキング! (169) Terminal上で「ダ」や「パ」が付くファイルを検索できない理由と対策 | マイナビニュース」
 http://news.mynavi.jp/column/osxhack/169/index.html

766
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 23:20:43
やり方だけ覚えてたんですが、昔見たのはソレかもしれません。
ただ現実に必要になってみると
find . -name `echo "オランダ.png" | iconv -f UTF8 -t UTF8-MAC`
これ毎回打ち込むの面倒だなと思ってコマンド化してみた次第です。

767
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/24 23:54:36
昔って、先月の25日(1ヶ月前)の記事だけどな

768
名無しさん@お腹いっぱい。[]   投稿日:2016/09/24 23:56:11
実におもしろいw

769
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/25 00:01:20
ん、もっと昔から知ってたよ。だから他の記事だと思います。

770
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/25 02:09:32
>763
>>終端を表す \; の \(バックスラッシュ) が消えちゃうんですね。

普通にfindするときもfindに渡る前に¥は消えるでしょ

find2(){
find $(echo "$@" | iconv -f UTF-8 -t UTF8-MAC)
}

じゃダメなの?

771
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/26 14:04:28
それがベストだと思います

772
名無しさん@お腹いっぱい。[sage]   投稿日:2016/09/26 23:31:45
昔から知ってたけどね

773
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 10:27:03
以下のスクリプトはカレントディレクトリに「AABB」というファイルがあると
ワイルドカードが展開されて「find /tmp -name AABB」となってしまいますが、
これを「find /tmp -name

774
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 10:36:38
すみません、失敗しました。

以下のスクリプトはカレントディレクトリに「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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 10:45:33
option=

776
名無しさん@お腹いっぱい。[]   投稿日:2016/10/16 10:53:11
あれ、ダブルクォーテーションで切れちゃった
全角にするけど
option=”-name \”$name\””
とすればよろし

777
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 11:06:04
ダブルクォーテーション
ウェブブラウザで書いてて、書き込んでいいですかの確認画面を経由して書き込むと切れちゃう
俺調べ
コメント2件

778
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 13:48:12
余計な変数使わないで
#!/bin/sh
name="AA*"
find /tmp -name "$name"
ってやればいいのに

779
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 13:54:36
場合によって
option="$option 他のオプション"
とかやりたいんじゃないの

780
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 17:25:04
>777
まさにそれだったわ。情報ありがとう

781
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 18:08:50
邪道で、bash 用だけど find の前に set -f
find の検索パスにワイルドカード使ってたらだめ

782
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 19:22:23
テス
# name=

783
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 19:25:37
>777、あぁ、本当だWebブラウザからの書き込みだと回避できないのかな?
スクリプトソース貼るのに致命的だな

784
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/16 19:40:18
hastebinにでも貼ればいいんだよ

785
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/26 22:58:52
一般的なペーストビン

786
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/26 23:40:35
hastebinのほうがちょっと見やすかったりする

787
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/29 21:05:55
実行中の標準出力と標準エラーをログしながら表示させることって出来る?
むかしリダイレクトとtailでやったらうまく行かなかった覚えがあってやめた気がする

788
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/29 21:22:36
プロセス置換を使う
cmd > >(tee stdout.log) 2> >(tee stderr.log)

789
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/29 22:19:49
そういえばPOSIX shにはないな…すまん

790
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/30 09:23:07
cmd > stdout.log 2> stderr.log & tail -f stdout.log stderr.log
で出来ないか?

791
名無しさん@お腹いっぱい。[sage]   投稿日:2016/10/30 21:41:34
下記で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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/04 12:24:35
音楽CDを突っ込んでmp3を作る。
この時ファイル名とmp3タグにはCDDBから読み込んで来る。

これをやるのに手っ取り早い方法ってなんだろ

793
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/04 12:26:20
EAC自動化

794
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/04 12:31:52
abcde使えよ

795
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 04:52:04
/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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 06:02:01
くおー

$ [ $(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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 06:27:40
"HTTP/1.1 200 OK"$'\r'

798
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 08:38:26
そういうのはステータスコードだけを見るようにしたほうがいいよ

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
$
コメント1件

799
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 08:49:14
>798
訂正
ウェブブラウザで表示すると余分なセミコロンが混じってしまう

test "$( curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/ )" = 200

800
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 12:19:57
>521
いいお(´・ω・`)

801
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 12:21:26
うちの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
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 12:47:25
つまり纏めるとこうか
test "$(curl -I -w "%{http_code}" http://example.com/ 2>&- |tail -1)" = 200; echo $?

803
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 14:56:39
なんでレスポンスを取得する操作と
取得したレスポンスをtestする操作を一度にしようとするのか理解不能

804
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 16:51:11
ワンライナー原理教の方ですかね?w

まあ何でも一度にやってみたくなる衝動は理解できなくもない。
そこに山があるから、的な何か。

805
名無しさん@お腹いっぱい。[sage]   投稿日:2016/11/17 17:02:47
そこにパイプがあるからな

806
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 08:00:32
品位が問われるAdvent Calendar -- シェルスクリプトはどこでも動く!
http://www.peeep.us/4a5535c5

なんかあの界隈よく揉めてるな… 👀
Rock54: Caution(BBR-MD5:f4da0c707200fe35c49b788174082785)

807
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 09:27:19
品位のないやつだな

808
名無しさん@お腹いっぱい。[]   投稿日:2016/12/07 10:58:10
qiitaとかに書いちゃう輩なんてそんなもんだろ

809
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 12:13:29
この記事がキモいのは認めるけど、十把一絡げにQiitaを悪く言うのはやめて!

とはいうもののオタクのコミュニティって、どこでもちんぽ騎士団ぽいのがいるよね……
ぼっち最高やで。
コメント1件

810
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 15:49:11
シェルスクリプトで、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
コメント3件

811
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 16:18:47
>809
あそこで役に立つ記事あるか?
自己満のゴミ情報が大部分だからgoogole personal blockの対象だわ
コメント1件

812
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 16:49:19
>810 テストの大括弧の後ろにセミコロン付ければいいんでね?

813
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 18:34:13  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
>811
わかる。盛大な勘違い書いててドャァしてる感がすごい

815
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 21:31:23
googoleとかのことか

816
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/07 23:23:03
>810
素直にcrontab使った方が良いんじゃね

817
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/08 09:58:48
>810
そんなこと起きないはず
ほんとにそのコード?

818
名無しさん@お腹いっぱい。[]   投稿日:2016/12/10 20:22:24
すいません、教えて下さい。
色んなネットーワーク機器のログをsedでズバッとマスキングかけたいんだけど、URLと、IPアドレスの正規表現を教えて下さい。

819
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/10 20:25:17
817d

820
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/14 16:17:30
TBS

det dritte folkemn

821
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/21 04:35:52
文字列から実行して、返り値も標準出力も格納したいんだけど

testCmd="なんかのコマンド"
result=$(eval testCmd)

この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが
コメント1件

822
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/21 05:11:40
>821

$0 ってどういうこと?
$? の間違いなら man bash の eval に書いてある。

823
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/21 06:35:22
普通に考えるなら

export testCmd="コマンド"
$testCmd > ログファイル
戻り値=$?

824
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/21 06:47:35
ちなみにスクリプトにすると
result=`$testCmd`
で標準出力が入って
$?でも戻り値は取れるけど
標準エラー出力は取れないね

825
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/21 11:34:52
失礼いたしました$?ですね

testCmd="なんかのコマンド"
result=$(eval $testCmd)

returncode=$?

標準エラーはいらんのですが
プロセス置換?とかでできるのかな

826
名無しさん@お腹いっぱい。[sage]   投稿日:2016/12/22 09:27:10
いまいち何を訊きたいのか分からん。
$?はevalの終了ステータスが設定される。evalの終了ステータスはtestCmdの終了ステータスが設定される

827
名無しさん@お腹いっぱい。[]   投稿日:2016/12/22 12:40:53
> この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが

マニュアル読んでわかんなきゃ試してどうなるか調べないと
正常終了するコマンドだけじゃなくてそれ以外もね

828
名無しさん@お腹いっぱい。[sage]   投稿日:2017/01/15 17:41:24
[ .... ] を [[ .... ]]に単純に置き換えて問題あります
でしょうか?
コメント1件

829
名無しさん@お腹いっぱい。[sage]   投稿日:2017/01/15 18:20:34
コマンドの引数を変数化したときって、どうやってその変数をコマンドに渡せばいいの?

#!/bin/bash
opts=“-f $file”
hoge $opts

これだと hogeコマンドが unrecognized option エラーになってしまう。
初歩的な質問ですまん

830
828[sage]   投稿日:2017/01/15 18:27:02
スマソ、自己解決
$fileが不正だっただけやん

831
名無しさん@お腹いっぱい。[sage]   投稿日:2017/01/16 21:28:07
>828
http://mywiki.wooledge.org/Bashism#Conditionals
> [[ is not defined by POSIX, originated in ksh and is also present in zsh

832
名無しさん@お腹いっぱい。[sage]   投稿日:2017/01/17 21:34:40
bashでif使って変数に"ok"が入ってるかはどうやって確かめればいいんでしょうか?
if [ $a = "ok" ]; then
echo hoge
else
echo fuga
fi
の様にしているのですが"ok"が入っていても別の文字列が入っていてもfugaが出力されてしまいます

833
名無しさん@お腹いっぱい。[sage]   投稿日:2017/01/17 21:59:37
$a の中身が引用符の無い裸の
ok
ならば真になるはず

834
名無しさん@お腹いっぱい。[sage]   投稿日:2017/01/17 22:02:25
できればそのままやりたいんです
cutかなんかで事前に削るしかないですかね?

835
名無しさん@お腹いっぱい。[sage]   投稿日:2017/01/17 22:14:16
831 の "ok" を '"ok"' または "\"ok\"" にすれば
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

UNIX板 タイトル検索

このスレッドが人気です(実況系)
実況 ◆ テレビ朝日 46554 依田さん (786)テレ朝実況
実況 ◆ 日本テレビ 53996 ZIP! (964)NTV実況
実況 ◆ フジテレビ 82428 今日のわんこ (416)フジ実況
NHK総合を常に実況し続けるスレ 130118 イギリス撤退 (961)NHK実況
はやドキ!& あさチャン!水曜日★1 (1000)TBS実況
おはよう!時代劇 暴れん坊将軍3 #48[字][再] (522)テレ朝実況
ゲームセンターCX BONUS STAGE 20★3 (623)フジ実況
[新]火曜ドラマ「カルテット」 第1話 ★6 柏原芳恵の空港バイブ疑惑 (943)TBS実況
このスレッドが人気です(ニュース系)
【芸能】「なんで嘘を言うの?」…6歳アイドルが号泣! フジの捏造で幼稚園に通えなくなるほどのショック状態に (119)音楽・芸能ニュース
「中国側のでっちあげ」 アパホテル、客室に南京大虐殺否定本 中国からの批判殺到に「一方的な圧力」と撤去は拒否★5 (173)ニュー速+
【政治】駐韓大使帰任に慎重 安倍首相「外務省は早く帰したがっているが、早く帰す必要はない。国民も納得しない」★19 (267)ニュー速+
「中国側のでっちあげ」 アパホテル、客室に南京大虐殺否定本 中国からの批判殺到に「一方的な圧力」と撤去は拒否★4 (1000)ニュー速+
「彼女は少女だったのだ!」 謝らねばならぬのに安倍政権は少女像に反感むき出し こんな日本人でいいのかと朝日新聞投書★6 (45)ニュー速+
将棋連盟・谷川会長が辞任 一両日中にも表明…スマホ不正使用疑惑騒動で引責か (401)音楽・芸能ニュース
【政治】駐韓大使帰任に慎重 安倍首相「外務省は早く帰したがっているが、早く帰す必要はない。国民も納得しない」★18 (1003)ニュー速+
【社会】外国人の永住権、最短1年で付与へ 高度人材の確保狙う (178)ニュー速+
UNIX板の人気スレ
Emacs Part 50 (134)
Emacs Part 47 (995)
FreeBSDを語れ Part43 (292)
Vim Part25 (987)
NetHack 地下:61 (1017)
初心者もOK! FreeBSD質問スレッド その120 (1018)
初心者もOK! FreeBSD質問スレッド その121 (956)
Emacs Part 48 (997)
シェルスクリプト総合 その25 (835)
シェルスクリプト総合 その23 (1000)
Cygwin使っている人いますか? その21 (980)
FreeBSDを語れ Part37 (992)
Cygwin使っている人いますか? その22 (696)
雑談スレだよもん☆もんだよもんもんだよもん!{36} (611)
シェルスクリプト総合 その24 (999)
NetHack 地下:62 (348)
Oracle Solaris 総合スレッド 其の2 (225)
\chapter{\TeX} % 第九章+ (1001)
*BSDニュース@2ch その7 (631)
NetBSD その29 (467)
FreeBSDを語れ Part38 (983)
Navi2ch for Emacs (Part 21) (812)
連番のH画像/動画を一気にダウンロードする6 (984)
雑談スレだよもんもんもんだよ☆だよだよもん!{35} (991)
*BSDニュース@2ch その6 (982)
\chapter{\TeX} % 第十章 (541)
Vim Part26 (424)
Emacs Part 46 (984)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
Amazon


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 正常取得 - 10件 - 取得完了