1 :
名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2015/08/14(金) 23:42:01.51
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ http://heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その24
http://peace.2ch.net/test/read.cgi/unix/1415634843/ 2 :
名無しさん@お腹いっぱい。
2015/08/14(金) 23:42:43.85
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。
□A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
控えましょう。
□B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
ls -l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. 可搬性については、下記 F.1 を参照して下さい。
3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities )
を参照して下さい。
4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に
小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 )
5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、
SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。
SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。
( 下記 F.3 参照 )
3 :
名無しさん@お腹いっぱい。
2015/08/14(金) 23:44:39.30
□C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
http://www.speech-lab.org/~hiroki/csh-whynot.euc
9. cat file|すんなハゲ
a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
b. 有用な場合も有ります Useful use of cat(1) 英文
http://www.in-ulm.de/~mascheck/various/uuoc/
□D. シェルスクリプトでよく使うコマンド
1. 制御・条件判定系: [, test, expr, true, false, yes, getopts
2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut,
paste, comm, join
3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、
find は -exec command {} + を推奨。
他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 )
4. ディレクトリ系: basename, dirname
5. 出力系: echo, printf
6. 対話コマンド制御系: expect
7. http / ftp の処理自動化: wget, curl
4 :
名無しさん@お腹いっぱい。
2015/08/14(金) 23:50:19.57
5 :
名無しさん@お腹いっぱい。
2015/08/14(金) 23:53:33.73
6 :
名無しさん@お腹いっぱい。
2015/08/14(金) 23:56:30.37
7 :
名無しさん@お腹いっぱい。
2015/08/14(金) 23:57:59.64
8 :
名無しさん@お腹いっぱい。
2015/08/15(土) 00:04:34.32
テンプレは以上です。
漏れや要求があれば各自追記願います。
9 :
名無しさん@お腹いっぱい。
2015/08/15(土) 03:33:33.31
Windows用のはないの?
10 :
名無しさん@お腹いっぱい。
2015/08/15(土) 13:42:11.47
Windows用の何?
11 :
名無しさん@お腹いっぱい。
2015/08/15(土) 14:41:40.48
bashとかTraditional Bourne Shellとか。
12 :
名無しさん@お腹いっぱい。
2015/08/15(土) 17:47:20.99
Cygwin入れれば
13 :
名無しさん@お腹いっぱい。
2015/08/16(日) 00:14:04.65
ping使うやつが移植性無くなるな
14 :
名無しさん@お腹いっぱい。
2015/08/16(日) 21:47:33.05
テキストファイルの分割で教えてください
例えば95行のテキストファイルを10分割するとき、
splitだと10行のファイルが9個と5行のファイルが1個できますが
そういう分割ではなく、10行のファイルを5個、9行のファイルを5個、
というように、等分に近くなるように分割したいです
今はforループで、1行目はファイル1に、2行目はファイル2に、
途中略して10行目はファイル10に、そして11行目はファイル1に、
みたいに仕分けてるのですが、splitの様にファイル先頭からの並び通りに
等分したく思ってます
15 :
名無しさん@お腹いっぱい。
2015/08/16(日) 22:42:11.52
すればいいじゃん。
16 :
名無しさん@お腹いっぱい。
2015/08/16(日) 23:56:46.15
>>14 awk で行番号見ながら出力ファイルを変えれば?
以下は out.0〜9 に出力する例。
動かしてみた感じだと perl で真面目にプログラム書いた方が処理速度的には速そうね。
#!/bin/sh
INFILE="$1"
LINE=$(wc -l < "$INFILE")
SPMOD=$(expr $LINE % 10)
SPDIV=$(expr $LINE / 10)
[ "$SPMOD" != 0 ] && SPDIV=$(expr $SPDIV + 1)
awk "BEGIN{I=0; F=\"out.\"I; DIV=${SPDIV}; B=DIV;}
{print \$0 > F; if(NR == B){I++; if(I==${SPMOD}){DIV--;}
F=\"out.\"I; B+=DIV;}}" "$INFILE"
17 :
名無しさん@お腹いっぱい。
2015/08/17(月) 00:28:08.28
GNU coreutils の split コマンドだと -n オプションってのがある。
$ split -n l/10 95lines.txt
# 1/10 じゃなくて l/10 ね(line の l)
ただ、こうなる↓
$ wc -l xa?
12 xaa
9 xab
9 xac
9 xad
9 xae
9 xaf
9 xag
9 xah
9 xai
11 xaj
95 合計
18 :
名無しさん@お腹いっぱい。
2015/08/17(月) 07:22:58.29
>>16 なるほど
まずは処理内容を勉強して、考えます
>>17 なんか微妙な分け方ですね…
GNU版の採用や、96とか97とかになったらどうなるかとか、調べてみます
19 :
名無しさん@お腹いっぱい。
2015/08/23(日) 21:52:42.48
ubuntuです。超初歩の段階なのですが
for file in ${1}/*
do
echo "${file}"
done
上記のコードで
$sh test.sh ~/Desktop/foo
とすると期待通りに
/home/hoge/Desktop/foo/a
/home/hoge/Desktop/foo/b
/home/hoge/Desktop/foo/c
と表示されるのですが
$sh test.sh "~/Desktop/foo"
とダブルクォートでくくると
~/Desktop/foo/*
と表示されてしまいます
でも空白の入ったパスを渡したいときはダブルクォートでくくらないといけませんよね?どうすればいいですか
${1}/*を"${1}/*"としても"${1}"/*としてもうまくいきませんでした
20 :
名無しさん@お腹いっぱい。
2015/08/23(日) 22:25:01.69
>>19 チルダがクォートされているかどうかで違う
$ echo ~/Desktop/foo
/home/hoge/Desktop/foo
$ echo "~/Desktop/foo"
~/Desktop/foo
21 :
名無しさん@お腹いっぱい。
2015/08/23(日) 22:53:07.70
>>19 $ sh test.sh "${HOME}/Desktop/foo"
22 :
19
2015/08/23(日) 23:32:18.17
>>20-21 レスどうもありがとうございます
コード側の問題じゃなくて渡す側の書き方に問題があったんですね
空白を含んでいないパスは期待どおりになりました
が空白を含んでいる場合はやっぱり「*」が展開されずに
$ sh test.sh "/home/hoge/Desktop/foo bar"
または
$ sh test.sh "${HOME}/Desktop/foo bar"
とすると
/home/hoge/Desktop/foo
bar/*
と表示されてしまいます
23 :
19
2015/08/23(日) 23:37:21.98
すみません
${1}/* と "${1}/*" はだめでしたが "${1}"/* としたらうまくいきました
ダブルクォートって難しいです
24 :
名無しさん@お腹いっぱい。
2015/08/24(月) 04:09:11.65
${1}/ 中のファイルに空白を含むファイル名があるとダメ
/home/hoge/Desktop/foo bar/space ship.txt があると
/home/hoge/Desktop/foo bar/space
ship.txt
と2行に渡って表示される
25 :
名無しさん@お腹いっぱい。
2015/08/25(火) 09:55:00.50
そうでもないよ
$ cat test.sh
#!/bin/sh
for f in "$1"/*
do
echo "$f"
done
$ touch "space ship.txt"
$ sh test.sh .
./space ship.txt
./test.sh
26 :
名無しさん@お腹いっぱい。
2015/08/25(火) 11:38:42.71
>>24 、
>>25 と同様そうでもない
対象ディレクトリと対象ディレクトリ内のファイル名の両方にスペースが含まれて
いても問題ない
あと、ソースに渡された引数+"/*"がどう展開されるかの表示を追加
bash-2.05$ cat test.sh
#!/bin/sh
echo -n "arg/* = '"
echo -n "${1}"/*
echo "'"
echo
for file in "${1}"/*
do
echo "${file}"
done
exit 0
27 :
26
2015/08/25(火) 11:40:11.64
bash-2.05$ mkdir "foo bar"
bash-2.05$ cd "foo bar"
bash-2.05$ touch "space ship.txt"
bash-2.05$ touch space_ship.txt
bash-2.05$ cd ..
bash-2.05$ tree
`-+ .
+-- foo bar
| +-- space ship.txt
| +-- space_ship.txt
+-- test.sh
1 directory 3 files
bash-2.05$ sh test.sh "foo bar"
arg/* = 'foo bar/space ship.txt foo bar/space_ship.txt'
foo bar/space ship.txt
foo bar/space_ship.txt
bash-2.05$
28 :
名無しさん@お腹いっぱい。
2015/08/25(火) 12:23:17.60
>>25 >>24 が駄目と言ってるのは ${1} の場合の話だろw
"$1"ならもちろん問題ないよ。
29 :
名無しさん@お腹いっぱい。
2015/08/25(火) 12:29:22.17
bash-2.05 とか古いの使うにも程がある。劣度法度9か何かか?
30 :
名無しさん@お腹いっぱい。
2015/08/25(火) 12:55:51.30
>>28 いや…ファイルの話だよね?割りとどうでもいい流れだけど一応
$ cat test.sh
#!/bin/sh
for f in ${1}/*
do
echo "$f"
done
$ ls
space ship.txt test.sh
$ sh test.sh .
./space ship.txt
./test.sh
$
31 :
名無しさん@お腹いっぱい。
2015/08/25(火) 13:12:03.64
話を理解していない人々が多過ぎる。スルーしよw
32 :
名無しさん@お腹いっぱい。
2015/08/25(火) 13:14:16.88
>>30 その場合、 ${1} に . が代入されるから問題が起きてないだけ。
${1} とか半端な記述せずに "$1"にすること。${1}ってクォートなしの $1 と同じだから。
33 :
26
2015/08/25(火) 13:25:30.87
「"${1}"」ではなくて「${1}」という記述にこだわるならファイル名にスペースが
含まれる場合の常套手段で「IFS」を「改行コード」のみに設定すればOK
bash-2.05$ cat test.sh
#!/bin/sh
IFS_BACKUP=$IFS
IFS="
"
echo -n "arg/* = '"
echo -n "${1}"/*
echo "'"
echo
for file in ${1}/*
do
echo "${file}"
done
IFS=$IFS_BACKUP
exit 0
34 :
33
2015/08/25(火) 13:26:35.02
【続き】
bash-2.05$ tree
`-+ .
+-- foo bar
| +-- space ship.txt
| +-- space_ship.txt
+-- test.sh
1 directory 3 files
bash-2.05$ sh test.sh "foo bar"
arg/* = 'foo bar/space ship.txt foo bar/space_ship.txt'
foo bar/space ship.txt
foo bar/space_ship.txt
bash-2.05$
35 :
名無しさん@お腹いっぱい。
2015/08/25(火) 13:30:12.68
>>26 それは改行コード入りファイル名があるからNG
36 :
名無しさん@お腹いっぱい。
2015/08/25(火) 13:58:06.49
このスレの住人にとっては当たり前過ぎる基本的初歩的なことをわざわざ多くの行数使って書き込まれてもなぁ
37 :
名無しさん@お腹いっぱい。
2015/08/30(日) 12:52:52.88
>>13 最近cygwin使ってないんで試してないけど
神が現れてsudo実装してping打てるようになった模様
詳細はcygwinスレ参照
そうそうcygwinのpingって何か違ったんだっけ?
38 :
名無しさん@お腹いっぱい。
2015/09/06(日) 16:40:59.13
引数 $1 が function の中から参照できない
標準では全部グローバルのスコープじゃなかったのか?
グローバル変数に引数をコピーするとグローバル変数は参照できるけど
引数はそういうものなのか?
~/ cat bug.sh
function bug_version {
echo "argument $1 can't handle in function"
}
bug_version
echo "argument $1 can handle out of function"
~/ sh bug.sh arg
argument can't handle in function
argument arg can handle out of function
39 :
名無しさん@お腹いっぱい。
2015/09/06(日) 17:58:01.08
>>38 > 引数 $1 が function の中から参照できない
> 標準では全部グローバルのスコープじゃなかったのか?
【ポイント】
シェル関数内の位置パラメータと特殊パラメータ「$#」はシェル関数内のみで有効
【説明】
シェル関数の実行には『引数』を付けることができ、シェル関数内の位置パラメ
ータと特殊パラペータ「$#」は、一時的にシェル関数の『引数』とその個数で置
き換えられる。このため、位置パラメーターと特殊パラペータ$#はシェル関数内
のみで有効。
あと、shの場合「function」は使えない、またシェル関数名の後ろに「()」がないと syntax error
$ cat bug.sh【修正版】
bug_version() { ← shの場合「function」は使えない、シェル関数名の後ろに「()」がないとダメ
echo "argument $1 can't handle in function"
}
bug_version $1 ← シェル関数に引数として渡した例
echo "argument $1 can handle out of function"
$ sh bug.sh
argument arg can't handle in function
argument arg can handle out of function
40 :
名無しさん@お腹いっぱい。
2015/09/06(日) 17:59:13.35
引数はそういうものです
bug_versionを引数無しで呼び出してるので$1には何も設定されません
41 :
39
2015/09/06(日) 18:00:18.46
【訂正】
$ sh bug.sh arg
argument arg can't handle in function
argument arg can handle out of function
42 :
名無しさん@お腹いっぱい。
2015/09/06(日) 19:34:01.02
>>38 まぁ Linux 限定だけど、
function bug_version {
echo "argument $(cat /proc/$$/cmdline | xargs -n1 -0 | sed -n 3p) can handle in function"
}
なんてするといいかも
43 :
名無しさん@お腹いっぱい。
2015/09/06(日) 19:39:35.79
愚かにも引数忘れてた
みんなありがとう
コードが綺麗になった
44 :
名無しさん@お腹いっぱい。
2015/09/09(水) 19:11:24.39
質問です。
grep "aaa\|bbb" はokなのに、grep "aaa\&bbb" はなぜ
だめなんでしょう?
45 :
名無しさん@お腹いっぱい。
2015/09/09(水) 20:10:57.27
>>44 どちらも仕様どおりに正しく動く
何をもってダメという?
46 :
名無しさん@お腹いっぱい。
2015/09/09(水) 20:21:28.99
>>45 私の環境ではこうなります。
$ echo "aaa bbb" | grep "aaa\|bbb"; echo $?
aaa bbb ccc
0
$ echo "aaa bbb" | grep "aaa\&bbb"; echo $?
1
47 :
名無しさん@お腹いっぱい。
2015/09/09(水) 20:25:36.29
>>45 あれれ、「 ccc」入っちゃった。無視してくださいw
48 :
名無しさん@お腹いっぱい。
2015/09/09(水) 20:50:24.67
49 :
名無しさん@お腹いっぱい。
2015/09/09(水) 20:54:06.69
\|には特別な意味があるけど\&にはないんだよ
単に&と書いたのと同じ
50 :
39、41
2015/09/10(木) 02:49:03.69
>>44、
>>46 ひょっとすると[grep]コマンドによる『AND検索』の方法(記述)を
『grep "aaa\&bbb"』だと勘違いしていない?
[grep]コマンドによる『AND検索』には『OR検索』のような正規表現による
記述方法『grep "aaa\|bbb"』は存在しないので、つぎの例のように地道
にパイプで繋ぐしかないけど
[grep]コマンドによる『AND検索』の方法
$ echo "aaa bbb" | grep "aaa" | grep "bbb" ; echo $?
aaa bbb
0
$ echo "aaa ccc" | grep "aaa" | grep "bbb" ; echo $? # マッチしないデータ「aaa ccc」の例
1
$
あと、
>>44、
>>46 って
>>38 と同じ人?
51 :
名無しさん@お腹いっぱい。
2015/09/10(木) 07:50:58.43
$ grep -E 'aaa.*bbb|bbb.*aaa'
か、GNU grep なら
$ grep -P '(?=.*aaa)(?=.*bbb)'
でもOK。
52 :
名無しさん@お腹いっぱい。
2015/09/10(木) 07:56:54.38
awk 使え awk '/aaa/&&/bbb/'
53 :
名無しさん@お腹いっぱい。
2015/09/10(木) 17:51:40.81
\& なんてどこに書いてあったの
54 :
名無しさん@お腹いっぱい。
2015/09/24(木) 23:16:07.36
55 :
名無しさん@お腹いっぱい。
2015/09/27(日) 16:29:45.68
こんな風なテキストファイルlog.txtがあります
%PART_A%
a11 a12 13
a21 a21 a23
a31 a32 a33
%PART_B%
b11 b12 b13 b14
b21 b22 b23 b24
b31 b32 b33 b24
このように%PART_x%(実はxはAとBがランダムに登場)で区切られながら
数行ずつ出力されているテキストを、値だけ(a11〜b24まで)、5列で左詰めの
CSV形式に整形するために、こんなスクリプトを作りました(ほとんどawkですが・・・)
#!/bin/sh
cat log.txt |
awk 'BEGIN{FLG=0}
/%PART_A%/{FLG=1; getline}
/%PART_B%/{FLG=2; getline}
{if (FLG==1) {print $1","$2","$3",0,0"}
else if (FLG==2) {print $1","$2","$3","$4",0"}
}'
期待通り動いてはいるのですが、フラグやgetline周りが、なんか力技?っぽくて
改善の余地があるように思ってます
このような処理をawkで書くときって、どのように書くとよいのでしょう
56 :
名無しさん@お腹いっぱい。
2015/09/27(日) 16:38:38.08
力技でも動いているならそれでいいんじゃない?
この間、似たような事を業務でやったけど考えるの面倒だったから
pasteコマンドでひとつのファイルにして、特定フィールドを読み込む方法にした。
なにぶん、思想が古い年代なもんで複数ファイルを
同時に読み込んであーだこーだするのはCで書きたくなる。
57 :
名無しさん@お腹いっぱい。
2015/09/27(日) 17:34:07.98
きれいでも動かないコードより
きたなくてもちゃんと動作するコードの方がよい
そんな格言なかったっけ?
58 :
名無しさん@お腹いっぱい。
2015/09/27(日) 19:24:41.10
要求仕様通りに動くことが大前提ですな。
コードの可読性を語るとキリが無い。
シェルスクリプトで訳が判らなくなる書き方する人いるけど、ある意味才能としか思えない。
59 :
名無しさん@お腹いっぱい。
2015/09/28(月) 01:10:28.27
60 :
名無しさん@お腹いっぱい。
2015/10/04(日) 19:58:15.31
>>57 きれいでも動かないコードより
きたなくてもちゃんと動作するコードの方がよい
そして、きれいでちゃんと動作するコードが
一番いいのは言うまでもない。
61 :
名無しさん@お腹いっぱい。
2015/10/04(日) 22:53:55.31
正規表現で書くとどうなるんだ?
62 :
名無しさん@お腹いっぱい。
2015/10/06(火) 13:14:00.89
getline回りはsplitで"^(?=\%PART_)"で区切れると楽
下のコードは "^(?=\d)"にするとレス番号だけが行頭で表示され
本文はインデントされる2chですら処理できる
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
my $enc = 'UTF-8';
my ($delimiter, $search);
$delimiter = "^(?=\%PART_)"
GetOptions ('delimiter|d=s' => \$delimiter, 'search|s=s'=> \$search);
my $line = join('', <>);
my @lines = split /$delimiter/m, $line;
for (@lines) {print if /$search/;}
63 :
名無しさん@お腹いっぱい。
2015/10/13(火) 12:01:58.60
ワイルドカードて全角も扱えるんだね
勝手に半角のみと思い込んでた
自分用メモ
ひらがな: [ぁ-ん]
全角カタカナ: [ァ-ヾ]
半角カタカナ: [ヲ-゚]
全てのカタカナ: [ァ-ヾヲ-゚]
全角数字: [0-9]
全角英字: [a-zA-Z]
全角英数字: [0-z]
全角文字(英数字以外, ひらがな, カタカナ, 漢字, 記号): [、-鶴]
全角文字(英数字, ひらがな, カタカナ, 漢字, 記号): [、-鶴0-9a-zA-Z]
漢字: [一-鶴]
64 :
名無しさん@お腹いっぱい。
2015/10/13(火) 23:33:25.92
[ぁ-ん]と[ん-ぁ]で
・同じ結果→POSIX準拠
・結果が異なる→準拠してない
というのも豆
65 :
名無しさん@お腹いっぱい。
2015/10/15(木) 01:00:25.45
\p{Hiragana}
66 :
名無しさん@お腹いっぱい。
2015/10/16(金) 00:12:27.12
第一感その手のものを使って保守性ケアするよな
67 :
名無しさん@お腹いっぱい。
2015/10/16(金) 13:16:19.20
任意のキーボード・ショートカットを突然入力すると、任意のスクリプトを実行するような技はありますか。
例えば、特定のアプリケーションをアクティブにするスクリプトを書いたとして、それを
Ctrl+Alt+Gで実行してGoogleChromeをアクティブにするとか、そういう事です。
Alt+Tabで一つ一つ切り替えるのはうんざりなんですよね。
スクリプト自体はできてるんですが、それをショートカットと結びつける技が分かりません。
68 :
名無しさん@お腹いっぱい。
2015/10/16(金) 13:35:52.55
WMとかDEの機能使った方がいいんじゃね
シェルスクリプトの話ではない
69 :
名無しさん@お腹いっぱい。
2015/10/16(金) 13:41:08.99
「linux キーボードショートカット カスタマイズ」でぐぐれ
/apps/metacity/global_keybindings/panel_run_dialogとかって情報はすぐ出てくる
70 :
名無しさん@お腹いっぱい。
2015/10/16(金) 16:30:40.14
キーバインド割り当てかaliasを作るかじゃない?
71 :
名無しさん@お腹いっぱい。
2015/10/18(日) 03:08:01.82
だな
w3mなら .w3m/keymap
xmonadなら .xmonad/xmonad.hs に書くような内容
72 :
名無しさん@お腹いっぱい。
2015/10/18(日) 03:29:42.19
busyboxでunicode変換ってどうする?
73 :
名無しさん@お腹いっぱい。
2015/10/19(月) 12:52:16.45
busybox sh に限らず、iconv とかuconvとか入れて使うんじゃない?
74 :
名無しさん@お腹いっぱい。
2015/10/19(月) 14:00:50.57
すみませんが詳しい方のみ回答をお願いします
75 :
名無しさん@お腹いっぱい。
2015/10/19(月) 14:28:46.62
unicodeの何を?何へ?何から?変換するのかもうちょっと具体的に書かないと応える気にならない
76 :
名無しさん@お腹いっぱい。
2015/10/19(月) 15:27:19.76
詳しくないのはどっちだよ
そんなんだから周囲に教えてくれる人が居なくて
2chで質問するハメになるんだよ
77 :
名無しさん@お腹いっぱい。
2015/10/20(火) 00:06:45.98
只のコピペの別人にキレてどうするよ。
わざわざbusybox縛りを入れて珍回答を期待してるのに普通の方法を答えるのもまあ2chらしいが。
っていうかnkfじゃないのな。
78 :
名無しさん@お腹いっぱい。
2015/10/20(火) 07:22:32.22
以下のようなテキストファイルがあるとして
(記載のアルファベットは例であり数字だったりマルチバイト文字だったりします)
AAAAAAAAA
BBBB
CCCCCCCCCC
DDDDDDDDDDD
EEEEEEEEEEE
各1行を2行に増やすことってできますか?
AAAAAAAAA
AAAAAAAAA
BBBB
BBBB
CCCCCCCCCC
CCCCCCCCCC
DDDDDDDDDDD
DDDDDDDDDDD
EEEEEEEEEEE
EEEEEEEEEEE
ループで1行ずつ読んで2行にして出力するくらいしか思いつかなかったのですが
パイプを使ってシンプルにできたりしませんか?
79 :
名無しさん@お腹いっぱい。
2015/10/20(火) 07:41:49.44
80 :
名無しさん@お腹いっぱい。
2015/10/20(火) 21:45:48.66
>>79 ありがとうございます
こんなに簡単にできちゃった・・・
とりあえずpコマンド調べてみて
変換しない指定で返還前と変換後の2行が出力されるからこうなると理解しました
81 :
名無しさん@お腹いっぱい。
2015/10/20(火) 23:06:19.80
coolだよね
82 :
名無しさん@お腹いっぱい。
2015/10/21(水) 00:43:12.91
83 :
名無しさん@お腹いっぱい。
2015/10/21(水) 00:49:57.21
uniq
84 :
名無しさん@お腹いっぱい。
2015/10/21(水) 01:33:11.68
4行並んだら破綻
85 :
名無しさん@お腹いっぱい。
2015/10/21(水) 01:46:20.53
awk NR%2
86 :
名無しさん@お腹いっぱい。
2015/10/21(水) 01:56:17.21
あえてsedで
sed 'N; s/.*\n//'
87 :
名無しさん@お腹いっぱい。
2015/10/21(水) 06:13:41.20
GNU sed 限定
sed -n 1~2p
88 :
名無しさん@お腹いっぱい。
2015/10/21(水) 06:38:20.24
sed 'n;d' だけでいいのにw
89 :
名無しさん@お腹いっぱい。
2015/10/21(水) 07:02:03.89
尊い
90 :
名無しさん@お腹いっぱい。
2015/10/22(木) 08:26:25.71
そうだな
現代でも使える場面のあるsedは凄い
91 :
名無しさん@お腹いっぱい。
2015/10/22(木) 12:24:50.15
sedでutfの変換テーブル書いたらどの位の速度で動くものだろうか?
92 :
名無しさん@お腹いっぱい。
2015/10/22(木) 14:32:56.99
pdfファイルやExcelファイルを文字検索したいのですが
スマートな方法はありませんか?
ファイル変換しないといけないでしょうか?
93 :
名無しさん@お腹いっぱい。
2015/10/22(木) 15:27:18.78
変換しないとだめです
pdftotext あたりで標準出力に吐かせて grep とか
94 :
名無しさん@お腹いっぱい。
2015/10/22(木) 15:55:01.58
95 :
名無しさん@お腹いっぱい。
2015/10/22(木) 22:52:20.38
☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。
96 :
名無しさん@お腹いっぱい。
2015/10/27(火) 08:43:35.49
97 :
名無しさん@お腹いっぱい。
2015/10/27(火) 09:02:14.04
>>96 それって Linux OS でマルチコアで出力先が SSD の場合にだけ
速くなるかもしれないってオチだったような
98 :
名無しさん@お腹いっぱい。
2015/10/27(火) 11:16:32.98
でも実際速くなったんでしょ?
99 :
名無しさん@お腹いっぱい。
2015/10/27(火) 12:25:26.58
今の時代マルチコアしかないような気がするんだけど・・・
100 :
名無しさん@お腹いっぱい。
2015/10/27(火) 12:54:33.20
今の時代Linuxしかないような気がするんだけど・・・
今の時代SSDしかないような気がするんだけど・・・
101 :
名無しさん@お腹いっぱい。
2015/10/27(火) 17:55:11.78
>>98 他の環境だとリダイレクトの方が速かったよ
102 :
名無しさん@お腹いっぱい。
2015/10/27(火) 18:45:52.06
それは反論になってない
103 :
名無しさん@お腹いっぱい。
2015/10/27(火) 23:01:18.38
C言語で書いたほうが早かったよ
104 :
名無しさん@お腹いっぱい。
2015/10/27(火) 23:24:17.69
>>103 その書いたやつを見せてください。ぜひとも参考にしたいです
105 :
名無しさん@お腹いっぱい。
2015/10/28(水) 05:47:50.83
system("cat file | command");
106 :
名無しさん@お腹いっぱい。
2015/10/28(水) 06:27:57.97
同じスクリプトでもcatを使うと電解コンデンサがライトアップしやすいよw
107 :
名無しさん@お腹いっぱい。
2015/10/28(水) 07:30:41.83
windowsでいうINIファイルのような、設定情報を格納したファイルを作ろうとしています。
入出力パスとか、オプションのon/off(1か0か)などを書いておき、その設定ファイルを
シェルスクリプト上から読み込んで、処理内容に反映して実行することを想定しています
こういった処理をする場合、業界の一般的な様式みたいな決まりってありますか。
また、いろいろな実装方法が考えられますが、どのようなコマンドで実現するのが適切でしょうか。
busyboxに入ってそうなコマンドが一通り動ける環境を想定しています。
108 :
名無しさん@お腹いっぱい。
2015/10/28(水) 08:21:07.49
109 :
名無しさん@お腹いっぱい。
2015/10/28(水) 10:38:06.95
設定ファイル自体をシェルスクリプトにして . しちゃうのが楽じゃね
RedHat系なら /etc/sysconfig/ 以下、Debian系なら /etc/default/ 以下を参考に
110 :
名無しさん@お腹いっぱい。
2015/10/28(水) 11:48:34.73
またbusyboxの人か
111 :
名無しさん@お腹いっぱい。
2015/10/28(水) 11:54:18.98
こうするのが楽とかじゃなくて業界標準でお願いします
112 :
名無しさん@お腹いっぱい。
2015/10/28(水) 12:20:06.26
普通にINIファイル形式でいい
シェルスクリプトから呼べば(実行すれは)環境変数として設定されるようになる
113 :
名無しさん@お腹いっぱい。
2015/10/28(水) 12:21:45.13
ポイントは読み込むんじゃなくて実行させるってこと
readしてexportするんじゃなくてそのまま実行して環境変数に設定する
114 :
名無しさん@お腹いっぱい。
2015/10/28(水) 13:28:25.07
実行はしたくないです。インジェクションされます。。
115 :
名無しさん@お腹いっぱい。
2015/10/28(水) 13:35:42.31
セキュリティが心配なら標準とは対極の方向に向かうべきだろアホか
116 :
名無しさん@お腹いっぱい。
2015/10/28(水) 15:00:41.96
>>109 >>112 >>113 107です、ありがとうございました。ファイルを読ませることしか頭にありませんでしたので、聞いてよかったです。
その方式で、スクリプトの冒頭で設定を担当するコードを実行するようにします。
117 :
名無しさん@お腹いっぱい。
2015/10/28(水) 22:16:32.33
質問してるくせに偉そうだな
118 :
名無しさん@お腹いっぱい。
2015/10/28(水) 23:07:56.69
>>117 具体的にどこが偉そうなの?どこがカンに障るの?
119 :
名無しさん@お腹いっぱい。
2015/10/29(木) 04:20:02.34
教えを乞うてるくせにお腹いっぱいなのが気にくわない。
120 :
名無しさん@お腹いっぱい。
2015/10/29(木) 06:23:24.26
unixの管理をしています。
ユーザーはソフトのインストール禁止ですが、
最近、ユーザーでも自分のホームフォルダーにソフトをコピーし、
X権限をすることによってソフトが実行できてしまうことが判明しました。
これはOSのセキュリティーボールではないのでしょうか?
ユーザーのフォルダーではたとえX権限がされていても
実行できないようなおすすめのunixって何ですか?
必要ならカーネルにバッチを当てる方法も、やもうえません。
121 :
名無しさん@お腹いっぱい。
2015/10/29(木) 07:39:00.78
122 :
名無しさん@お腹いっぱい。
2015/10/29(木) 08:29:26.09
名前じゃね
123 :
名無しさん@お腹いっぱい。
2015/10/29(木) 09:02:26.07
シェルスクリプトっていう性質上、ある程度仕方ない面もあるけども
最近は余りにもスレ違いな話題が多くないか?
124 :
名無しさん@お腹いっぱい。
2015/10/29(木) 10:15:07.66
スレ違いでも板違いでもかまってもらえるからな
125 :
名無しさん@お腹いっぱい。
2015/10/29(木) 11:15:37.67
>>120 お前脳みそついてなくてUnix使ってんのか?
Windowsでも使ってろよ
希望してることができるから
126 :
名無しさん@お腹いっぱい。
2015/10/29(木) 12:04:46.30
コピペに釣られんな
127 :
名無しさん@お腹いっぱい。
2015/10/29(木) 22:18:02.02
128 :
名無しさん@お腹いっぱい。
2015/10/30(金) 11:01:24.94
>>124 軌道修正したレスができるなら相手して構わないんだけど、自演が疑われるような受け売り回答って不要だよな。
129 :
名無しさん@お腹いっぱい。
2015/11/01(日) 13:31:00.57
${@:+"$@"}という変数の記法がわかりません
たとえば/usr/bin/sensible-browserでは
/usr/bin/x-www-browser ${URL:+"$URL"}
のように使われています
なぜこう書くのかヒントをいただけたら…
130 :
名無しさん@お腹いっぱい。
2015/11/01(日) 14:16:24.02
man bash
Parameter Expansion の項(日本語訳では パラメータの展開 の項)
を見るよろし。てか俺がしょっちゅう見直すとこだわソレw
131 :
名無しさん@お腹いっぱい。
2015/11/02(月) 12:13:01.41
ポータビリティーの話( "$@"; が 何も無し にならないで、""; と解釈されてしまう対策の事 )が参考になるかな
What does ${1+"$@"} mean?
http://www.in-ulm.de/~mascheck/various/bourne_args/
Autoconf
http://www.geocities.jp/fut_nis/html/autoconf-ja/Shell-Substitutions.html#Shell%20Substitutions # 例えば、 $URL が未定義や、ヌルなら
/usr/bin/x-www-browser "$URL"
# は、この様な意味になるが
/usr/bin/x-www-browser ""
/usr/bin/x-www-browser ${URL:+"$URL"}
# は、こうなる
/usr/bin/x-www-browser
test.sh 引数の数に違いが出る(bash の方で理解しやすいので #!/bin/bash で)
#!/bin/bash -vx
foo="hoge"
bar=""
bash -vxc 'echo "$#, " "$@"' "dummy" "$foo"
bash -vxc 'echo "$#, " "$@"' "dummy" "$bar"
bash -vxc 'echo "$#, " "$@"' "dummy" "$baz"
bash -vxc 'echo "$#, " "$@"' "dummy" ${bar:+"$bar"}
bash -vxc 'echo "$#, " "$@"' "dummy" ${baz:+"$baz"}
132 :
129
2015/11/02(月) 14:09:15.67
>>130 アドバイスありがとうございます。自分もよくそこ見ます
環境はlinuxのbashなのですが、"$@"と書いておけば
${@:+"$@"}と結果的に同じになるはずなのに
わざわざ後者のように書くのはどうしてかなと疑問に思った次第です
133 :
129
2015/11/02(月) 14:12:02.34
>>131 有益な情報ありがとうございます
なるほど"$@"が""になってしまうことがあるためなのですね
違いを確認するためのスクリプトまで用意していただいて感謝です
おかげで長い間疑問だったことが氷解しました
/usr/bin/sensible-browserは、#!/bin/shですし
ポータビリティを十分に考えて作られているわけですね
なぜAdobeのacroreadなどでも使われているか納得できました
とっても勉強になりました
134 :
131
2015/11/03(火) 18:32:53.39
>>133 > ポータビリティを十分に考えて作られているわけですね
/usr/bin/sensible-browser は、Debian 系で使われているスクリプトのようなので
dash で動けば十分でしょう
ポータビリティのサイトは参考になるかと貼りましたが、${1+"$@"} と違って
/usr/bin/x-www-browser ${URL:+"$URL"} の場合、関係無いかと思います
念の為 dash 等で内容がヌルの場合に、"$URL" と、 "$@" で展開の結果に違いが有る事を、強調しておきます
LANG=C PAGER='less -p "Special Parameters"' man dash
> @ Expands to the positional ...略... If there
> are no positional parameters, the expansion of @ generates
> zero arguments, even when @ is double-quoted.
135 :
名無しさん@お腹いっぱい。
2015/11/04(水) 10:19:47.91
ADB shellを使ってるのですが.shで保存したadbのスクリプトを順番に実行させることって可能ですか?
例えばダブルクリックした時点で1.shが動いて〜10秒後に2.shを動かして〜というような感じにしたいです。
お力貸していただけると幸いです。
136 :
名無しさん@お腹いっぱい。
2015/11/04(水) 12:50:56.08
ADB shellを実行するのがWindowsかlinuxによってバッチかシェルスクリプトかでわかれるが、
最初に/data/local/tmpあたりに転送して、chmodして、それをwait含めて実機で実行するのが
良いんじゃないの。
何をやりたいのか書いてないのでアレだが、操作する側で10秒開けるのか、実機で10秒ウェイトするのか。
あと、なぜ10秒あける必要があるのか、10秒後までに実行した端末で何が起きているのか、
その判定は必要なのか、などを考える必要があるし、
さらには泥のことをよく理解できてないオッサンたちが、こういう話題は、ここではスレチじゃね?
と煽ってくるので、飛来するオッサンたちを黙らせる技術も必要とされる
137 :
名無しさん@お腹いっぱい。
2015/11/04(水) 13:12:49.86
すみません 記述が足りてないようでした。
現在はwindowsでbatファイルを利用してuwscというフリーソフトを使って1.batを起動させて〜10秒後に2.batといった具合にやってます。
最近linuxでも開発を始めたいと思い同じようなことがしたいです。
シェルスクリプトでwindowsでやってるuwscのような制御ができないかなぁと思って質問させていただきました。
そんなめんどくさいことするよりlinuxならこのフリーソフト使って制御しとけみたいなのがあれば
教えていだだけると幸いです。
138 :
名無しさん@お腹いっぱい。
2015/11/04(水) 13:15:27.82
>uwscというフリーソフトを使って1.batを起動させて〜10秒後に2.batといった具合に
この10秒後に、という処理自体をbatでやればいいんじゃないの?
なぜuwscを挟む必要があるの?
139 :
名無しさん@お腹いっぱい。
2015/11/04(水) 13:29:28.23
>>138 おっしゃる通りなのですがcallを使って次のbatを呼び出すことよりも先にツールを使って呼び出すことを覚えてしまったもので・・・
独学でやってるうえに無知な状態からまだ2ヶ月くらいしか経ってないものでこのスレのレベルの方からしたら程度が低い質問かもしれませんが他に聞けるような環境がないもので;;
140 :
名無しさん@お腹いっぱい。
2015/11/04(水) 13:33:00.98
あとは、何をやりたいのか具体的に書くしか
ちなみにゲームの自動制御とか、その手の話だったら俺は降りる
141 :
飛来したオバハン
2015/11/04(水) 13:33:27.01
アンタ泥とかwindowsとかイタチじゃないの?
142 :
名無しさん@お腹いっぱい。
2015/11/04(水) 17:24:19.98
PATH の dirctory に無いスクリプトは、相対、絶対パスで起動するか、PATH に追加する
例えばカレントディレクトリのスクリプトは、
./script.sh
で起動出来る
ダブルクリックで起動するには、 .desktop ファイル作る
#!/bin/sh
./1.sh
sleep 10
../2.sh
/home/username/bin/3.sh
PATH="/home/username/bin:$PATH"
4.sh
PATH=".:$PATH"
1.sh
143 :
名無しさん@お腹いっぱい。
2015/11/04(水) 17:24:50.70
又は、android 上で launcher.sh を書いておいて起動する
それをアプリから起動するなら、GScript Lite とか使うんや。よー知らんけど
#!/system/bin/sh
./1.sh
sleep 10
./2.sh
ついで
@echo off
call 1.bat
ping localhost -n 11 > nul
call 2.bat
144 :
名無しさん@お腹いっぱい。
2015/11/04(水) 21:13:41.29
みなさんありがとうございました。すこし足がかりが得られました。
やっぱりlinuxのほうが軽くて動作も安定してる感じなのでこれからはlinux中心にデバッグを行っていけたらと思います。
145 :
名無しさん@お腹いっぱい。
2015/11/08(日) 19:54:14.49
echoで\tを出力してるんだけど
raspbianだとTABに置き換わってるんだけど
Sientific Linuxだと\tのままなんだけど何でかわかる?
シェルスクリプトをそのまま持っていって実行したら
そんな感じになってた・・・
146 :
名無しさん@お腹いっぱい。
2015/11/08(日) 20:08:08.87
シェルスクリプトと違って、シェルの話だと思う
echo の違いではない?
man dash
echo [-n] args...
If any of the following sequences of characters is encountered
during output, the sequence is not output. Instead, the specified
action is performed:
man bash
echo [-neE] [arg ...]
-e オプションを指定した場合、以下に示す、バックスラッシュの
エスケープ文字が解釈されるようになります。
147 :
名無しさん@お腹いっぱい。
2015/11/08(日) 20:14:18.70
シェルスクリプトのポータビリティーの話とも言えるか...
訂正
148 :
名無しさん@お腹いっぱい。
2015/11/08(日) 20:37:50.28
ありがとうございます
確か実装したときにecho -eオプションは使っていたのですが
raspbianの/bin/shで実行すると
echo -e "test\ttest"
が
-e test test
になってしまっていろいろ試した挙句
-eいらないじゃんってことになったのを思い出しました
今は双方とも/bin/shを使っているのですが
上記のようになるのはraspbianの/bin/shだけで
/bin/bashを使うと双方とも期待したとおりの結果になりました
どこかのデストリのいずれかのシェルが
実は利用者が意識してるもの(パスが示すもの)と違うというのを
見た覚えがあるのですがraspbianの/bin/shだったかは思い出せません
継続して調べてみますが取り急ぎありがとうございました
149 :
名無しさん@お腹いっぱい。
2015/11/08(日) 22:14:22.18
echo じゃなくて printf 使うとか
printf 'TAB\tTAB\n'
# 少なくとも dash/bash/zsh では printf は shell の builtin function
そういや、ファイルの中に
-n
だけの行があって、
cat hoge.txt | while IFS= read str
do
echo "$str"
done
ってしたらその行が出力されなくてハマったことがあった…
150 :
名無しさん@お腹いっぱい。
2015/11/09(月) 12:53:41.77
>>149 どうやって回避したの?参考までに知りたい
151 :
名無しさん@お腹いっぱい。
2015/11/09(月) 18:25:32.86
え? 単に printf '%s\n' "$str" ってしただけだよ
152 :
名無しさん@お腹いっぱい。
2015/11/09(月) 22:29:31.56
echoはposixでその動作が決まってるわけじゃないから
移植性重視ならprintf安定
とorilyに書いてあった
153 :
名無しさん@お腹いっぱい。
2015/11/11(水) 18:21:45.18
1週間位試行錯誤するもうまくいかないから、ここで必要質問しようと思ったら
単にファイル名にスペースが入っていただけだった
風俗行って頭をすっきりしてます
154 :
名無しさん@お腹いっぱい。
2015/11/11(水) 19:33:08.21
それは書き込まなくてよかったんじゃないか
155 :
名無しさん@お腹いっぱい。
2015/11/12(木) 14:52:38.27
複数ファイルのダウンロードアルゴリズムについて教えてください
今シェルスクリプトを作ってテキストファイルに書かれてある
URLからファイルをダウンロードしています
早くダウンロードしたいため多重(多重度は回線の帯域などを考慮して3〜15で任意で設定)で
ダウンロードしていますが全体の終了時間を早めたいため
ファイルサイズでソートして大きいファイルからダウンロードしています
ただこの方法だと初めの方に大きいファイルばかりダウンロードするため
成果が上がってるように見えません
またもっと効率のよい方法があるのではとも思っています
お勧めのダウンロード順(を求めるアルゴリズム)があれば教えてください
なおちょっとしたシェルスクリプトは書いていますが
やってることは以下のコマンドと大差はありません
xargs -P 10 -n 1 wget -nv -c < downlist.txt
私のほうで考えられるのはたとえば10多重の場合
大きいものからを5多重で
小さいものからを5多重で
順にダウンロードすることくらいでした
でもこの方法だと全体のダウンロード完了が
遅くなる可能性があると思います
156 :
名無しさん@お腹いっぱい。
2015/11/12(木) 15:11:44.91
なんで大きいファイルから始めると全体の終了時間が早くなるの?
157 :
名無しさん@お腹いっぱい。
2015/11/12(木) 15:27:23.69
ちょっとうまく説明できませんが
大きなファイルは時間がかかるので
複数ファイルを多重でダウンロードしても
最長時間になる可能性があるためです
たとえば100MB、50MB、40MB、30MB、10MBのファイルを2多重でダウンロードするとき
以下のようにすればそれぞれ平均化されるため
1つめ:100MB→10MB
2つめ:50MB→40MB→30MB
なお以下のようになるのは最悪なパターンだと思います。
1つめ:100MB→50MB
2つめ:40MB→30MB→10MB
全体の終了時間が短くなる想定です
また当然ダウンロード速度は一定ではないため
特定のファイルに時間がかかった場合
小さなサイズのファイルだと調整がしやすいというのもあります
1つめ:100MB→30MB→10MB
2つめ:50MB(時間がかかった)→40MB
実際はスクリプト内でpsコマンドで多重度は監視しており
whileでループしながらダウンロードしているため
そのあたりの調整は楽にやれます
158 :
名無しさん@お腹いっぱい。
2015/11/12(木) 15:28:52.53
例えば他のファイル全部の合計より大きなファイルが一つある場合、
この大きなファイルのダウンロードを最初からスタートさせれば
全体ダウンロード時間はこのファイルのダウンロード時間になるけど、
この大きなファイルのダウンロード開始を遅らせると
全体ダウンロード時間もそれだけ長くなることになるってことだよね
159 :
名無しさん@お腹いっぱい。
2015/11/12(木) 15:31:56.60
>>158 そのとおりです
(大きなファイルはクリティカルパスになりえるってことです)
160 :
名無しさん@お腹いっぱい。
2015/11/12(木) 16:43:29.68
>>155 > ただこの方法だと初めの方に大きいファイルばかりダウンロードするため
> 成果が上がってるように見えません
この場合の成果とはより短い時間で完了することであるわけだが
大きいファイルを先に転送すると短い時間で済む筈だったが実際には逆で
より長い時間掛かってしまうから何とかしたい、ということですか?
161 :
名無しさん@お腹いっぱい。
2015/11/12(木) 17:51:07.33
俺の予想では、プログレスバー的なのを表示したいけど、
大きいファイルが先だとはじめはなかなか進まないってことじゃないかな。
どんなコマンドでダウンロードしてるか知らないけど、
たいてい転送バイト数を出力できるはずだから、
頑張って出力を解析して計算すればいいかと。
あるいは手元のファイルサイズを監視したほうが早いか。
162 :
名無しさん@お腹いっぱい。
2015/11/12(木) 17:59:30.65
でも質問はより効率のよダウンロード順(を求めるアルゴリズムだぜ
163 :
名無しさん@お腹いっぱい。
2015/11/12(木) 18:33:07.59
max procが10なら、大きいファイルから10個を多重でwgetする。
その時、残りのファイルのダウンロード順はまだ決めない。
その10個のwgetのうち、どれか先に終了したもの(ファイルサイズ最小のもののことが多いがネット環境によりそうとは限らない)
について、その時点で残りのファイルのうちサイズ最大のものを割り当てて
ダウンロードさせる。
以下、残りファイルがなくなるまで繰り返し。
164 :
名無しさん@お腹いっぱい。
2015/11/12(木) 20:25:10.34
厳密な重さのわからないナップサック問題って感じだな。
ダウンロード時間があらかじめ分かっていたとしてもとても難しい問題。
数学苦手なのでテキトーに聞き流してもらえると助かるが、多分 NP hard って呼ばれる問題と
同等で、全通り試さないと厳密解は得られないんじゃね?
現実的には
>>163 の言う貪欲法(greedy algorithm)的な?アルゴリズムが一番だろうな。
165 :
名無しさん@お腹いっぱい。
2015/11/12(木) 22:52:33.75
複数のファイルが全部同じサーバーにあるのかとか、別々だとしても
自分側のバンド使い切っていないかとか、もっと条件詰めないと
そもそも議論出来ない気がするけど。
166 :
名無しさん@お腹いっぱい。
2015/11/13(金) 02:37:34.17
多重ダウンロード禁止
167 :
名無しさん@お腹いっぱい。
2015/11/13(金) 02:48:29.59
分割ダウンロード禁止
168 :
名無しさん@お腹いっぱい。
2015/11/13(金) 12:04:00.88
エロ画像ダウンロード禁止
169 :
名無しさん@お腹いっぱい。
2015/11/13(金) 12:06:28.52
\(^o^)/
170 :
名無しさん@お腹いっぱい。
2015/11/13(金) 23:16:03.31
むしろ、トラフィックを監視して、一定以下になったらwget開始するスクリプトじゃ駄目なの?
171 :
名無しさん@お腹いっぱい。
2015/11/14(土) 00:11:59.24
回線異常で止まった時にさらに追い討ちかけるのか
172 :
名無しさん@お腹いっぱい。
2015/11/14(土) 00:39:23.96
ん、ヒントにならなかったか
ファイルを分割してダウンロードすればいい
173 :
名無しさん@お腹いっぱい。
2015/11/15(日) 12:35:05.13
>>171 異常だったらtcp二階建てとかしてない限りロストしてるんだから
どんどん長くなるタイムアウトをボケっと待ってたって仕方がないじゃん
むしろ定期的に試行するようにしたほうが復旧を即感知できるんじゃないか?
174 :
名無しさん@お腹いっぱい。
2015/11/19(木) 07:18:13.65
ルート所有のテキストファイルに、テキストを追加するために以下のコマンドを
実行するのですが、許可がないとはねられます。パスワードを入力しろ、も出て
きません。
実行者はもちろん、visudoでUSER ALL=(ALL) ALLの権限を与えられています。
$sudo echo "abc" >> /path/a.txt
bash: /path/a.txt: 許可がありません
何が問題なのでしょうか?
175 :
名無しさん@お腹いっぱい。
2015/11/19(木) 07:28:16.93
sudo コマンドが >>/path/a.txt を持って行ってしまうのが問題(だと思う)
sudo sh -c 'echo "abc" >> /path/a.txt'
176 :
名無しさん@お腹いっぱい。
2015/11/19(木) 07:30:35.56
174です。
ぐぐったら答え書いてありました。失礼しました。
最初のechoだけsudoで評価されて、リダイレクトはそうじゃないと。
177 :
名無しさん@お腹いっぱい。
2015/11/19(木) 09:35:05.07
>>175 さんくすです。なるほど。
ググり先を参考に、evalを使いました。
また、引数が複数の場合も含めて、スクリプトにしました。
パイプを使わない分、
>>175 さんのほうがスマートですね。
for i in "$@"; do
eval echo $"$i" | sudo tee -a /path/a.txt
done
178 :
名無しさん@お腹いっぱい。
2015/11/19(木) 09:36:39.66
まちがった。
>ググり先を参考に、evalを使いました。
evalじゃなくて、teeだった。すんません
179 :
名無しさん@お腹いっぱい。
2015/11/19(木) 13:15:22.39
ググると、これらはよく見る様になりました
sudo sh -c 'echo "hoge" > "teki tou"'
echo hoge | tee "teki tou" >/dev/null
他の解決方法を考えてみました
# /dev/null 反対
echo hoge | sudo sed -ne w"teki tou"
# tee の様にファイル名を引数で受け取る
echo hoge | sudo sh -c 'cat > "$0"' "teki tou"
# pipe は無しの方向で
sudo sh -c 'echo "hoge" > "$0"' "teki tou"
180 :
名無しさん@お腹いっぱい。
2015/11/19(木) 22:35:50.88
>>179 スレ違い
というかシェルスクリプトにすれば問題ないのに
181 :
名無しさん@お腹いっぱい。
2015/11/20(金) 13:29:04.21
どういう事?
スクリプトで使う要点の一行を書くのは、このスレでなくともよく有る事では?
sudo を使っていてスクリプト向けの行ではないって事かな?
182 :
名無しさん@お腹いっぱい。
2015/11/20(金) 13:42:47.00
>>181 違うよ。
リダイレクトを含めてスクリプトに書いておけば
sudoで(リダイレクトの)問題が起きないという意味。
183 :
名無しさん@お腹いっぱい。
2015/11/20(金) 13:54:47.85
なんでスレ違い?
184 :
名無しさん@お腹いっぱい。
2015/11/20(金) 14:14:40.64
ラベルが低いから。
185 :
名無しさん@お腹いっぱい。
2015/11/20(金) 14:38:57.72
要点を貼るのはいいんだが
スクリプトの意図がよくわからない
186 :
名無しさん@お腹いっぱい。
2015/11/20(金) 19:37:14.93
自演くさっ
187 :
名無しさん@お腹いっぱい。
2015/11/20(金) 22:49:21.30
引数を元に関数の中{と}の中を表示するコマンドありませんか?
test.txt
int main()
{
printf("\n");
}
int hoge()
{
モジモジ
文字文字
}
void pyo()
{
もじもじ
}
--------------
$コマンド test.txt hoge
モジモジ
文字文字
188 :
名無しさん@お腹いっぱい。
2015/11/21(土) 00:03:09.77
無い
189 :
名無しさん@お腹いっぱい。
2015/11/21(土) 00:06:00.44
じゃ、GNU grep で。
#!/bin/sh
grep --null-data -Po "(^|\n).* $2\(.*?\)(.|\n)*?{(.|\n)*?\n\K(.|\n)+?(?=\n?})" "$1"
190 :
名無しさん@お腹いっぱい。
2015/11/21(土) 00:15:34.13
>>187 ありません
というか、何のためにそういうコマンドが必要か書いた方が
的確なアドバイスもらえる可能性高そう
191 :
名無しさん@お腹いっぱい。
2015/11/21(土) 00:18:18.23
>>189 保守性ゼロ、使い回せる可能性ゼロのいい見本だな
192 :
名無しさん@お腹いっぱい。
2015/11/21(土) 00:48:31.94
いいんじゃない、それで
193 :
名無しさん@お腹いっぱい。
2015/11/21(土) 00:52:28.46
>>189 できました、ありがとうございます!
>>190 目的は外部ファイルにある関数を調べたかったのでcatで連結して
一括で調べたかっただけなのです…
194 :
名無しさん@お腹いっぱい。
2015/11/21(土) 01:00:24.01
>>193 え、できたのw ネタのつもりで書いたのにw
まぁ真面目な話、関数内にブロックがあったら途中でちょん切れるので気をつけて。
195 :
名無しさん@お腹いっぱい。
2015/11/21(土) 01:04:07.86
>>193 if文とか無いの?
関数の中に
}
が有れば、そこで切れると思うよ
196 :
名無しさん@お腹いっぱい。
2015/11/21(土) 01:05:28.85
かぶってた
197 :
名無しさん@お腹いっぱい。
2015/11/21(土) 01:12:31.11
きちんとインデントされていて、関数ブロックの終端が必ず
"\n}" である、という条件なら以下で
grep --null-data -Po "(^|\n).* $2\(.*?\)(.|\n)*?{(.|\n)*?\n\K(.|\n)+?(?=\n})" "$1"
198 :
名無しさん@お腹いっぱい。
2015/11/21(土) 01:26:46.64
indent(1) と組み合わせればどうか
199 :
名無しさん@お腹いっぱい。
2015/11/21(土) 02:25:44.08
tag作れよ
200 :
名無しさん@お腹いっぱい。
2015/11/21(土) 17:10:42.13
sedならどうなの?
201 :
名無しさん@お腹いっぱい。
2015/11/21(土) 18:12:48.25
GNU版grep2.5.4で「『条件A』または『条件Bかつ条件C』」という指定をするにはどうすればよいのでしょう
例えば、以下のようなテキストで
111
aaa
222
bbb 〜 ccc 〜
bbb 〜 ddd 〜
「aaa」または「bbbかつccc」だけ抜き出して
aaa
bbb 〜 ccc 〜
を抜き出したいです
grep aaa sample.txt
grep -e bbb -e ccc sample.txt
として、個別の条件で出力できるところまでは分かったのですが、
テキストに出てくる順番も重要なので、何とかうまくできないかと思ってます
それともawkとかを使う必要があるのでしょうか…
202 :
名無しさん@お腹いっぱい。
2015/11/21(土) 18:21:02.93
こんなんでいいんじゃない
grep -E 'aaa|bbb.*ccc|ccc.*bbb' a.txt
203 :
名無しさん@お腹いっぱい。
2015/11/21(土) 18:27:53.77
>>202 できました
「bbb.*ccc」「ccc.*bbb」という書き方が思いつきませんでした
ありがとうございました
204 :
名無しさん@お腹いっぱい。
2015/11/21(土) 18:57:13.66
関数の内部を切り出すような処理は
yacc(よく知らないんだけど)なんかは関係ない?使えないの?
205 :
名無しさん@お腹いっぱい。
2015/11/22(日) 19:30:02.70
ファイルのリネームについてご教授ください
01.mp4
02.mp4
…
25.mp4
という動画ファイルがあります
それとは別のテキストファイル (List.txt) があり、内容は
orange 01「みかん」
orange 02「ぽんず」
…
orange 25「かんきつ」
動画ファイルを、テキストファイルから取得した文字列で
リネームしていきたいですが良い方法を知りたいです
sedやawkでも構いません
よろしくお願いします
環境はMac El Capitanです
206 :
名無しさん@お腹いっぱい。
2015/11/22(日) 20:11:25.81
>>205 for i in {01..25}
do
mv $i.mp4 $(grep $i List.txt).mp4
done
207 :
名無しさん@お腹いっぱい。
2015/11/22(日) 20:56:26.91
>>206 usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
というメッセージエラーで上手くいかなかったです
List.txtの空白スペースに対応してなかったようで
orange 01「みかん」→ orange01「みかん」にしておくと
うまくいきました
208 :
名無しさん@お腹いっぱい。
2015/11/22(日) 20:57:02.29
ありがとうございます
209 :
名無しさん@お腹いっぱい。
2015/11/23(月) 10:43:36.03
常にダブルクォートを心がけること
210 :
名無しさん@お腹いっぱい。
2015/11/23(月) 14:52:02.86
>>187>>200
私はsedでこういう使い方なら使用度高いな。
ただCの関数の抜き出しなどはこれだけじゃ全然足りないね。
readf ()
{
sed -n '/[[:space:]]*[int|void][[:space:]]\+'$1'[[:space:]]*(.*)/b filter1; d;
:filter1; n; /[[:space:]]*{/n; :filter2; /[[:space:]]*}/q; p; n; b filter2' $2
}
211 :
名無しさん@お腹いっぱい。
2015/11/23(月) 14:53:07.97
ごめん引数の順序が逆になってる。
212 :
名無しさん@お腹いっぱい。
2015/11/23(月) 15:08:42.76
でもまぁ書換えたりしない場合、大抵の事は前の人が書いてるように
grepの-Pを使うといいと思う。
213 :
名無しさん@お腹いっぱい。
2015/11/23(月) 21:42:42.57
>>206 bashism
このスレ的にだけでなく一般的にも
bash 依存のスクリプトには、#!/bin/bash を付けた方が良いよ
214 :
名無しさん@お腹いっぱい。
2015/11/24(火) 04:40:58.26
こんなのもありかな。以下だと表示するだけ実際にやる時は
echoを外してunset rをしてから行う事。
cat List.txt |while read
do
printf '%02d\n' $(( ++r )) |xargs -i echo mv {}.mp4 ${REPLY}.mp4
done
215 :
名無しさん@お腹いっぱい。
2015/11/24(火) 06:19:42.03
そういう、スペース入りファイル名未対応回答はいいです
216 :
名無しさん@お腹いっぱい。
2015/11/24(火) 07:10:44.29
ごめんねーzshだと大丈夫なんだけどな。
じゃあちょっと分らないな。
217 :
名無しさん@お腹いっぱい。
2015/11/24(火) 07:13:51.39
しかし根本的なお勧めな解答をするならば、fileにはわざわざ音楽名をつけない事だね。
218 :
名無しさん@お腹いっぱい。
2015/11/24(火) 07:15:07.67
zshを使ってないならそんな事なおさらだよ。
219 :
名無しさん@お腹いっぱい。
2015/11/24(火) 08:53:18.61
>>214 xargsが無駄です。
catが無駄です。
r=0
while read
do
: $((r++))
echo mv $(printf %02d $r).mp4
220 :
名無しさん@お腹いっぱい。
2015/11/24(火) 09:27:10.95
221 :
名無しさん@お腹いっぱい。
2015/11/24(火) 10:13:12.69
こっちの台詞だよ。それ動くのかね。
222 :
名無しさん@お腹いっぱい。
2015/11/24(火) 10:16:52.25
まあどうでもいいや。
223 :
名無しさん@お腹いっぱい。
2015/11/24(火) 11:42:10.34
こっちってどっちだ
224 :
名無しさん@お腹いっぱい。
2015/11/25(水) 00:35:58.05
>>205 bash でもいいなら
mapfile -t -O 1 -c 1 -C 'move(){ mv $(printf "%02d.mp4" "$1") "$2.mp4"; };move' < List.txt
225 :
200ではない
2015/11/25(水) 20:05:12.35
>>210 :filter1; n; /[[:space:]]*{/n; の辺りについて
2行目に { が無い場合は、どちらを想定したのかしれないが、興味を引いた
たぶん前者だろうな。すると、古くから実際に使っていそうだね
int main(argc, argv)
int argc;
char *argv[];
{
int main(int argc, char *argv[]) {
226 :
名無しさん@お腹いっぱい。
2015/11/28(土) 10:55:16.58
>>224 callback の中で関数定義してるよ。外でやるか、bash -c '...' にしろよ
mapfile -t -O 1 -c 1 -C 'bash -c '\''echo mv $(printf "%02d.mp4" "$0") "$1.mp4"'\' < List.txt
227 :
名無しさん@お腹いっぱい。
2015/11/29(日) 10:07:15.23
$sed -e '$-3,$d' file
sed: -e expression #1, char 2: 不明なコマンド: `-'
なして?
228 :
名無しさん@お腹いっぱい。
2015/11/29(日) 14:16:20.05
>>227 sedのアドレスで $-3 とか使えませんw
head -n -4 で行けるよ。 ($-3から$までだから終りの4行削除)
229 :
名無しさん@お腹いっぱい。
2015/11/29(日) 18:57:29.27
ここUNIX板だよ
230 :
名無しさん@お腹いっぱい。
2015/11/30(月) 06:01:18.54
>>225 ごめん紹介程度に適当にね。しかしグルーピングの間違いがひどいけどいいや、\|だけか。
やっつけ仕事的な興味だと思うけれどまあ実際やっつけ仕事に使える。
書き留めたものの仕分けとかね。他にもhtml-xml-utilsというsoftwareに
hxpipe,hxunpipeというcommandが入ってるのだけど、その出力の処理にも使える。
はぁそろそろ現実世界に帰るか準備をぽつぽつするので帰ってきません。
231 :
名無しさん@お腹いっぱい。
2015/11/30(月) 09:32:38.39
232 :
名無しさん@お腹いっぱい。
2015/11/30(月) 11:51:54.22
>>231 ネットで嘘が蔓延するのはよくあること。
他サイトは嘘をまるごとコピーして載せてるだけだろw
vi(ex)やedでは $-3 とか使えるので、それと混同してるんだろ。
233 :
名無しさん@お腹いっぱい。
2015/11/30(月) 12:19:42.13
使える実装もあんのかな
234 :
名無しさん@お腹いっぱい。
2015/11/30(月) 13:05:21.61
235 :
名無しさん@お腹いっぱい。
2015/12/01(火) 02:36:00.46
>231の謝罪マダァ-? (・∀・ )っ/凵⌒☆チンチン
236 :
名無しさん@お腹いっぱい。
2015/12/01(火) 15:02:08.23
237 :
名無しさん@お腹いっぱい。
2015/12/01(火) 15:30:51.28
あなたもコメントしてみませんか :)
238 :
名無しさん@お腹いっぱい。
2015/12/01(火) 15:39:36.30
ストリームなんだから、全部パッファしなきゃ実装できない事はちょっと考えれば明らかなのに、
exで使えるからsedも使えるだろうとかセンス悪すぎる。
エンジニアの素質無い。
239 :
名無しさん@お腹いっぱい。
2015/12/01(火) 17:09:19.19
sed で $-3 とか書いてるプログラマorシス管見つけたら社史編纂室に異動させるわ
240 :
名無しさん@お腹いっぱい。
2015/12/01(火) 17:18:23.69
面白そうじゃないか
241 :
名無しさん@お腹いっぱい。
2015/12/01(火) 18:23:49.12
> 全部パッファしなきゃ実装できない
最後に切る行数分だけバッファーすれば良い
242 :
名無しさん@お腹いっぱい。
2015/12/01(火) 21:49:07.76
そんなことしか思いつかないところが壊滅的にセンス悪い
1,$-3s/hoge/hage/
243 :
名無しさん@お腹いっぱい。
2015/12/01(火) 22:53:36.24
なんだまた一人で自演だったか
244 :
not 238
2015/12/02(水) 07:07:15.41
>>242 でも、4行分バッファして4行分処理を遅延すればできるが。
それとは別に、sedではそういう処理には向かないというのは同意。
245 :
名無しさん@お腹いっぱい。
2015/12/02(水) 23:21:03.30
バッファーした後は、N;P;D のループで済むから、比較的単純。結構 sed 向きじゃない?
sed -ne ':Lp; N; 1,4b Lp; P; D'
cutTail()
{
sed -ne '
:LoopToFillBuffer
N
1, '"$1"' b LoopToFillBuffer
P
D
'
}
246 :
名無しさん@お腹いっぱい。
2015/12/04(金) 00:22:12.57
247 :
名無しさん@お腹いっぱい。
2015/12/04(金) 06:04:34.02
>>246 -e オプションで複数に分ける意味ないだろ。
sed ':a;$d;N;2,10ba;P;D'
または
sed -n ':a;1,10!{P;N;D;};N;ba'
だけで行ける。
248 :
名無しさん@お腹いっぱい。
2015/12/04(金) 06:26:55.09
シェルスクリプトでオブジェクト指向ってできないんですか?
249 :
名無しさん@お腹いっぱい。
2015/12/04(金) 07:53:54.11
250 :
名無しさん@お腹いっぱい。
2015/12/07(月) 10:28:27.33
httpsでファイル入手するスクリプトで一番汎用的な書き方ってなんだろう?
251 :
名無しさん@お腹いっぱい。
2015/12/07(月) 10:33:45.35
wget
252 :
名無しさん@お腹いっぱい。
2015/12/07(月) 10:48:19.19
curl
253 :
名無しさん@お腹いっぱい。
2015/12/07(月) 11:21:08.52
古い環境だと結局ブラウザ使うのが一番確実だったりするのだろうか?
254 :
名無しさん@お腹いっぱい。
2015/12/07(月) 13:20:40.25
255 :
名無しさん@お腹いっぱい。
2015/12/07(月) 16:31:25.34
シェルスクリプトで宅内監視カメラの静止画を1分ごとにDLして保存してるけど、
うちではcurlが鉄板だわ
256 :
名無しさん@お腹いっぱい。
2015/12/07(月) 21:08:34.28
257 :
名無しさん@お腹いっぱい。
2015/12/07(月) 21:20:56.81
監視カメラの時間別映像ファイルを上書きで消すのをトリックに使ったミステリがあったなあ
258 :
名無しさん@お腹いっぱい。
2015/12/07(月) 21:27:45.23
httpsってsslかなんかだっけ?
259 :
名無しさん@お腹いっぱい。
2015/12/07(月) 22:42:59.47
当然
>>256はそれで終わりじゃないよな?
SSL/TLSのためにもうひと工夫あるんだよな?
ボケ回答のウケ狙いじゃないよな?
260 :
名無しさん@お腹いっぱい。
2015/12/07(月) 23:08:08.80
https telnet で検索
261 :
名無しさん@お腹いっぱい。
2015/12/07(月) 23:43:57.13
流石にSSL部分を前スレ716みたいなコードで置き換えるというのは無茶だろうか?
262 :
名無しさん@お腹いっぱい。
2015/12/07(月) 23:52:00.25
検索したらそういう変態技サイトでもあるのかなと思ったけど見つけられなかったわ
>>260に期待する
263 :
名無しさん@お腹いっぱい。
2015/12/07(月) 23:53:10.50
s_clientつーのがある
264 :
名無しさん@お腹いっぱい。
2015/12/08(火) 00:09:05.97
telnetとoepnsslの区別が出来ない人がいるな
265 :
名無しさん@お腹いっぱい。
2015/12/08(火) 00:54:46.22
256のように標準入力からコマンド流しこめる奴って話だろ。アスペ。
266 :
名無しさん@お腹いっぱい。
2015/12/08(火) 07:04:54.30
同様に扱える
{
sleep 1
printf 's_client -connect www.example.com:443\n'
sleep 3
printf 'GET / HTTP/1.1\nHost: www.example.com\n\n'
sleep 3
} | openssl
267 :
名無しさん@お腹いっぱい。
2015/12/08(火) 07:25:22.83
268 :
名無しさん@お腹いっぱい。
2015/12/08(火) 10:24:12.12
269 :
名無しさん@お腹いっぱい。
2015/12/08(火) 11:28:41.95
perl入ってない環境使う機会なんて
もうほとんどなくなったなぁ
270 :
名無しさん@お腹いっぱい。
2015/12/08(火) 11:50:28.49
perl入ってる環境使う機会なんて
もうほとんどなくなったなぁ
271 :
名無しさん@お腹いっぱい。
2015/12/08(火) 12:05:03.09
初版から標準対応しているものでないと使いにくいよね。
272 :
名無しさん@お腹いっぱい。
2015/12/08(火) 14:20:28.02
入ってなくて、入れていいなら入れるもの
273 :
名無しさん@お腹いっぱい。
2015/12/08(火) 14:29:50.01
入れ替えるのはどこかで不都合があるかわかったもんじゃないからな。
274 :
名無しさん@お腹いっぱい。
2015/12/08(火) 15:13:44.93
本体ロム領域4MBのルーターのtelnet接続で動く技でお願いします。
>>256は動きそうなので合格だけどssl非対応なので不合格。
>>266はopensslコマンドがないので落第です。
もっと頑張ってくださいよ。
275 :
名無しさん@お腹いっぱい。
2015/12/08(火) 16:28:48.50
条件後出し北w
276 :
名無しさん@お腹いっぱい。
2015/12/08(火) 17:44:47.81
そもそも前出ししてないけどな
>>250の条件は一番汎用的ということで完結しているので、それより解きやすい派生のお題だろう。
277 :
名無しさん@お腹いっぱい。
2015/12/08(火) 17:49:54.77
じゃ、その4MBのROMの中身、開示しないとだめだろ。
つーか、なんか白けてきた。。。
278 :
名無しさん@お腹いっぱい。
2015/12/08(火) 17:50:49.65
279 :
名無しさん@お腹いっぱい。
2015/12/08(火) 17:55:37.06
>>277 root# busybox
BusyBox v1.22.1 (2014-09-20 22:01:35 CEST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Currently defined functions:
[, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp,
chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd,
devmem, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep,
find, free, fsync, grep, gunzip, gzip, halt, head, hexdump, hostid,
hwclock, id, ifconfig, kill, killall, less, ln, lock, logger, ls,
md5sum, mkdir, mkfifo, mknod, mkswap, mktemp, mount, mv, nc, netmsg,
netstat, nice, nslookup, ntpd, passwd, pgrep, pidof, ping, ping6,
pivot_root, poweroff, printf, ps, pwd, readlink, reboot, reset, rm,
rmdir, route, sed, seq, sh, sleep, sort, start-stop-daemon, strings,
switch_root, sync, sysctl, tail, tar, tee, telnet, telnetd, test, time,
top, touch, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime,
vconfig, vi, wc, wget, which, xargs, yes, zcat
280 :
名無しさん@お腹いっぱい。
2015/12/08(火) 18:25:47.79
wget使えんのか?
281 :
名無しさん@お腹いっぱい。
2015/12/08(火) 18:28:57.45
busyboxでwgetは使えるが、httpsには対応してない。(httpとftpのみ)
282 :
名無しさん@お腹いっぱい。
2015/12/08(火) 19:30:56.44
最近はスクリプトと言えばbusyboxの仕事ばかり。
perl使いは社史編纂室に送られたw
283 :
名無しさん@お腹いっぱい。
2015/12/08(火) 19:31:25.90
条件を増やしても減らしても後出し
元々の条件
httpsでファイル入手するスクリプトで一番汎用的な書き方ってなんだろう?
後出し条件
4MBのルーターのtelnet接続で動く技で
284 :
名無しさん@お腹いっぱい。
2015/12/08(火) 20:02:22.82
>>283 前者は汎用的、後者はカスタムで、条件が正反対だろうが
285 :
名無しさん@お腹いっぱい。
2015/12/08(火) 20:08:32.27
条件は部分集合だろ?
286 :
名無しさん@お腹いっぱい。
2015/12/08(火) 20:11:56.40
いまどきだとtelnetがなくてsshだけだったりするのもあるのだろうか?
287 :
名無しさん@お腹いっぱい。
2015/12/08(火) 20:25:44.06
>>285 違うからブランチだと言ってるんだろう。そもそも別人なので後出しも前田氏もない。
288 :
名無しさん@お腹いっぱい。
2015/12/08(火) 20:52:44.89
へぇ〜別人ねぇ〜
別人が横から条件変えてるのか
何故に言い切るの?
あほらし。相手して損した
289 :
名無しさん@お腹いっぱい。
2015/12/08(火) 21:01:10.94
290 :
名無しさん@お腹いっぱい。
2015/12/08(火) 21:16:23.39
grepを破壊的に使うことってできます?
あればおしえてください
他のフィルタ系コマンドでも応用できるものだとよりよいです
291 :
名無しさん@お腹いっぱい。
2015/12/08(火) 21:38:58.20
292 :
名無しさん@お腹いっぱい。
2015/12/08(火) 21:44:05.23
>>290 (rm file; grep hoge >file) <file
Cygwinじゃ無理かも
293 :
名無しさん@お腹いっぱい。
2015/12/08(火) 21:47:39.67
あとファイルシステムの容量が不足したら
元ファイルまで失われるという欠陥もある
294 :
名無しさん@お腹いっぱい。
2015/12/08(火) 21:48:19.00
295 :
名無しさん@お腹いっぱい。
2015/12/08(火) 21:49:52.56
>>292 できました(Cygwin64でも
ありがとうございます!
296 :
名無しさん@お腹いっぱい。
2015/12/10(木) 05:48:14.80
初歩的な質問ですみません。
find . -type f -name '*.txt' と
find . -name '*.txt' -type f は、どっち良いとかありますか?
297 :
名無しさん@お腹いっぱい。
2015/12/10(木) 07:16:13.77
298 :
名無しさん@お腹いっぱい。
2015/12/10(木) 07:31:45.64
>>296 どっちでもいいよ
ほとんどプレーンファイルっていう普通の状況なら、
名前を先に判定したほうが計測できないレベルで速いかもしれない
299 :
名無しさん@お腹いっぱい。
2015/12/10(木) 08:02:20.09
wget、通常ならHTTPS (SSL/TLS) Optionsがあって、オプション指定できるが
busybox組み込みのwgetは、軽くするため、httpsオプションなしでコンパイルされ
てるのかな。
300 :
名無しさん@お腹いっぱい。
2015/12/10(木) 08:48:45.97
コンソールから、2chのスレ(たとえばココ)に投稿するような
スクリプト使ってる人いますか?
301 :
名無しさん@お腹いっぱい。
2015/12/10(木) 09:01:58.85
>>296 レギュラーファイル以外のディレクトリとかが1000万個あるなら、名前を比較しないで済む前者の方が良いかもしれない
302 :
名無しさん@お腹いっぱい。
2015/12/10(木) 12:39:47.97
>>299 wgetがhttps対応したのは後出しなんじゃないか?
busyboxが登場した頃のwgetでは標準では無かったと思われ
303 :
名無しさん@お腹いっぱい。
2015/12/10(木) 12:53:18.77
そもそも軽くするのにashなんて必要だろうか?
304 :
名無しさん@お腹いっぱい。
2015/12/10(木) 13:12:18.13
305 :
名無しさん@お腹いっぱい。
2015/12/10(木) 13:38:24.81
2001年からHTTPSサポートしてるんだぜ
それ以上古い環境なんて考慮する必要ないよ
306 :
名無しさん@お腹いっぱい。
2015/12/10(木) 14:03:30.45
そんな事言ってる奴はbashとopensslの穴に落ちるがいい。
なんと言われようとshが標準
307 :
名無しさん@お腹いっぱい。
2015/12/10(木) 15:56:58.29
>>298>>301
ありがとうございます、実質変わらないんですね。
気にしないことにします。
308 :
名無しさん@お腹いっぱい。
2015/12/11(金) 00:02:46.91
309 :
名無しさん@お腹いっぱい。
2015/12/11(金) 00:30:35.95
>>296 そういう時は time コマンドを使って CPU 時間計測するというのも手だぞ。
310 :
名無しさん@お腹いっぱい。
2015/12/11(金) 01:31:31.62
ROMが4MBの余ったbuffalo製ルータにopenwrt1505入れてみたわ
root@OpenWrt:/# wget
https://192.168.1.1/ Connecting to 192.168.1.1 (192.168.1.1:443)
wget: can't execute 'openssl': No such file or directory
wget: error getting response: Connection reset by peer
root@OpenWrt:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 448 232 216 52% /
/dev/root 2304 2304 0 100% /rom
tmpfs 14368 524 13844 4% /tmp
/dev/mtdblock5 448 232 216 52% /overlay
overlayfs:/overlay 448 232 216 52% /
tmpfs 512 0 512 0% /dev
初期状態ですでにfilesystemの空き容量216KB こりゃムリゲーだわ
311 :
名無しさん@お腹いっぱい。
2015/12/11(金) 13:13:34.04
>>310 おつかれちゃん。
というわけで、4MB ROMで、httpsの話題は糸冬了とさせていただきます。w
312 :
名無しさん@お腹いっぱい。
2015/12/12(土) 02:38:13.55
>>309 ありがとうございます。
15000個のディレクトリと120000個のファイルが入ったディレクトリで
何度かやってみましたが特に違いはありませんでした。
313 :
名無しさん@お腹いっぱい。
2015/12/12(土) 12:37:42.64
>>310-311 ちょっと待った、216KBあればスクリプト何行書けるよ?
前スレのRSA暗号のスクリプトの10倍程度に膨れたとしても余裕で入らないか?
314 :
名無しさん@お腹いっぱい。
2015/12/12(土) 14:30:14.68
>>313 エラーメッセージ読めないなら黙ってなよ
315 :
名無しさん@お腹いっぱい。
2015/12/12(土) 14:35:22.38
openssl相当をシェルスクリプトで書くっていう
意味だと読み取れないなら黙ってろよ
316 :
名無しさん@お腹いっぱい。
2015/12/12(土) 16:50:31.02
vagrantで仮想サーバー環境を作っていて
provisioning.shというファイルを作りvagrantを立ち上げたときの初期動作を指定しているのですが
sudo yum install postfix -y としたあと
sudo alternatives --config mta
とすると番号を聞かれるのですが、1番のpostfixを選びたい場合どう書けばいいのですか?
sudo yum install -yと書くと途中のyes/noをyにしてくれる、というようなことがしたいのですが
317 :
名無しさん@お腹いっぱい。
2015/12/12(土) 20:01:02.92
>>315 ぷぷぷぷ、RSAの他に最低でも
楕円曲線暗号、メッセージダイジェスト、asn1デコーダ、エンコーダ、pemエンコーダ、デコーダー
作ってから言ってね。
318 :
名無しさん@お腹いっぱい。
2015/12/12(土) 20:44:59.01
楕円曲線暗号、メッセージダイジェスト、asn1デコーダ、エンコーダ、pemエンコーダ、デコーダーが
シェルスクリプトだけで作れない証明は?
319 :
名無しさん@お腹いっぱい。
2015/12/12(土) 21:06:08.70
320 :
名無しさん@お腹いっぱい。
2015/12/13(日) 01:42:09.87
後、共通鍵暗号も要るね
ワクワク
321 :
名無しさん@お腹いっぱい。
2015/12/13(日) 02:03:11.75
なんかガキが出てきて凄そうなキーワード上げてるって感じにしか見えん
322 :
名無しさん@お腹いっぱい。
2015/12/13(日) 02:21:22.86
x509って知ってる?
楕円曲線暗号は必須じゃないけど他は全部必要だよ。
323 :
名無しさん@お腹いっぱい。
2015/12/13(日) 03:26:03.62
っていうか、作り方わかってるなら組めるだろ
自分で作れないものを挙げろよ
324 :
名無しさん@お腹いっぱい。
2015/12/13(日) 07:04:17.98
>>316 man alternatives
man update-alternatives
か何かで調べると --config 以外の非対話的オプションが有るが
それは使えない?
325 :
名無しさん@お腹いっぱい。
2015/12/13(日) 07:30:11.14
326 :
名無しさん@お腹いっぱい。
2015/12/13(日) 08:06:26.59
他の解決方法でなく
シェルスクリプトで openssl を実現しようと云う発想をする時点で、
しかも条件を提示したんだから解決方法を出せとか
(別の意味で)黙るよね
327 :
名無しさん@お腹いっぱい。
2015/12/13(日) 09:08:35.94
実現不能な提案は妄想って言うんだよ
で、お前は実装できるの?
328 :
名無しさん@お腹いっぱい。
2015/12/13(日) 11:05:38.72
できるよ。無意味だからしないけど。
黙らなくていいよ。グズグズ言い続けて。
329 :
名無しさん@お腹いっぱい。
2015/12/13(日) 11:19:13.11
世界初だから全然無意味じゃない。
330 :
名無しさん@お腹いっぱい。
2015/12/13(日) 13:45:47.64
bashでOSを判別しようと思ってて、シェル変数OSTYPEで判別するのがいいのかなと
思ってるんですが、もっとよい方法ありますか?
あとHP-UX 11iのbashでシェル変数OSTYPEは何になっているか、わかる方はいますか?
331 :
名無しさん@お腹いっぱい。
2015/12/13(日) 13:57:10.41
uname
332 :
名無しさん@お腹いっぱい。
2015/12/18(金) 20:07:27.08
telnet で季節ものを。
telnet ネタコードにネタを重ねています
GNU sleep を使っています
ワンライナー
i=-1; while [ $(( i += 1 )) -le 9 ]; do { sleep 1; printf 'open vt100.net 80\n';\
sleep 3; printf 'GET /animation/xmas'"$i"'.txt HTTP/1.0\n\n'; sleep 3; } | telnet -8\
| while IFS= read -r line; do echo "$line"; sleep 0.08; done; printf \
'Watch More? ( Yes / No ): '; read ans; case "$ans" in n|N|no|NO) i=99;; esac; done
視線が...さ、寒い
良いお年を
そういえばこんなのも
telnet nyancat.dakko.us
333 :
名無しさん@お腹いっぱい。
2015/12/18(金) 20:08:17.92
スクリプト
#!/bin/sh
i=-1
while
[ $(( i += 1 )) -le 9 ]
do
{
sleep 1
printf 'open vt100.net 80\n'
sleep 3
printf 'GET /animation/xmas'"$i"'.txt HTTP/1.0\n\n'
sleep 3
} |
telnet -8 |
while IFS= read -r line
do
echo "$line"
sleep 0.08
done
printf 'Watch More? ( Yes / No ): '
read ans
case "$ans" in
n|N|no|NO) i=99;;
esac
done
334 :
名無しさん@お腹いっぱい。
2015/12/19(土) 01:54:54.83
328が来年のusenixでopenssl相当のシェルスクリプトの実装を発表する
335 :
名無しさん@お腹いっぱい。
2015/12/20(日) 02:31:00.77
それは宣言ですか?絶対当たらなそうな予言ですか?
とりあえずopenssl相当の処理なんて必要かな?
課題的には鯖から落とせればその相手が本物かどうかなんてどうでもいいんじゃない?
と言っても鍵は送る方が指定するみたいから肝心な暗号処理で手抜きは効かなそうだな。
処理自体は計算式で表現できたりする程度のものだけど、数がバカでかいからそのまま丸投げだと無理かも?
336 :
名無しさん@お腹いっぱい。
2015/12/20(日) 16:46:55.74
>>300です。
やっと、コンソールから2chにかきこできるようになりました。
ま、Perl使ってですが。。。
改行ちゃんと入るかな?
337 :
名無しさん@お腹いっぱい。
2015/12/20(日) 18:14:25.11
前スレで質問して、
「UNIXでもメモリクリーニングはできる」と回答をもらった者です。
そこで早速perlを使って、perl -e 'while (1) { fork; }'
を実行してみました。
で、メモリクリーニングはいつ終るのでしょうか?
念のため、PCケースを開けてみましたが、
メモリ表面の汚れは取れていませんでした。
やはりUNIXはメモリクリーニングに対応していないのでしょうか?
338 :
名無しさん@お腹いっぱい。
2015/12/20(日) 19:12:40.94
perl -e "fork while fork" &
339 :
名無しさん@お腹いっぱい。
2015/12/20(日) 21:35:35.99
>>336 cpanのどれ利用した?
それとも使ってない
340 :
名無しさん@お腹いっぱい。
2015/12/20(日) 22:33:07.03
quine
in computing, a program producing its complete source code as its only output without simply opening the source file of the program and printing the contents (such actions are considered cheating).
b=\' c=\\ a='echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a';echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a
341 :
名無しさん@お腹いっぱい。
2015/12/21(月) 16:40:57.79
>>337 表面はきれいに見えても、接続口が汚れてることはよくある。
接続部の汚れはなかなか落ちないから4ヶ月ぐらい待ってみて。
342 :
名無しさん@お腹いっぱい。
2015/12/21(月) 18:49:28.81
quine で fork bomb
b=\' c=\\ a='yes $( echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a ) | sh &';yes $( echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a ) | sh &
Quine Program
http://c2.com/cgi/wiki?QuineProgram 343 :
名無しさん@お腹いっぱい。
2015/12/21(月) 23:00:15.84
勉強でシンプルなものを作成しました
#!/bin/bash
while :
do
usr=`id | cut -d
344 :
名無しさん@お腹いっぱい。
2015/12/21(月) 23:01:19.62
勉強でシンプルなものを作成しました
#!/bin/bash
while :
do
usr=`id | cut -d" " -f 1 | sed -e "s/^.*(\(.*\)).*$/\1/g"`
echo -n -e "\033[s"
D=$((`tput cols` - 8))
tput cup 1 $D
COLOR=`tput setaf 4; tput smso`
NORMAL=`tput sgr0`
echo -n $COLOR$usr$NORMAL
echo -n -e "\033[u"
sleep 1
done
右上にユーザーを表示する単純なものです。
ログインユーザーでログインして実行したあとに、sudoでrootになっても右上にはログインユーザーが表示されたままとなります。
これは実行時のユーザーだからだと思うのですが、sudoでrootになった時にはrootに表示を変更する方法はありますでしょうか?
345 :
名無しさん@お腹いっぱい。
2015/12/21(月) 23:56:53.33
id -un
- or -
whoami
346 :
名無しさん@お腹いっぱい。
2015/12/22(火) 00:13:25.17
現在の tty で sudo を使っている場合、その user name を表示したい
とエスパー解釈した上で
usr=`id | cut -d" " -f 1 | sed -e "s/^.*(\(.*\)).*$/\1/g"`
の下にでもこれを挿入
if str=$( ps T -o user,comm | grep [s]udo )
then
usr=$( echo "$str" | cut -d ' ' -f 1 )
fi
347 :
344
2015/12/22(火) 00:15:04.92
>>345 回答ありがとうございます。
該当部分をid -unやwhoamiに変更しても状況に変化は見られませんでした。
何か間違った書き方をしてしまっているのでしょうか。
348 :
344
2015/12/22(火) 00:22:29.80
>>346 回答いただきありがとうございます。
こちらのほうで実現できました。
psの方から取得するということでしょうか。
whileループの中でidで取得していたので更新されると思っていたのですが
そうでもないようですね。
なぜかは理由はわかりませんが…。
回答いただきありがとうございました。
349 :
名無しさん@お腹いっぱい。
2015/12/22(火) 00:45:28.49
そのスクリプトをバックグラウンドで起動して ps Tf すると分かるかも
10995 pts/0 Ss 0:00 bash
21436 pts/0 S 0:00 \_ /bin/bash ./printUser.sh
8101 pts/0 S 0:00 | \_ sleep 1
8065 pts/0 S 0:00 \_ sudo sleep 10
8066 pts/0 S 0:00 | \_ sleep 10
8102 pts/0 R+ 0:00 \_ ps Tf
対話シェル bash の下でスクリプトが別プロセスで起動されています
sudo sleep 10 を起動していますが、これも別プロセスです
350 :
名無しさん@お腹いっぱい。
2015/12/22(火) 08:00:39.33
PROMPT_COMMAND参照する端末(gnome-terminalやlxterminalなど)だったら
それを使う手もある
以下の内容を適当なファイル(たとえば/etc/bash.display_user)に書いて
D=$((`tput cols` - 8))
POS="`tput cup 1 $D`"
COLOR="`tput setaf 4; tput smso`"
NORMAL="`tput sgr0`"
PROMPT_COMMAND='echo -ne "\033[s$POS${COLOR}${USER}${NORMAL}\033[u"'
/etc/bash.bashrcか自分の.bashrc、rootの.bashrcで
. /etc/bash.display_user
してやればいい
351 :
348
2015/12/23(水) 08:30:02.70
ID変わってますが348です。
その後の回答を、試してみていろいろとわかりました。
Linuxなどにおける動作で幾つか思違いしているところもあり勉強になりました。
ありがとうございました。
352 :
名無しさん@お腹いっぱい。
2015/12/23(水) 23:18:50.99
IDが変わったようには見えないが
353 :
名無しさん@お腹いっぱい。
2015/12/23(水) 23:40:21.98
ていうかIDが見えないが
354 :
名無しさん@お腹いっぱい。
2015/12/24(木) 04:08:04.27
2chMateなら見えるよ
355 :
名無しさん@お腹いっぱい。
2015/12/24(木) 12:24:50.59
本質的でないところでばかり実力を揮発するクラスタの皆さん!
コンニチワ
356 :
名無しさん@お腹いっぱい。
2015/12/24(木) 18:48:12.28
357 :
名無しさん@お腹いっぱい。
2015/12/24(木) 18:59:35.38
スレ違いすんません。
>>339 >>336です。
LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use HTTP::Cookies;
ggrば出ます。
スレURIの最後の数字列、タイトルから検索して常に最新の数字列を内で取得するようにして、現状、
echo "ほげほげ" | 2ch_put.pl $SURE
で、投稿できるようにしてみた。嵐はしてないよ。
358 :
名無しさん@お腹いっぱい。
2015/12/24(木) 19:23:37.34
>if str=$( ps T -o user,comm | grep [s]udo )
常に0のような気がするが、そうじゃないんだな。
str=aaa や str="" は0だけど、失敗すると1か。
勉強になりますた
359 :
名無しさん@お腹いっぱい。
2015/12/25(金) 00:19:36.63
360 :
名無しさん@お腹いっぱい。
2015/12/27(日) 12:03:43.83
=
>>290なんですけど
>>292の仕組みが理解できてないので誰か解説してくださいませんか?
いつファイルがうまくreadされるタイミングとか
それから関係ないんですけどsedの-iってPOSIX非準拠ですか?
361 :
名無しさん@お腹いっぱい。
2015/12/27(日) 12:23:52.45
-iは引数のあるなしで動かなかったりするな
362 :
名無しさん@お腹いっぱい。
2015/12/27(日) 15:36:01.26
>>360 いつって言ってもgrepがreadした時に読んでるのだが…。
たぶん分かってないのが、unixではファイルをオープンした状態でファイルを削除できるってこと
その場合ディレクトリエントリは消えるがファイル自体は残っているので
ファイルのread/writeは変わらず出来る
363 :
名無しさん@お腹いっぱい。
2015/12/27(日) 19:29:04.42
>>360 外のシェルがopenする
中のシェルでrmがunlinkする
中のシェルがopenしてfileができる
grepがreadしてwriteする
grepがexitしてどっちもcloseする
364 :
名無しさん@お腹いっぱい。
2015/12/27(日) 19:29:18.22
>>362 しかしエントリから消えたハードディスクのブロックは再利用可能な状態なわけですよね?
もしそうなら二回目にオープンしたとき領域が重なってしまうことはないのですか?
365 :
名無しさん@お腹いっぱい。
2015/12/27(日) 19:37:36.75
>>364 closeして誰も参照しなくなるまではi-nodeも含めて再利用されないよ
366 :
名無しさん@お腹いっぱい。
2015/12/27(日) 19:56:03.56
>>365 そうなのですか!初めて知りました
ありがとうございます!すっきりしましたよ!
367 :
名無しさん@お腹いっぱい。
2016/01/01(金) 11:20:57.19
368 :
名無しさん@お腹いっぱい。
2016/01/01(金) 22:44:41.53
a happy new yeah.
>>367 素晴らしい!
369 :
名無しさん@お腹いっぱい。
2016/01/02(土) 22:52:05.39
有難う!ファイルを書いた人は素晴らしいよね
370 :
名無しさん@お腹いっぱい。
2016/01/14(木) 11:46:10.89
質問です
テキストファイルだけのデータベースを作ろうと思ってます
どんなシェルスクリプトを書けばいいと思いますか
皆さんのお知恵をお貸しください
あとシス管系女子に登場するみんとちゃんのスリーサイズが分かりません
知っている人がいたら教えて下さい
よろしくお願いいたします
371 :
名無しさん@お腹いっぱい。
2016/01/14(木) 12:18:20.24
テキストファイルだけのデータベースってどんなん?
372 :
名無しさん@お腹いっぱい。
2016/01/14(木) 12:37:09.51
女だらけの水泳大会みたいなものだろ
373 :
名無しさん@お腹いっぱい。
2016/01/14(木) 13:49:41.31
Berkeley DB使え、とかそういう話?
374 :
名無しさん@お腹いっぱい。
2016/01/14(木) 19:07:54.47
人のボケつぶした上にダダスベリって最悪じゃね?
375 :
名無しさん@お腹いっぱい。
2016/01/14(木) 19:32:14.79
職場の開発環境がLinuxでcshなのですが
cshでいいリファレンスはありませんか?
ネットが使えないのでWebページは無理です。
376 :
名無しさん@お腹いっぱい。
2016/01/14(木) 20:23:34.08
定年間近の老人から口伝で受け継ぎましょう
377 :
名無しさん@お腹いっぱい。
2016/01/14(木) 22:27:43.69
changelogで日記書く人もいるしな
378 :
名無しさん@お腹いっぱい。
2016/01/14(木) 22:57:32.14
昔はC Shellフィールドガイドとかいう本が定番だったような
もう30年近く前のことだけど…
それにしても開発環境がcshでネットが使えないって、ある意味すごいと思うw
379 :
名無しさん@お腹いっぱい。
2016/01/14(木) 23:03:15.63
380 :
名無しさん@お腹いっぱい。
2016/01/14(木) 23:24:27.93
いまどきc shell使っているところってC言語でも使ってるの?
381 :
名無しさん@お腹いっぱい。
2016/01/14(木) 23:24:38.54
ネットが使えないのにアマゾン?
382 :
名無しさん@お腹いっぱい。
2016/01/15(金) 00:15:28.22
みんとちゃんは天使
383 :
名無しさん@お腹いっぱい。
2016/01/15(金) 11:42:41.05
384 :
名無しさん@お腹いっぱい。
2016/01/15(金) 14:57:47.22
ここにいる様な人たちとだけは仕事したくないな〜
385 :
名無しさん@お腹いっぱい。
2016/01/15(金) 15:21:01.14
>>375 マスタリングcshは目の前に転がってるが、他にも合った気がするが
みつからない。
386 :
名無しさん@お腹いっぱい。
2016/01/15(金) 15:29:47.22
みんとが、rm -rf で全消ししても許してあげるし、データリカバリの講義を、みっちりやったげる
ここの住人がやったら半殺し
387 :
名無しさん@お腹いっぱい。
2016/01/15(金) 15:51:51.83
データーリカバリーとデリヘルって似てるね
388 :
名無しさん@お腹いっぱい。
2016/01/15(金) 16:08:50.97
ディスカバリーチャンネルとデタリカバリーチャンネルも似てるね。
389 :
名無しさん@お腹いっぱい。
2016/01/15(金) 21:52:13.77
20年少し前だと、もう csh でスクリプトを書かない事を進められた
SunOS でログインシェルは、csh がデフォで tcsh に切り替え
390 :
名無しさん@お腹いっぱい。
2016/01/15(金) 21:54:24.42
☓ 進められた
391 :
名無しさん@お腹いっぱい。
2016/01/15(金) 22:29:29.27
cshがスクリプトに向かないのは有名だね。
でも短いスクリプトなら、配列が使えたりとかshより便利なケースがないでもない
>>375 manは入ってないの?
392 :
名無しさん@お腹いっぱい。
2016/01/17(日) 00:38:52.85
shって配列使えないんだ?
bashは使えるよね、二次元配列も
393 :
名無しさん@お腹いっぱい。
2016/01/17(日) 13:36:42.66
394 :
名無しさん@お腹いっぱい。
2016/01/17(日) 15:16:57.76
395 :
名無しさん@お腹いっぱい。
2016/01/21(木) 07:44:44.20
396 :
名無しさん@お腹いっぱい。
2016/01/21(木) 09:51:46.27
sed -iとかな
397 :
名無しさん@お腹いっぱい。
2016/01/21(木) 21:38:36.72
オプションをある程度統一してほしいよね
-hでヘルプ、-vでバージョン見るくらいは統一してほしい
398 :
名無しさん@お腹いっぱい。
2016/01/22(金) 09:43:42.93
399 :
名無しさん@お腹いっぱい。
2016/01/22(金) 10:23:07.08
grep -v してるスクリプトが動かなくなったりしたら嫌だな
400 :
名無しさん@お腹いっぱい。
2016/01/22(金) 21:11:00.15
痛みが大きすぎて統一失敗は無理か
今後も長く使われて行く事を考えると、ある程度統一してほしいなあ
特定の環境変数が定義されている時に限り
統一されたオプションにするとか
401 :
名無しさん@お腹いっぱい。
2016/01/23(土) 00:27:07.84
ロングオプションを使い給え。
402 :
名無しさん@お腹いっぱい。
2016/01/23(土) 16:57:11.77
ロングオプションって、ロング過ぎてなんだかなあ
でも今度から意識してみよっと
ちょっと暇つぶし
list of coreutils (Linux, depends dpkg)
dpkg -L coreutils | sed -ne '\@bin/@s@^.*bin/@@p' | xargs man -f
whatis $( which who )
403 :
名無しさん@お腹いっぱい。
2016/01/23(土) 19:06:44.06
404 :
名無しさん@お腹いっぱい。
2016/01/23(土) 19:21:27.03
405 :
名無しさん@お腹いっぱい。
2016/01/24(日) 00:23:36.03
>>401でもう既出だし
GNU系コマンド以外には通用しないケースある
406 :
名無しさん@お腹いっぱい。
2016/01/28(木) 05:58:34.66
407 :
名無しさん@お腹いっぱい。
2016/01/28(木) 06:13:04.21
shufって何?
408 :
名無しさん@お腹いっぱい。
2016/01/28(木) 08:36:56.70
GNU coreutilsに入ってる、行単位で中身をランダムに入れ替えるコマンド。
BSD系ならsort -Rで代替できるかな。
409 :
名無しさん@お腹いっぱい。
2016/01/28(木) 09:53:14.50
動いてるシェルスクリプトをkillしたいんだけど
以下のコマンドより冴えた方法ある?
pgrep -f 'sh script.sh' | xargs kill
これで不満なのはシェルスクリプトが実行されてなかった場合
USAGEが出ちゃうところくらい
410 :
名無しさん@お腹いっぱい。
2016/01/28(木) 11:04:04.77
pgrepがあるならpkillもあるでしょ
411 :
名無しさん@お腹いっぱい。
2016/01/28(木) 11:35:34.21
pkillだとshを殺してしまうことになって都合が悪いです〜
412 :
名無しさん@お腹いっぱい。
2016/01/28(木) 11:50:19.16
pkill -f 'sh script.sh'
413 :
名無しさん@お腹いっぱい。
2016/01/28(木) 16:03:14.05
ありがとう
帰ってから試してみる
414 :
名無しさん@お腹いっぱい。
2016/01/30(土) 08:10:48.00
tputで表示させたいのですが改行されません
#!/bin/sh
while :
do
# Get Time
time=
415 :
名無しさん@お腹いっぱい。
2016/01/30(土) 08:14:07.46
すいませんダブルクォーテーションよりしたが表示されませんでした
time=$(tail -n4 check_date.dat)
COLOR=`tput setaf 5; tput smso`
echo -n -e "\033[s"
tput cup ${TCUP_CNT}
NORMAL=`tput sgr0`
echo -n $COLOR$time$NORMAL
echo -n -e "\033[u"
# Interval
sleep 1
done
check_date.dat
tokyo 23:23:23
Mexco 12:12:12
frans 05:50:05
といったデータとなります。
取得方法はいくつかかえてみましたがダメでした。
tputで改行表示する方法があればアドバイスいただけると助かります。
416 :
名無しさん@お腹いっぱい。
2016/01/30(土) 09:44:44.08
tput についていちいち覚えていないので適当でスマンが
気になる点を上げておいた
echo -n $COLOR$time$NORMAL
だと、エスケープされていないので、$time に含まれる改行文字がスペースに置換される
echo -e は bash だろうから、#!/bin/bash にする
新しく書くスクリプトでは `...` よりも $(...) を使うのが望ましい
ループ中で、変わらない変数を定義しない
(確か sgr0 がリセットかなんかで変わらなかったとして)
417 :
名無しさん@お腹いっぱい。
2016/01/30(土) 09:50:10.42
訂正
> echo -e は bash だろうから、#!/bin/bash にする
#!/bin/sh のままで printf を使う方が良いかな
418 :
名無しさん@お腹いっぱい。
2016/01/30(土) 09:50:11.74
全く案が思いつかないので教えてください。
smb上のNASにあるファイルをSDカードにコピペしたいけど、コピーする順番がファイル名昇順でないと不具合が出るので、エクスプローラーではダメなんです。
cpコマンドにNASにあるファイルを指定する方法を教えてください。
419 :
名無しさん@お腹いっぱい。
2016/01/30(土) 10:03:02.46
ls でソートされなければ、
find sort awk cut xargs 等を組み合わせる
420 :
名無しさん@お腹いっぱい。
2016/01/31(日) 10:50:47.29
質問です。
topコマンドやuptimeコマンドで得られるload average
ですが、特定の顧客向けにWebで情報ながしてるサーバーの
それが、普通で10.00、ひどいときには30.00とかになったり
します。
このload average、つまり平均負荷が無名数ですが、何を表して
いると考えたらよいでしょうか? dBって事はないですよね。。。
421 :
名無しさん@お腹いっぱい。
2016/01/31(日) 11:10:19.25
422 :
名無しさん@お腹いっぱい。
2016/01/31(日) 14:36:00.53
423 :
名無しさん@お腹いっぱい。
2016/01/31(日) 16:34:32.83
>>421 >>422 ありがとうございます。
>ロードアベレージが1以下であれば正常といわれていたが、
>最近のマルチコアCPUにおいては読み方が変わってきている。
なるほど、、、わかったようなわからんような。。。どう変わってきてる
か、知りたい。。。w
ま、いずれにしても、高負荷状態が続いているとみるべきなんですね。
424 :
名無しさん@お腹いっぱい。
2016/01/31(日) 21:07:22.79
425 :
名無しさん@お腹いっぱい。
2016/01/31(日) 21:09:13.08
426 :
名無しさん@お腹いっぱい。
2016/02/02(火) 07:53:41.39
>>424 さんくすです。
2コアだから、負荷は半分にした値を考えておけばいいのかな。
>注目するのは、待ちタスク数を数え上げるのにすべてのキューを見て
>合計する一方、その後出力するまでに CPU の数でその値を割ったりは
>していない、という点です。...ロードアベレージは割り算をしていない
427 :
名無しさん@お腹いっぱい。
2016/02/02(火) 07:57:31.80
428 :
名無しさん@お腹いっぱい。
2016/02/02(火) 09:57:29.33
待ち行列とかキューとかの意味がわからずサーバー管理やってるんならな
OSのしくみをほんの少しでも勉強したほうがいいよ
特にタイムシェアリングとかプロセス管理のあたり
429 :
名無しさん@お腹いっぱい。
2016/02/02(火) 11:43:42.95
>>426 別に割る必要はないと思うけど
どれくらい溜まってるかを知りたいならだけど
430 :
名無しさん@お腹いっぱい。
2016/02/02(火) 17:43:21.96
431 :
名無しさん@お腹いっぱい。
2016/02/02(火) 18:59:58.26
432 :
名無しさん@お腹いっぱい。
2016/02/02(火) 20:16:40.85
言語はあくまで道具
何をしたいかによる
433 :
名無しさん@お腹いっぱい。
2016/02/02(火) 21:43:18.36
>>432 レスありがとうございました。マルチってそんなにいけないことなん
ですね。失礼しました。
5年以上ぶりぐらいに2chに戻ってたんで驚いてます。
板にもよるのでしょうが。
こちらだけにすればよかったです。
432さんのおしゃる通りだと思います。自分にとってはコマンド
利用してみたいので、まずはbashにしようかなと思ってます。
434 :
名無しさん@お腹いっぱい。
2016/02/02(火) 22:48:53.08
マルチ禁止は2chだけのルールではなく20年以上前のRFCにさえ書かれている基本中の基本
435 :
名無しさん@お腹いっぱい。
2016/02/02(火) 23:02:32.01
おまえら叩きすぎw
329 名前:324[sage] 投稿日:2016/02/02(火) 21:44:34.24 ID:KBWlYUE4 [2/2]
失礼しました。
ルール知りませんでした。5年以上2chやっていなかったので。
330 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 22:53:07.59 ID:tNcqGKOV
>>329 5年前でもマルチはアカンかったでしょ
331 名前:login:Penguin[] 投稿日:2016/02/02(火) 22:54:56.17 ID:9nG661Lj [2/2]
2chに限らずどこでも嫌われるでしょ
332 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 23:00:54.39 ID:ZV8eeIqB [2/2]
本人はそう思ってないんだろう
死ね
436 :
名無しさん@お腹いっぱい。
2016/02/03(水) 00:07:58.02
たたかれても懲りずに勉強してね
スクリプトを色々と探してきて、長さ順にリストアップする
{ IFS=:; find $PATH; } | xargs readlink -e | xargs file | grep ' script' |
while IFS= read -r line
do echo "$(
echo "$line" | cut -d : -f 1 | xargs wc -l
)$(
echo "$line" | cut -d : -f 2
)"; done |
sort -k1gr,1
437 :
名無しさん@お腹いっぱい。
2016/02/03(水) 06:35:39.85
だいたい、bashとpythonどっちかっていう問題か?ww
どっちも並行してやるべき。
438 :
名無しさん@お腹いっぱい。
2016/02/04(木) 06:50:05.93
『20年動く』本読んだけどひたすら方言に配慮する話書いてあった
もうpythonでいいや
439 :
名無しさん@お腹いっぱい。
2016/02/04(木) 08:44:03.15
>>438 pythonは後付けのなので、そのうちなくなるかもしれません。
Windowsにはそういうものがありました。
440 :
名無しさん@お腹いっぱい。
2016/02/04(木) 08:55:41.67
なくならないにしても、python2のスクリプトのかなりがpython3で動かなくなるよ
441 :
名無しさん@お腹いっぱい。
2016/02/04(木) 09:06:11.16
pythonはなくなってもUNIXは困らない。
442 :
名無しさん@お腹いっぱい。
2016/02/05(金) 01:28:36.41
>>441 vimの拡張にpythonが採用されてることを知らないのか…
443 :
名無しさん@お腹いっぱい。
2016/02/05(金) 02:35:34.81
POSIXにvimもpythonも入って無いしな
444 :
名無しさん@お腹いっぱい。
2016/02/05(金) 02:49:11.38
UNIX開発にふつーにVIM使われてるぞ
445 :
名無しさん@お腹いっぱい。
2016/02/05(金) 04:13:16.68
特定のアプリケーションが使っているから、OSに必要という理屈が分からない。
446 :
名無しさん@お腹いっぱい。
2016/02/06(土) 04:39:26.36
>>438 方言覚えるのとPython覚えるの、労力そんなに違うか?
447 :
名無しさん@お腹いっぱい。
2016/02/06(土) 06:08:30.34
シェルスクリプトはOSの一部だからな。
pythonとは格が違う。
448 :
名無しさん@お腹いっぱい。
2016/02/06(土) 09:18:43.54
#!/usr/bin/shと書いてもbashが走るこんな世の中じゃ
449 :
名無しさん@お腹いっぱい。
2016/02/06(土) 17:24:54.45
#!/usr/bin/shと書いてシェルスクリプトを名乗るのか。
450 :
名無しさん@お腹いっぱい。
2016/02/06(土) 18:52:59.16
>>448 bashがbshのマネをする変なスクリプトたがら推奨しない。
451 :
名無しさん@お腹いっぱい。
2016/02/06(土) 18:54:27.39
452 :
名無しさん@お腹いっぱい。
2016/02/06(土) 19:55:26.03
本物と同じ名前の機能の違うコマンドを検索で優先されるディレクトリに置いちゃってドヤ顔する
バッドノウハウ使いの老害は早く死んで欲しい
453 :
名無しさん@お腹いっぱい。
2016/02/06(土) 20:35:47.85
大丈夫、そんな人はいない
454 :
名無しさん@お腹いっぱい。
2016/02/06(土) 21:23:44.47
/bin じゃなくて /usr/bin なのか?という話だろ
455 :
名無しさん@お腹いっぱい。
2016/02/07(日) 04:25:51.93
>>454 /usr/binと/binは基本的に一緒だが、環境によっては違うんじゃないの?
456 :
名無しさん@お腹いっぱい。
2016/02/07(日) 12:45:47.23
/usrを別パーティションにしてた頃の名残だよね
457 :
名無しさん@お腹いっぱい。
2016/02/07(日) 18:02:30.90
/sbinまでは認めてやっても良い
458 :
名無しさん@お腹いっぱい。
2016/02/07(日) 19:26:38.34
Linuxディストリの一部やSolarisではすべて/usrに移動してる(usr mergeまたはusr moveと呼ぶ)
/binと/sbinはシンボリックリンクで残ってる
459 :
名無しさん@お腹いっぱい。
2016/02/08(月) 08:20:49.74
いっそ、bashをオブジェクト指向に進化させれば、
pythonなぞいらなくなる
460 :
名無しさん@お腹いっぱい。
2016/02/08(月) 10:14:57.97
全角だとバカにしか見えないのは何故だ?
461 :
名無しさん@お腹いっぱい。
2016/02/08(月) 10:31:10.92
462 :
名無しさん@お腹いっぱい。
2016/02/08(月) 10:49:58.88
新聞社の方でしょう
463 :
名無しさん@お腹いっぱい。
2016/02/08(月) 12:25:26.78
綺麗な見た目に気を遣って作られたプロポーショナルフォントだと全く気にならない
幅が広けりゃいいんでしょ的なやっつけフォントや固定幅フォントを使って表示してると
バランスが悪いのでそうなる
464 :
名無しさん@お腹いっぱい。
2016/02/08(月) 12:34:34.64
465 :
名無しさん@お腹いっぱい。
2016/02/08(月) 13:02:09.16
shebang 行は、種類を名乗るといえば名乗っているけれど、
実際には、実行するコマンドラインを指定するもの
以下、補足
例えばこのスクリプトで試すと
$ cat ~/src/test/script
#!../bin/echo "hoge"
'fuga'
$ pwd
/usr
$ ~/src/test/script 'arg 1' "arg 2"
"hoge" /home/anonymous/src/test/script arg 1 arg 2
上では、結果的に
相対パス/echo "hoge" 引数0 引数1 引数2
が実行された結果が印字されている
普通に #!/bin/sh なスクリプトだと、結果的に実行されるのは次
/bin/sh path/to/スクリプト名 引数1 引数2 ...
466 :
名無しさん@お腹いっぱい。
2016/02/08(月) 13:23:29.92
>>465 shebangが種類を名乗るって何のこと?
そのスクリプトを処理するインタプリタを(引数込みで)指定する
以外の説明みたことないけど
467 :
名無しさん@お腹いっぱい。
2016/02/08(月) 15:38:21.12
>>466 >>449 !/usr/bin/shと書いてシェルスクリプトを名乗るのか。
>>451 スクリプトの種類を名乗る
>>465 shebang 行は、種類を名乗るといえば名乗っているけれど、
468 :
名無しさん@お腹いっぱい。
2016/02/08(月) 17:11:40.36
オプションも渡せるよ。
#!/usr/bin/bash -x
とかね。
469 :
名無しさん@お腹いっぱい。
2016/02/08(月) 20:55:16.08
>>468 それなら俺もお前も大体の奴が知ってる。
470 :
名無しさん@お腹いっぱい。
2016/02/08(月) 23:06:27.57
一個だけしか渡せないのは意外と知られていない
471 :
名無しさん@お腹いっぱい。
2016/02/09(火) 00:18:04.86
変数に含まれる記号で質問です。
curlで、サーバに置いてあるファイルを削除したいのですが、
curl -Q "DELE a.txt" host.sample.com
curl -Q 'DELE a.txt' host.sample.com
これだと動きました。
スクリプトで回したいときなどで変数に格納した場合で、
string="-Q 'DELE a.txt'"
curl ${string} host.sample.com
これだと、-Q以降の「 ”〜〜〜” 」で囲われた引数が伝わらないようで、動きませんでした。
> DELE
< 501 Invalid number of arguments
と返答がありました。
「"」そのものや「'」を変数で伝えるのは、一般的にどのように記述すればよいでしょうか。
記号で検索しても、なかなか情報が出ず、ヒントをお願いできればと思います。
472 :
名無しさん@お腹いっぱい。
2016/02/09(火) 02:34:23.06
>>471 curl "-Q 'DELE a.txt'" host.sample.com
ってことじゃん。
コマンドオブションが引数扱いってわけですね。
473 :
名無しさん@お腹いっぱい。
2016/02/09(火) 06:18:16.59
string="-Q 'DELE a.txt'"
eval curl ${string} host.sample.com
あるいは
set x -Q 'DELE a.txt'
shift
curl "$@" host.sample.com
474 :
名無しさん@お腹いっぱい。
2016/02/09(火) 06:31:19.45
書いている内に、別の解答が...しかも set x; shift の方が良い
とりあえず貼っておく
eval を使う
展開されたくない所は、何も考えずにシングルクォートしておく
$ set -vx #とりあえずデバッグ用に
$ opt471="-Q 'DELE a.txt'"
$ sh -c 'for arg; do echo "$arg"; done' parseArgs ${opt471} #質問時の状態
$ eval 'sh -c '\''for arg; do echo "$arg"; done'\'' parseArgs '${opt471}
set も使う
$ eval set -- ${opt471}
$ sh -c 'for arg; do echo "$arg"; done' parseArgs "$@"
bash の配列を使っても良い
$ opt471=(-Q 'DELE a.txt')
$ bash -c 'for arg; do echo "$arg"; done' parseArgs "${opt471[@]}"
475 :
名無しさん@お腹いっぱい。
2016/02/09(火) 12:13:30.71
とりあえず set -- も POSIX なんだけど
autoconf では set x ...; shift をすすめている
少し訂正
eval の際のクォートが抜けていた。連続した空白等で違いが出る
sh -c だと見難いので、function で書きなおした
$ parseArgs () { i=0; for arg; do echo "arg[$((i+=1))]: $arg"; done; }
$ opt471="-Q 'DELE (spaces) a.txt'"
$ eval parseArgs "${opt471}"
$ eval set -- "${opt471}"
$ parseArgs "$@"
ついでにIFS を使うもの
$ LF='
'
$ opt471='
-Q
DELE a.txt
'
$ IFS=$LF; parseArgs $opt471 'another option' 'more...'
476 :
名無しさん@お腹いっぱい。
2016/02/09(火) 17:36:27.79
477 :
名無しさん@お腹いっぱい。
2016/02/09(火) 19:11:23.15
スクリプトの外部からやって来た文字列をエバると危険
478 :
名無しさん@お腹いっぱい。
2016/02/09(火) 20:55:40.83
個人的には、host.sample.comにコマンドを渡す
curl -Q "$*" host.sample.com
を関数かスクリプトにするかなぁ
単独でも使えそうだし
479 :
名無しさん@お腹いっぱい。
2016/02/09(火) 23:45:01.02
ごちゃごちゃ書いてしまったので、まとめてみる
結局の所
変数からクォートを考慮して単語分割するには、eval を使う
配列(もどき)に入れるには set か val=(...) もしくは改行区切り等
eval 無しだと、sed perl ruby 辺りで自力で単語分割
簡単なものなら xargs も使えるか
480 :
名無しさん@お腹いっぱい。
2016/02/11(木) 07:29:09.80
午前1時に
cu -l /dev/ugen0.2 > 160211.log
のコマンドを開始し、
23時間後の午前0時に停止する、というシェルスクリプトを作りたいと思っています。
ログファイルの名前は午前1時の時点の日付が入ります。
ここで質問なのですが、
指定した時刻でコマンド(cu)の起動、停止をするにはどうすれば良いのでしょうか?
OS:FreeBSD10.2-RELEASE
シェル:sh
です。
481 :
名無しさん@お腹いっぱい。
2016/02/11(木) 09:25:45.48
482 :
名無しさん@お腹いっぱい。
2016/02/11(木) 13:08:07.53
>>481 ありがとうございます!!
これで幸せになれます!!
483 :
480
2016/02/12(金) 08:51:56.08
シェルスクリプトでcuのプロセスをkillしようとしたがうまくいかなんだ・・・。
結局、
・起動はcron
・cuからminicomに変更
・minicomのソフト改造
・ログファイルを設定なしで保存するように改造
・時間を見て終了するように改造
・タイムスタンプを設定なしでつけるように改造
で落ち着きそう。
うーんせっかくの有休だが、午前中はFreeBSDになりそうだ。
484 :
名無しさん@お腹いっぱい。
2016/02/12(金) 09:40:24.87
意味がわかんないけど普通にコマンドラインからkillしてもkillできないの?
485 :
名無しさん@お腹いっぱい。
2016/02/12(金) 09:42:07.41
cuはSIGHUPで殺すんじゃ無かったかな
うろ覚えだけど
486 :
名無しさん@お腹いっぱい。
2016/02/12(金) 10:21:20.12
cuを起動/停止するスクリプトを書いて
それをcronから呼び出したらどうかな
起動する時はrun_cu start、停止する時はrun_cu stopみたいな形で
で、起動する時に
cu -l /dev/ugen0.2 > 160211.log &
echo $! > /var/run/lock/run_cu.lock
とやっておいて、停止するときは
kill -HUP $(cat /var/run/lock/run_cu.lock)
みたいにすれば(要するに/etc/init.dにあるデーモンの起動スクリプトみたいな感じ)
487 :
名無しさん@お腹いっぱい。
2016/02/12(金) 11:56:41.13
いまいちよくわからん
スクリプトでプロセスIDが調べられないとかじゃないよね?
あとユーザが違っててrootのプロセスkillしようとしてるとか?
488 :
名無しさん@お腹いっぱい。
2016/02/12(金) 13:36:32.98
cuは送信プロセスと受信プロセスがいるから完全に殺せてないのでは
489 :
480
2016/02/12(金) 20:39:39.88
先ほど完了しました。
minicomの改造と、ログファイルの処理ソフト作るのに丸一日かかった。
1日vi使ってたから2chに書き込むのもj,k,l,hでカーソル移動したくなる。
>>484>>487
>>488 うん・・・。できたり、できなかったり。
なんかcu -l /dev/ttyU0 > /unko/tinko/manko/log.txtを実行して、
ps ax | grep cu | grep -v grep
で、2つ出てきたり、出てこなかったり。
で、2つ出る場合には片方をkillしようとするとそんなプロセスないとか言われたり。
なんかもう、良く分からなくて投げ出しました。
>>485 SIGHUP知りませんでした。
minicomのソースの終了処理の中に
SIGHUPなんちゃらと書いてあったので、多分それが正解ですね。
いやぁ、SIGHUPで四苦八苦しました。
>>486 それスマートですね。私が作ったやつよりもw
ただ、まぁ、minicom使ったことでタイムスタンプ入れれたので、良しとします。
490 :
480
2016/02/12(金) 20:42:48.13
ちなみに何を作っていたかというと、温度計測システムです。
Xbeeってやつに温度センサーをつないで、無線で親機のXbeeに飛ばして、
親機からPCにシリアルで温度センサーの値を送信するシステムです。
で、ログファイルをsambaにおいておいて、別のPCから見る感じです。
テスト用に温度センサーは1個ですが、部屋中に設置する予定です。
491 :
名無しさん@お腹いっぱい。
2016/02/13(土) 00:30:17.31
viを使っている人はシェルのキーバインドもvi風?
492 :
名無しさん@お腹いっぱい。
2016/02/13(土) 02:17:17.74
493 :
名無しさん@お腹いっぱい。
2016/02/13(土) 02:27:10.99
ちなみに自分は絶対止めたいときは複数回killする
やり方はループするなりsleepで間隔あけたりまちまちだけど
以下cuのマニュアルだけど仕様を理解するって大事だね
> リ モートシステムとの間でコネクションが設定された場合、 cu
> は 2 プロセスを fork します。1 プロセスは、ポートからの デ
> ー タ読みだしと端末へのデータ書き込みを行ない、もう 1 プロ
> セスは、端末からのデータ読み出しとポートへのデータ書き込み
> を受け持ちます。
494 :
名無しさん@お腹いっぱい。
2016/02/13(土) 21:20:59.35
bashで調べてもわからないので質問させてください。
次のような記述のとき、
この%はどのように解釈したらいいのでしょうか?
OLDPATH=(../help/me)
NEWPATH = $(OLDPATH:../%=./%_fuga)
文字列置換に使う場合と違うようですし、
調べても文字列置換以外に定義がでてきませんでした。
よろしくお願いします。
495 :
名無しさん@お腹いっぱい。
2016/02/13(土) 22:07:33.70
>>494 [user@f23 ~]$ OLDPATH=(../help/me)
[user@f23 ~]$ NEWPATH = $(OLDPATH:../%=./%_fuga)
bash: OLDPATH:../%=./%_fuga: そのようなファイルやディレクトリはありません
bash: NEWPATH: コマンドが見つかりませんでした...
496 :
名無しさん@お腹いっぱい。
2016/02/13(土) 22:26:10.26
http://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html より
${parameter%word}
${parameter%%word}
パターンに後方一致した部分を取り除く。 word が展開され、パス名展開の場合と同じようなパターンを作ります。
このパターンが parameter を展開した値の末尾の部分とマッチする場合、展開結果は parameter を展開した値から
最短一致パターン (``%'' の場合) または最長一致パターン (``%%'' の場合) を取り除いたものになります。 parameter
が @ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして
得られます。 parameter が @ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全て
の要素に順番に適用され、 展開結果はリストとして得られます。
$()じゃなくて${}だんべな。
私は良くわかんない。後は詳しい人にまかせた。
497 :
名無しさん@お腹いっぱい。
2016/02/13(土) 22:38:34.46
>>495 なんでOLDPATH=の閉じカッコを半角に、そこだけ改変しちゃったの?
498 :
名無しさん@お腹いっぱい。
2016/02/14(日) 00:07:40.09
499 :
名無しさん@お腹いっぱい。
2016/02/14(日) 04:49:47.49
仕事で改修やってるんだろ
500 :
名無しさん@お腹いっぱい。
2016/02/14(日) 06:05:22.06
どのように解釈したらいいも何も、NEWPATH の次にスペースが有る時点でおかしい
例示を見直して提示し直さない限り、どうにもならんな
501 :
名無しさん@お腹いっぱい。
2016/02/14(日) 08:13:57.65
なんの脈絡もない質問に答える義理はない
金払って仕事してもらえ
502 :
名無しさん@お腹いっぱい。
2016/02/14(日) 09:11:58.95
OLDPATH:../%=./%_fuga
という相対パスで指定されたファイルを実行し、その結果の前に=をおいてNEWPATHというコマンドを実行する
503 :
名無しさん@お腹いっぱい。
2016/02/14(日) 14:58:59.31
>>494 Makefile 全体とは言わんがもっと前後貼れよ
504 :
名無しさん@お腹いっぱい。
2016/02/15(月) 05:51:37.58
>>494 >>503 ここを釣り堀にする奴がいるとは思わなかったwww
そういえば Makefile を書いている時は似てるなあって思ったな
505 :
503
2016/02/17(水) 23:08:47.15
506 :
名無しさん@お腹いっぱい。
2016/02/23(火) 08:45:41.83
BASH4.2 $> echo $((1 == 2))
0 #!!!
BASH4.2 $> echo $((1 != 2))
1 #!!!
BASH4.2 $> a=0
BASH4.2 $> echo $a
0
BASH4.2 $> echo $((a++))
0 #?
BASH4.2 $> echo $((a++))
1
BASH4.2 $> echo $((a++))
2
BASH4.2 $> echo $((a++))
3
BASH4.2 $> echo $((a--))
4 #!!!!
BASH4.2 $> echo $((a--))
3
507 :
名無しさん@お腹いっぱい。
2016/02/23(火) 10:11:09.22
不思議なことは何も起きていないな
シェルスクリプトの真偽値の表現と後置演算子の意味くらい覚えておけ
508 :
名無しさん@お腹いっぱい。
2016/02/24(水) 08:11:13.70
$a=0; echo $((a++))
0
$ a=0; echo $((++a))
1
509 :
名無しさん@お腹いっぱい。
2016/02/24(水) 16:41:23.49
なんら不思議でない
510 :
名無しさん@お腹いっぱい。
2016/02/25(木) 07:06:49.38
$ a=0; echo $(( ´∀`))
( ´∀`): コマンドが見つかりません
511 :
名無しさん@お腹いっぱい。
2016/02/26(金) 20:53:20.57
かわええ
512 :
名無しさん@お腹いっぱい。
2016/02/26(金) 22:13:00.20
うまくクオーテーション回避したね
513 :
名無しさん@お腹いっぱい。
2016/02/26(金) 22:23:19.78
$ a=0; echo $((a++++++a))
2
514 :
名無しさん@お腹いっぱい。
2016/02/26(金) 22:30:46.28
$ a=0; echo $((a+ +++++a))
1
$ a=0; echo $((a+++++ +a))
1
$ a=0; echo $((a+ ++++ +a))
0
515 :
名無しさん@お腹いっぱい。
2016/02/27(土) 19:01:27.83
こういう解釈かな?
$ bash -c 'a=0; echo $(( ( a++ ) + +( ++a ) ))'
2
シェルによって解釈が色々みたいだけど
$ ksh -c 'a=0; echo $((a++++++a))'
ksh: a++++++a: assignment requires lvalue
$ dash -c 'a=0; echo $((a++++++a))'
0
516 :
名無しさん@お腹いっぱい。
2016/02/29(月) 18:15:35.93
ここにいる人たちは誰かのシェルスクリプト見て
普通のプログラミング言語のようにループして処理してたら
ぷっって笑っちゃう方?
517 :
名無しさん@お腹いっぱい。
2016/02/29(月) 18:57:25.92
え? ループ処理しちゃ駄目なの?
518 :
名無しさん@お腹いっぱい。
2016/02/29(月) 19:53:29.46
>>516 が言う「ループ」とは変数のインクリメント((++i))とかのことかと。
519 :
名無しさん@お腹いっぱい。
2016/02/29(月) 20:08:57.21
>>516 コマンドの内部でループしているのと、スクリプトのループとは速度が違うし
また記述も単純になるから、自然とそうなるだけだし
スクリプトで人を笑ったりとかはしないかな
520 :
名無しさん@お腹いっぱい。
2016/02/29(月) 20:36:41.53
どんなループだよ
521 :
名無しさん@お腹いっぱい。
2016/03/01(火) 12:43:43.79
それより i=`expr $i + 1`が笑われないか心配。普通だよね(´・ω・`)
522 :
名無しさん@お腹いっぱい。
2016/03/01(火) 12:55:47.44
[ "z$1" = "ztest" ]
とかも笑われてるの?
523 :
名無しさん@お腹いっぱい。
2016/03/01(火) 13:57:23.36
524 :
名無しさん@お腹いっぱい。
2016/03/01(火) 20:21:04.65
>>522 じゃ、どう書くと笑われないと思うんだ?
でも、最近はcaseで比較する事が多い。個人的に。
525 :
名無しさん@お腹いっぱい。
2016/03/02(水) 00:02:25.01
>>521 http://www.shellcheck.net/ SC2006 Use $(..) instead of legacy `..`.
SC2003 expr is antiquated. Consider rewriting this using $((..)), ${} or [[ ]].
SC2086 Double quote to prevent globbing and word splitting.
526 :
名無しさん@お腹いっぱい。
2016/03/25(金) 00:25:36.80
bash上でwhich sourceってコマンド打った時にsourceコマンドが見つからないって怒られるのが謎だったんですが、sourceコマンドはbashの組み込み関数だと聞きました。
ただdeclare -Fでもsourceって関数は定義されてないようなんですがどこで定義されているかわかりますか?
527 :
名無しさん@お腹いっぱい。
2016/03/25(金) 01:32:44.95
528 :
名無しさん@お腹いっぱい。
2016/03/25(金) 01:59:04.54
529 :
名無しさん@お腹いっぱい。
2016/03/25(金) 02:11:33.46
$ type source
source is a shell builtin
$ help source
source: source filename [arguments]
Execute commands from a file in the current shell.
定義はソースコードの bash-4.3/builtins/source.def にある
source_builtin 関数
530 :
名無しさん@お腹いっぱい。
2016/03/25(金) 05:01:14.68
531 :
名無しさん@お腹いっぱい。
2016/04/02(土) 18:56:42.48
>>521 ただ、そういう硬い書き方してる人のスクリプトは、bashの脆弱性が見つかった時でも
/bin/bash を /bin/ksh とかで代用できるからなんともいえん。
少なくとも i++ よりはポータブルだし
532 :
名無しさん@お腹いっぱい。
2016/04/08(金) 08:53:02.48
>>521 ほんの数年前までそれ以外の書き方をすると怒り出す、
純正シェルジジイが粘着してたんだが、リアル墓場行ったかな。喜ばしい事だ
533 :
名無しさん@お腹いっぱい。
2016/04/09(土) 20:08:53.43
我がスレ差分メール配送システムが2ヶ月くらい止まってたかのように
見えたのは、2ch鯖が変わっていたせいであったかw
今頃きづいたという。。。
534 :
名無しさん@お腹いっぱい。
2016/04/12(火) 18:45:07.55
初心者です。
こんどbashをやることになったのですが、シェルスクリプトの書いて覚える系のいい書籍はないでしょうか?
馬鹿なので読んだだけでは理解できないので手を動かすタイプのを教えてください。
535 :
名無しさん@お腹いっぱい。
2016/04/12(火) 19:26:46.24
536 :
名無しさん@お腹いっぱい。
2016/04/12(火) 20:11:06.76
よろしくおねがいします。シェル初心者です。わかんないので、
いろんなサイトに書き込みしても
いろいろ うるさく 叱られます。これがユニックスの流儀なんでしょうか?
とくに言われることは「スクリプトに直接関係ないこと」は書き込むな、と言うことです。
「何でも教えてくれや」「ケチケチすんなよ」「初心者には親切にせろ」
ひとことで言うと これがおれの主張です。シンプルです。
なんで?現実生活でヘイコラしてるのに、ネット上まで、ネコかぶったり
しないといけないのか?とんと理解できません。
何より、バッシュとかGシェルとか、詳しいのが、なんでエライのか?
ここが根本的にわからん。
少し誇張した部分もありますが、素直な気持ちを書きました。
537 :
名無しさん@お腹いっぱい。
2016/04/12(火) 20:22:51.31
>>535 ありがとうございます。明日立ち読みしてみます。
>>536 あなたより大きい会社にいると思います。30前にして年収800万です。
ずっとWindowsだったのでわからないんですよね。
538 :
名無しさん@お腹いっぱい。
2016/04/12(火) 20:25:20.93
>>536 得意分野などで教える立場になった時、同じこと思うだろうか。
539 :
名無しさん@お腹いっぱい。
2016/04/12(火) 20:38:02.87
今の大きい会社って30前でもそんなモンなの?
小さい会社だと1000越えてるのにね。
540 :
名無しさん@お腹いっぱい。
2016/04/12(火) 22:24:19.26
>>536 おまえ Limux Mint 公式フォーラムでアラシ認定されたやつじゃね?
541 :
名無しさん@お腹いっぱい。
2016/04/13(水) 01:49:11.16
>>539 正社員なら800でもマシな方
なんせ上が詰まっててなかなか上がらないし
でもフリーや少数精鋭のとこなら1000は余裕で行く
542 :
名無しさん@お腹いっぱい。
2016/04/14(木) 09:18:08.49
うちはもう1000万じゃなくなったよ
543 :
名無しさん@お腹いっぱい。
2016/04/14(木) 22:19:32.09
>>534 サンプルコードがあるような本でも分からないなら、シェルスクリプトはやめた方がいい。
544 :
名無しさん@お腹いっぱい。
2016/04/14(木) 22:21:13.69
>>534 「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」を読みなさい。
545 :
名無しさん@お腹いっぱい。
2016/04/15(金) 08:51:58.72
ネタだろうけど、あんまり古過ぎる本勧めてやるな。
546 :
名無しさん@お腹いっぱい。
2016/04/15(金) 11:45:17.59
>>545 そもそもシェルスクリプト自体が変わっていないが?
547 :
名無しさん@お腹いっぱい。
2016/04/15(金) 21:13:21.13
だよね。
さすがに絶版だったらおいおいと思うが。
548 :
名無しさん@お腹いっぱい。
2016/04/16(土) 00:27:13.14
>>532 と言ってたら、bashの脆弱性が見つかったのは数年前だね
549 :
名無しさん@お腹いっぱい。
2016/04/16(土) 05:01:00.01
明日は我が身だが、2つの変数が両方とも空だった確率が0%じゃなければ、事故が起きてしまうな。
この場合は、どう書けばよかったの?
http://business.newsln.jp/news/201604151116100000.html レンタルサーバー業者で、従業員のミスによりサーバー上の全データが削除されるという
あり得ない事態が生じたことが14日、英大手紙「Independent」の報道で明らかとなった。
このレンタルサーバー業者では、削除してしまったデータを復元するために、大手QAサイトのserverfaultに
「Recovering from a rm -rf /(rm -rf /から復元する方法を教えてください)」とする書き込みをすることで、
問題の解決方法を模索しているが「バックアップがない限り、復元は難しい」といった回答も寄せられている。
QAサイトのserverfaultでは、日ごろ、初心者からの質問から、かなりの高度な質問まで、様々な質問が寄せられるとただちに、
最適な回答が付く状態が続いているが、さすがのserverfaultの熟練回答者であっても
会社の全データを「rm -rf /」で削除した後にどのような有効な復元策を講じることができるのかは、回答に詰まる状況となっている。
このミスをしてしまったレンタルサーバー業者の管理人となるMarco Marsalaによると、
プログラム中で、「rm -rf {foo}/{bar} 」と指定することで全サーバーを対象に、特定のディレクトリーのファイルだけを削除するスクリプトを動かしたところ、
このプログラムのバグにより、特定のディレクトリーだけでなく、全てのディレクトリーが強制削除の対象になってしまったと説明している。
また、バックアップを事前に取っていなかったのかという質問については、
もちろんバックアップは取得していたが、この全削除のプログラムによりバックアップファイルも削除の対象となってしまったと述べている。
このレンタルサーバー業者は、1535のカスタマーを抱えているが、この事故の発生により、これら全てのカスタマーのファイルが無くなってしまった。
550 :
名無しさん@お腹いっぱい。
2016/04/16(土) 09:24:48.15
だから/は変数の中に入れておけとあれだけ
551 :
名無しさん@お腹いっぱい。
2016/04/16(土) 10:06:55.21
552 :
名無しさん@お腹いっぱい。
2016/04/16(土) 10:35:23.38
553 :
名無しさん@お腹いっぱい。
2016/04/16(土) 10:51:02.13
554 :
名無しさん@お腹いっぱい。
2016/04/16(土) 11:15:01.02
バグがあっても大丈夫な設計を心がけろという話なのに
なんでテストしていないという話になる?頭大丈夫か?
555 :
名無しさん@お腹いっぱい。
2016/04/16(土) 11:25:08.28
あまりにアレで何か別のことを隠すためのうんたらかんたらを妄想してしまう記事だな
556 :
名無しさん@お腹いっぱい。
2016/04/16(土) 13:52:26.18
>>554 設計があって、テストをしないのはありえません。
557 :
名無しさん@お腹いっぱい。
2016/04/16(土) 13:56:59.02
>>554 だいたいそれは設計じゃないだろ。
ただのコーディングミスを防げために、コーディングミス用のロジックを書くのは阿呆すぎる。
558 :
名無しさん@お腹いっぱい。
2016/04/16(土) 14:43:59.32
>>557 フェイルセーフとフールプルーフの違いを学べよ
559 :
名無しさん@お腹いっぱい。
2016/04/16(土) 15:25:19.31
>>558 いかにもインフラの人間がいいそうなことだが、キミは開発側ではありえない助言をしている。
560 :
名無しさん@お腹いっぱい。
2016/04/16(土) 15:27:25.43
検証もしないで、ぶっつけ本番でそういう構成になっているから大丈夫という考え方はインフラでもありえない。
561 :
名無しさん@お腹いっぱい。
2016/04/16(土) 15:28:05.09
そもそも操作ミスではないじゃん。
562 :
名無しさん@お腹いっぱい。
2016/04/16(土) 16:30:24.50
バックアップは特定の権限でしか消せないとか、削除可能な範囲を絞るとか
万が一のためインフラ側で制限しないとダメなんだよ
それでもダメなときはダメだし
設計・テストとかプログラムのみでの対応はコストだけが跳ね上がるし現実的ではない
ジョブ管理システムやコンパイラのバグが絡んでくるともうお手上げになる
563 :
名無しさん@お腹いっぱい。
2016/04/16(土) 18:08:55.67
シェルスクリプトなのにコンパイラのバグ?
564 :
名無しさん@お腹いっぱい。
2016/04/16(土) 19:49:59.88
例で示しただけだから別にインタプリタでもなんでもいいよ
565 :
名無しさん@お腹いっぱい。
2016/04/17(日) 01:23:14.24
バグに絡まれやすそうな奴だな
566 :
名無しさん@お腹いっぱい。
2016/04/17(日) 07:15:51.53
>>549 rm -rfはシェル関数で。直接使う事は禁則。
rmしないでmv。定期的に掃除
567 :
名無しさん@お腹いっぱい。
2016/04/18(月) 20:09:07.34
568 :
名無しさん@お腹いっぱい。
2016/04/18(月) 20:24:48.32
ひでーw
__
タヒんでしまえよ
569 :
名無しさん@お腹いっぱい。
2016/04/18(月) 22:44:34.25
シェルショッカーとかいうおじさんおるよな
570 :
名無しさん@お腹いっぱい。
2016/04/25(月) 19:04:26.09
bashで、新しいscreenウィンドウを開いてそこで引数で指定したコマンドを実行する関数
を作りたいのですが、引数の展開をどうやればいいかで悩んでいます。
# 例:sc tail -f ./hoge.log
sc() {
# "cd $PWD; $@"ではダメだった
screen -t "$1" -X screen bash -c "cd $PWD; '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'"
}
10個以上の引数に対応するにはどう書くのがいいでしょうか?
571 :
名無しさん@お腹いっぱい。
2016/04/25(月) 21:45:04.21
>>570 "cd $PWD; $@" だと screen のコマンド全体が、
"screen" "-t" "$1" "-X" "screen" "bash" "-c" "cd $PWD; $1" "$2" ...
という引数に展開される。
これは "cd $PWD; $@" がまず、"cd $PWD; ""$@" に変換され、
"$@" が "$1" "$2" ... に展開されて
"cd $PWD; ""$1" が連結されて "cd $PWD; $1" になるため。
なお set - "$@" cd "$PWD" ";" "$@" したら、 screen に渡るのは ; までで肝心のコマンドは渡らない。
"cd $PWD; $*" だと "cd $PWD; $1 $2 $3 ..." (配列としては展開されずに1つの文字列扱いになる)
に展開されて意図した動きになる。 ただ、引数に空白が入る場合はエスケープ入れないとNGね。
572 :
570
2016/04/26(火) 19:09:31.05
空白のエスケープはどうやればいいんでしょう?
573 :
名無しさん@お腹いっぱい。
2016/04/26(火) 19:43:17.56
>>572 シングルクォートと空白の例。
sc() {
screen -t "$1" -X screen bash -c "cd $PWD; $*"
}
sc date +Date=\\\'%y\\\ %m/%d
574 :
名無しさん@お腹いっぱい。
2016/04/27(水) 12:24:16.19
...なんだかなあ
与えたスクリプトの中で、展開すれば?
sh -c 'some command; "$@"' 'dummy' "$@"
sc() {
screen -t "$1" -X screen bash -c 'cd $PWD; "$@"' 'dummy' "$@"
}
575 :
570
2016/04/27(水) 19:13:45.99
なるほど、dummy 以降が -c で与えたコマンドへの引数になることを利用するわけですね。
ちなみに
screen -t "$1" -X screen bash
は冗長で
screen -t "$1" bash
でいいみたいでした。
576 :
名無しさん@お腹いっぱい。
2016/04/27(水) 21:07:51.80
-c の次の次の引数からが $0 以降になるとは知らなかったなぁ。 勉強になったわ。
これは -c AAA BBB CCC DDD ... のとき、BBB 以降は実行されないけど BBB が $0 として、
CCC DDD ... が引数としてセットされた状態でプロセスが開始され、実際に実行される内容の
AAA 内に展開されずに渡された "$@" があるので CCC DDD ... が実行されるってことかな。
ちなみに cd の部分は 'cd "'"$PWD"'"; "$@"' の方がいいかな。
( パスに空白が入っていてもエラーにならないがダブルクォーテーションが入っていたらNGではあるが。 )
577 :
名無しさん@お腹いっぱい。
2016/05/12(木) 21:13:45.79
コマンド応答が返ってくるまでの表示に文字を回転させてりしてみたくなった。
例えば、「*」がくるくると回っていたり・・・
578 :
名無しさん@お腹いっぱい。
2016/05/13(金) 00:30:46.45
ええね
579 :
名無しさん@お腹いっぱい。
2016/05/13(金) 19:21:12.15
580 :
名無しさん@お腹いっぱい。
2016/05/13(金) 20:19:09.81
>>579 なんだよ、すごい目算があって開発宣言したと期待してたのに
まず、文字回すのは無理
/|\-を同じ位置で順番に繰り返す出す程度
あと、コマンド実行中は通常シェルはwait状態で止まってしまうので
コマンドをバックグラウンドで起動してシェルを動かし続けるか
別プロセスを同時に起動してそいつに表示させる必要がある
どっちもコマンドラインで明示しなきゃならん
普通に起動して同じことをさせるにはシェルの改造くらいしか思いつかん
それともzshくらいになるとすごいモジュールがあったりするのだろうか
581 :
名無しさん@お腹いっぱい。
2016/05/13(金) 20:43:34.11
OpenGLでぐりぐり回そうぜ
582 :
名無しさん@お腹いっぱい。
2016/05/13(金) 20:57:15.29
bash 依存だけど、こんなんでどう
sleep 10 & {
tput civis
while kill -0 %- &>/dev/null
do
for c in {-,/,\|,\\}
do
printf '%c\r' $c
sleep 0.1
done
done
tput cvvis
}
途中で interrupt されるとカーソルが見えないままになるけど
583 :
名無しさん@お腹いっぱい。
2016/05/14(土) 20:15:01.86
npm見れば解決しそう
584 :
534
2016/05/21(土) 22:04:30.88
>>535 お陰さまで最低限現場の記述ルールに則ったものは普通に作れるようになりましたm(_ _)m
585 :
名無しさん@お腹いっぱい。
2016/05/23(月) 00:15:19.48
>>559 超遅レスだかインフラでも
そんな事言わないあり得ない偏見すごいな
>>558 が伝えたいニュアンスは分かるけど
端的に考え方を言い表したいがために
登場場面が根本的に違う2つの用語だけで
端的に伝えようとするセンスが酷い
それにそもそも元の話と何かズレてるし
後輩育成とかは絶対に任せられないタイプ
586 :
名無しさん@お腹いっぱい。
2016/05/23(月) 08:05:15.40
ログファイルのローテート処理のお勧め教えれ
元ファイルをコピーしてヌルを上書きすると
一瞬ログの内容ロストするから
587 :
名無しさん@お腹いっぱい。
2016/05/23(月) 08:55:28.11
>>586 ログを出す側で制御 (SIGHUPとかで出力ログファイルを開きなおす) してくれないとその問題は防げない。
mkfifo で FIFO ファイル作ってログローテーション用後続スクリプトに一旦渡す方法やパイプで後続スクリプトに
渡してローテーションする方法も考えられるけど、FIFO のバッファがいっぱいになるとメインプロセス側が処理
待ち(write がブロック)したり、後続スクリプトの異常終了で SIGPIPE 食らってメインプロセスが死んだりする
のでお勧めできないそうな。
588 :
名無しさん@お腹いっぱい。
2016/05/23(月) 16:33:22.23
syslogdを kill -STOP; ... ; kill -CONT じゃダメなん?
589 :
名無しさん@お腹いっぱい。
2016/05/23(月) 17:04:28.65
logrotateでええやろ
590 :
587
2016/05/23(月) 23:22:16.85
>>588 syslogd がつかんでいるのはファイルハンドルであってファイルのパスじゃない。
なのでそれをやっても、リネームした古いファイルの方に書き続けてしまう。
例えば /var/log/messages に書き続けている状態でファイルを mv して messages.1 にしても、syslogdは
messages.1 の方に書き続ける。
kill -HUP するとファイルハンドルを閉じて /var/log/messages を開くので、ここでようやく messages 側に書き始めるわけ。
# STOP/CONT は意味がない。 logrotate では syslogd のログについては HUP しかしない。
>>589 logrotate の samba のログ設定には copytruncate って書いてあるでしょ?
つまり logrotate が >> 586 の言う「コピーしてファイルを空にする」処理をやっている。
samba は syslogd のような開きなおす処理をしてくれないからこの実装にせざるを得ない。
591 :
名無しさん@お腹いっぱい。
2016/05/24(火) 04:38:11.44
>>590 kill -HUP に対応してないsyslogdだったら、という話だろ。
kill -STOP してからログファイルを別ファイルにcpして、元のログは > file でゼロにする。
それで -CONT すればいいという話。
>syslogd がつかんでいるのはファイルハンドルであってファイルのパスじゃない。
というのは当然知ってるだろ。
592 :
名無しさん@お腹いっぱい。
2016/05/24(火) 08:44:45.64
スレ違いになりつつあるが、便乗して質問。
STOP -> truncate -> CONT って安全?
TCP/UDPで待ち受けしているプログラムで syn やメッセージ取りこぼしたりとかしない?
fork する奴にも使える?
593 :
名無しさん@お腹いっぱい。
2016/05/24(火) 09:37:37.23
>>592 TCPなら再送含めてOSがうまくやる
UDPだとバッファあふれたら消える
もともと消えるの前提だから再送はアプリの自己責任
forkしたら止まるのは当たり前だが指定したプロセスだけ
プロセスグループを指定したら該当するやつ全部
どの辺が疑問なのかむしろ知りたいわ
594 :
592
2016/05/24(火) 20:11:40.98
>>593 THX
> どの辺が疑問なのかむしろ知りたいわ
logrotate コマンドの copytruncate の欄に SIGSTOP すると良い、とは書かれていない
あたり、何か不都合があるんじゃないかと思うんだがどーよ?
595 :
名無しさん@お腹いっぱい。
2016/05/24(火) 22:53:24.96
>>594 そいつとtcpもudpもforkも関係ないのになんで出てきた?
596 :
名無しさん@お腹いっぱい。
2016/05/25(水) 08:40:27.70
tcp 再送は5分までいけるが、ロードバランサー/L7swの監視の場合にはファイルコピーしている
ちょっとした間にサービス停止として検知される可能性があるな。
597 :
名無しさん@お腹いっぱい。
2016/05/25(水) 15:06:05.26
598 :
名無しさん@お腹いっぱい。
2016/05/27(金) 20:10:08.30
599 :
名無しさん@お腹いっぱい。
2016/05/28(土) 12:10:25.23
タッチして逮捕されたらリネームじゃないのか。
600 :
名無しさん@お腹いっぱい。
2016/05/29(日) 01:58:44.16
つ 座布団
601 :
名無しさん@お腹いっぱい。
2016/05/29(日) 20:46:35.04
ユニックスの入門本が一冊欲しいのですが何がいいでしょうか
特定のコマンドやシェルのノウハウとかではなく
多くの場面で通用する本当に基礎的な知識を学びたいと思っています
私自身はいずれシェルを書きたいと思っていますが
LS、CPコマンドなどの使い方を知りたいわけではないということです
602 :
名無しさん@お腹いっぱい。
2016/05/29(日) 20:57:27.92
>>601 UNIXスーパーテキスト
ってまだ売ってたっけ?
603 :
名無しさん@お腹いっぱい。
2016/05/29(日) 21:40:46.70
>>601 古い本だけど砂原秀樹さんほかの『プロフェショナルBSD』
UNIXのコマンドはこういうふうに使うという根本的なことの理解に役立つ
604 :
名無しさん@お腹いっぱい。
2016/05/29(日) 22:26:33.91
スレチにも回答してあげるとは優しいやつばっかやな
605 :
名無しさん@お腹いっぱい。
2016/05/29(日) 23:19:55.20
>>601 入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
名著です。
これを挙げると古いとか文句を付ける馬鹿がいますが、無視してください。
606 :
名無しさん@お腹いっぱい。
2016/05/29(日) 23:20:36.49
あげ
607 :
名無しさん@お腹いっぱい。
2016/05/30(月) 00:14:11.32
608 :
名無しさん@お腹いっぱい。
2016/05/30(月) 03:08:51.89
shell から emacs 起動して終了すると、
[1] Done emacs
って出るよな?これって何が出しているんだろう?出来れば止めたい。
609 :
名無しさん@お腹いっぱい。
2016/05/30(月) 04:52:05.02
>>608 set +m しておくと出なくなるよ。(出してるのはシェル自身)
610 :
名無しさん@お腹いっぱい。
2016/05/30(月) 09:25:10.53
vim7.4使ってますが、書き込み時、sh -n みたいな、構文・文法チェックを
する方法はないでしょうか?
vimプラグインのsyntasticも試してみたのですが、.vimrcの記述のせいか
うまく動いてないようで。
何か簡単でうまい方法ありましたら、ご紹介ください。
611 :
名無しさん@お腹いっぱい。
2016/05/30(月) 10:19:27.79
>>609 どうもです。なるほどシェルが出しているのですか。
でも、なぜ emacs しか出ないのでしょう?
教えていただいた set +m 「ジョブ制御の無効」は bash のみでしょうか?
私は tcsh なのですが、tcsh でも同様の事は可能でしょうか?
612 :
名無しさん@お腹いっぱい。
2016/05/30(月) 18:00:07.40
ひとつ質問
シェルで2つの日時を元に所要時間を求めたい場合ぐぐるといろいろ方法はありますが
これが便利なコマンド一発で用意されていないのは需要がないと言うか
需要があった人が最終的に誰でも使える簡単な形にせずに終わらせたってことなんでしょうか?
613 :
名無しさん@お腹いっぱい。
2016/05/30(月) 18:55:30.71
614 :
名無しさん@お腹いっぱい。
2016/05/30(月) 19:36:20.17
dateコマンドのオプションに互換性がなかったから。
GNU date限定とかならいいんだけど
615 :
名無しさん@お腹いっぱい。
2016/05/30(月) 21:40:48.25
内部的にUNIX時間で持てば差分計算は簡単なような
616 :
名無しさん@お腹いっぱい。
2016/05/31(火) 08:52:48.30
>>615 32bitマシンが絶滅するまでは難しいな。
あと20年普通に残りそうだし
617 :
名無しさん@お腹いっぱい。
2016/05/31(火) 21:45:59.92
内部的にUNIX時間で持つってどういうこと?
内部というのは環境変数やシェル変数という意味?
618 :
名無しさん@お腹いっぱい。
2016/05/31(火) 23:23:59.98
256bit機が普及するまで32bit機はなくならないだろうね。
619 :
名無しさん@お腹いっぱい。
2016/05/31(火) 23:24:37.85
>>617 epochからの時間ってことじゃない?
>>616 difftime(3)て32bitと64bitで違うのかな
620 :
超音波テロの被害者
2016/06/01(水) 16:02:45.59
超音波テロの被害にあっています。
卑劣極まりない被害にあっています。
何が起こったかわからないときから、
わかってみれば、
まだ世の中に知られていない超音波テロ。
世の中の多数の振動源・発信源が
システム化され、 ネットワークを通して、
超音波・音波を集中させて
対象を攻撃するらしい。
超音波による物理的な力で、
ものが飛び、ものが壊れる。
それが人間の体に対してまで。
形のあるもの、ないもの、壊され、奪われ、
聞こえる声、音。超音波テロの加害者の声。
卑猥な内容、卑劣な内容、脅しやいたぶり。
621 :
超音波テロの被害者
2016/06/01(水) 16:03:08.53
身体の表面を突き抜け、内臓を攻撃される。
頭蓋骨を突き抜け、意識を失わされる。
臓器不全やがん、命に関わることまで。
人間の身体を壊そうとする超音波テロ。
日本国中、どこにいても超音波で襲われる。
車に乗っている人間が襲われる。
歩いている人間が襲われる。
自宅で超音波の攻撃を受ける。
人や社会が超音波で襲われ、
罪もない人が超音波で襲われ、
卑劣な被害にあっています。
被害を訴えても信じてもらえない。
「見続けるのがいやだから、殺して終わる」、
「証拠隠滅だ」という超音波テロの加害者の声とともに
強烈な超音波の攻撃。
叫ばされ、いたぶられ、それを口実にまた攻撃され、
超音波テロの、残酷残虐で、卑劣な攻撃の被害にあっています。
心の底から被害を訴え、祈っています。
天に神に届きますように。
622 :
名無しさん@お腹いっぱい。
2016/06/01(水) 17:45:47.97
>620
これなんつーシェルのスクリプトですか?
623 :
名無しさん@お腹いっぱい。
2016/06/02(木) 07:52:05.22
/bin/jpsh
624 :
名無しさん@お腹いっぱい。
2016/06/02(木) 08:00:02.53
/bin/chouonpa/itaburare
625 :
名無しさん@お腹いっぱい。
2016/06/05(日) 11:03:53.19
ディレクトリを指定する時って、「/dir/」が正しいのか、「/dir」
にすべきか、最後の/をつけるかつけないかでどんな違いがあるのか
いつもすごく気になる。
626 :
名無しさん@お腹いっぱい。
2016/06/05(日) 13:34:06.57
>>625 rsync や ln 、mv あたりはありなしで挙動がかわる。
ln や mv はオプションで一応制御できるけど
627 :
名無しさん@お腹いっぱい。
2016/06/09(木) 19:13:38.61
json形式のデータをSQLのjoinみたいにキーで結合したいのですが
いいスクリプト知りませんか?
jqはできそうな感じなんだけど、サンプルのページが見当たらなくて
628 :
名無しさん@お腹いっぱい。
2016/06/09(木) 21:10:02.49
>json形式のデータをSQLのjoinみたいにキーで結合したいのですが
cpanモジュール使うべし。
力技でゴリゴリでもできるかもしらんが、時間の無駄
629 :
名無しさん@お腹いっぱい。
2016/06/09(木) 22:45:45.43
>>627 データがどんなもんか分からないので何とも言えないけど例えば
[
{"id": 1, "name": "Tom", "gender": 1},
{"id": 2, "name": "Alice", "gender": 2},
{"gid": 1, "gender": "male"},
{"gid": 2, "gender": "female"}
]
なんてJSONファイルがあって gender と gid で join する場合、
jq '
map(
(select(has("id")) | { k: .gender, v: { id: .id, name: .name }}),
(select(has("gid")) | { k: .gid, v: { geder: .gender }})
)
| group_by(.k)
| map((map(.v) | add))
' data.json
かなぁ。
630 :
629
2016/06/10(金) 01:11:22.91
あー、しまった、思いっきり間違えた…
jq '
(map(select(has("gid")) | {(.gid|tostring): .gender}) | add) as $g
|
map (select(has("id")) | .gender = $g[(.gender|tostring)])
' data.json
631 :
名無しさん@お腹いっぱい。
2016/06/10(金) 01:28:18.48
[
{
"id": 1,
"name": "Tom",
"gender": "male"
},
{
"id": 2,
"name": "Alice",
"gender": "female"
}
]
できました、できましたけど書き方わからないです><
>>628 cpan使うのが主流なんですか?
632 :
名無しさん@お腹いっぱい。
2016/06/10(金) 01:54:22.40
>>631 json 形式のデータを DB に insert する方法を調べた方がいいかも
633 :
名無しさん@お腹いっぱい。
2016/06/10(金) 14:14:19.71
>>631 いやそういうわけではなくて、pythonでもrubyでもいいけど
JSONとかXMLとかYAMLなどの定形式な文書からスライスして取
り出すなら、すでにある専用モジュールとか使ったほうが断然
速いってはなし。俺はperlしかわからんのでcpanモジュール。
perlなら
use JSON::XS;
して、
my $json = 'json.txt'
my $data = decode_json($json); #jsonからperlのハッシュに変換
あとは、ハッシュの内容をダンプしてデータ構造みながら
必要なデータだけを拾う。
print %$data{features}->[$cnt]->{properties}->{title} .
634 :
名無しさん@お腹いっぱい。
2016/06/10(金) 16:33:17.98
使うべしって言った割にショボ過ぎ
635 :
名無しさん@お腹いっぱい。
2016/06/10(金) 22:15:34.82
スレ的にもここはあくまでシェルスクリプトでやるべきだろ
なんでもありなら今はPythonの方がメジャー
もしくはRubyとか
636 :
名無しさん@お腹いっぱい。
2016/06/10(金) 23:07:20.19
637 :
名無しさん@お腹いっぱい。
2016/06/11(土) 00:12:44.31
スレチ
638 :
名無しさん@お腹いっぱい。
2016/06/11(土) 00:34:35.87
スクリプトエラーとやらがでる
↓
にちゃんでスクリプトで検索
↓
シェルスクリプトとかよくわからんけどスクリプトって入ってるからここに書けば誰か完璧な答えを出してくれるはず
ゆとり、ここに極まれり
639 :
名無しさん@お腹いっぱい。
2016/06/11(土) 03:40:49.78
引数を受けて同名のサブディレクリ直下にある全てのシェルスクリプト(.sh)を実行するってどう書けばいいんでしょうか?
640 :
名無しさん@お腹いっぱい。
2016/06/11(土) 03:41:43.14
bash環境です。同名とは引数に指定された文字です
641 :
名無しさん@お腹いっぱい。
2016/06/11(土) 03:53:01.79
find 引数 -name *.sh -exec {};
こんな感じなのだろうか。
642 :
名無しさん@お腹いっぱい。
2016/06/11(土) 04:14:09.33
ありがとうございます
こんな感じで良いのかな?
find 引数 -maxdepth 0 -name *.sh -exec bin/sh -c ' {} ' \;
643 :
名無しさん@お腹いっぱい。
2016/06/11(土) 10:22:42.97
シェルスクリプトじゃないけどrun-partsが似たような仕事するね