17/10/26 14:27:19.72 .net
PATHがきしょい
408:名無しさん@お腹いっぱい。
17/10/26 15:33:20.43 .net
>>399
「フルパスで書かなきゃいけない」のではない
$PATHを上書きするのがマズい
409:名無しさん@お腹いっぱい。
17/10/26 15:35:16.21 .net
これ1〜6までファイル全部消えるんじゃね?
410:名無しさん@お腹いっぱい。
17/10/26 15:35:32.78 .net
1から6まで
411:400
17/10/26 15:37:15.23 .net
あ、すまん勘違い
逆だった
412:名無しさん@お腹いっぱい。
17/10/26 16:21:22.80 .net
5を6にリネーム~0を1にリネーム
そのあと最新のログを0にリネームじゃないかな
どっちにしろゴリ押し感半端ないが
413:名無しさん@お腹いっぱい。
17/10/26 16:30:18.25 .net
>>402
$PATHって環境変数ですよね…
何故気づかなかったんだろう
お恥ずかしい限りです
414:名無しさん@お腹いっぱい。
17/10/26 16:37:04.75 .net
あーそういうことか、403のお陰でやりたいことは分かった
415:名無しさん@お腹いっぱい。
17/10/26 18:34:54.50 .net
こうすればわかりやすいですかね
#!/bin/sh
DIR=/var/log/
FILE=dnsmasq.log;
START=0
for i in `seq 1 6`
do
DEC=`expr $i - 1`
cd $DIR
mv "${FILE}.${DEC}" "${FILE}.${i}"
done
cd $DIR
mv $FILE "${FILE}.${START}"
exit 0
416:名無しさん@お腹いっぱい。
17/10/26 18:56:39.92 .net
毎回cdするのは無駄やろ
417:名無しさん@お腹いっぱい。
17/10/26 19:01:29.48 .net
個人的にexpr嫌いなのもあって$(())使っちゃうな
mv "${FILE}.$((i-1))" "${FILE}.$i"
あとseq間違ってね?
seq 6 1 -1
418:名無しさん@お腹いっぱい。
17/10/26 19:25:35.16 .net
これだと全部ログ.0になっちゃいますね
ありがとうございます!
419:名無しさん@お腹いっぱい。
17/10/28 17:54:16.26 .net
logrotateの真似したいのかな
420:名無しさん@お腹いっぱい。
17/10/28 19:36:18.05 .net
素直にそっち使った方が楽に出来るよね
421:名無しさん@お腹いっぱい。
17/10/28 22:25:53.38 .net
そっちを使うほうが楽、ということを学習するにはまずは自分で書いてみて、大変だぜてことを理解しないと
422:名無しさん@お腹いっぱい。
17/10/31 13:10:26.11 .net
昔solarisで見たlogrotateはshell scriptだった
どこかで見れれば参考になるかも
423:名無しさん@お腹いっぱい。
17/10/31 13:39:18.79 .net
あれはあんまりきれいじゃないから参考にしない方がいい
424:名無しさん@お腹いっぱい。
17/10/31 13:48:20.70 .net
この /usr/lib/newsyslog ね
URLリンク(www.tcp-ip.or.jp)
425:名無しさん@お腹いっぱい。
17/10/31 15:47:40.56 .net
シェルスクリプト
URLリンク(www.apt-browse.org)
マニュアルページ
URLリンク(manpages.debian.org)
426:名無しさん@お腹いっぱい。
17/11/02 04:12:26.82 .net
これ?
URLリンク(goo.gl)
URLリンク(www.bityet.us)
427:名無しさん@お腹いっぱい。
17/11/03 04:26:36.66 .net
X Windows System で,どの IMF が用いられているか判別する方法を考えている。
思い付いたのは $XMODIFIERS 環境変数を用いた
case $XMODIFIERS in
  *ibus)
    local _imf=ibus
    ;;
  *fcitx)
    local _imf=fcitx
    ;;
  *uim)
    local _imf=uim
    ;;
  *SCIM)
    local _imf=scim
    ;;
esac
なんだけど,$XMODIFIERS が必ず設定されているとは限らないし,なんか漏らしてる気がしてならん……。
428:名無しさん@お腹いっぱい。
17/11/03 04:29:53.86 .net
ツールで投稿したら空白がエラいことになった。すまん。
429:名無しさん@お腹いっぱい。
17/11/03 07:20:14.85 .net
Shell Scriptのコメントアウトに
# @(#) Foo is foo.
みたいな文字を書いておいて
$ what ./foo.sh
とやると
Foo is foo
という表示がでるというようなwhatコマンドがあるらしいのですが
手元のFedora26に見付かりません。($ dnf search what, $ dnf provides what)
どこかにありますでしょうか。
430:名無しさん@お腹いっぱい。
17/11/03 08:32:21.55 .net
Linuxの質問はLinux板で
431:名無しさん@お腹いっぱい。
17/11/03 10:09:39.61 .net
>>423
whatはかつて使われていたSCCSというソースコード管理システムに入っていたコマンド
現在はGNU CSSCがSCCSと同等の機能を提供している
なのでcsscというパッケージを探す
なければURLリンク(www.gnu.org)へGO!
432:名無しさん@お腹いっぱい。
17/11/20 15:39:18.57 .net
case文で
$1がhogeで、$2がhageの場合のみ処理Aを実行する
みたいなのできないでしょうか?
433:名無しさん@お腹いっぱい。
17/11/20 15:49:53.05 .net
入れ子にすりゃいい
434:名無しさん@お腹いっぱい。
17/11/20 15:56:36.27 .net
$1にも$2にも含まれ得ない文字を区切りにして連結
435:名無しさん@お腹いっぱい。
17/11/20 16:00:08.82 .net
>>425
ありがとうございます。依存地獄に嵌ってしまいあきらめました,教えてもらったのにすいません。
また,御礼がおそくなってもうしわけないです。
436:名無しさん@お腹いっぱい。
17/11/20 16:22:06.48 .net
caseで実装するなら入れ子かね
しかしここでも髪の話するのか
437:名無しさん@お腹いっぱい。
17/11/20 17:07:40.56 .net
>>427
>>428
>>430
入れ子にできることを全然知らず
こんな感じかなでやってみたらいけました
皆さん短時間にありがとうございます
>>430
他意はありませんw
438:名無しさん@お腹いっぱい。
17/11/20 18:39:46.60 .net
>>430
気にし過ぎだろ
さっさと剃れよ
439:名無しさん@お腹いっぱい。
17/12/02 09:15:00.24 .net
すみません、bashでタブ区切りのファイルを配列に取り込む際、空の列が詰めて格納されてしまいます
そうならない方法はあるのでしょうか
exec < file.tsv
while read LINE
do
ARRAY=(${LINE})
done
440:名無しさん@お腹いっぱい。
17/12/02 10:11:05.91 .net
>>433
変数の参照部分を引用符で囲むとか。
#!/bin/sh -
exec < file.tsv
while read LINE; do
ARRAY=("$LINE")
done
echo "$ARRAY"
IFS の値を空にするとか。
#!/bin/sh -
IFS=
exec < file.tsv
while read LINE; do
ARRAY=($LINE)
done
echo $ARRAY
441:名無しさん@お腹いっぱい。
17/12/02 10:16:16.70 .net
あ,5ch ってコード貼るのまずいんだっけ。しくったな。
まあこんなくだらないコードに著作権云々関係ないかw
442:名無しさん@お腹いっぱい。
17/12/02 10:37:47.62 .net
>>433
bash なら mapfile がある(別名 readarray)
-t オプションで各行末尾の改行を取除く
mapfile -t ARRAY <file.tsv
443:名無しさん@お腹いっぱい。
17/12/03 07:15:44.68 .net
早速検証してみます、ありがとうございます!
444:名無しさん@お腹いっぱい。
17/12/05 08:37:43.17 .net
検証した結果、IFSを改行のみにして読み込み、その文字列をCutで抜くで達成できました
こうしないと空文字の列が詰まってしまいました
IFS_BAK=IFS
IFS=$'¥n'
exec < file.tsv
while read LINE
do
echo "${LINE}" | cut -f1 >> tmp1.txt
echo "${LINE}" | cut -f2 >> tmp2.txt
done
IFS=IFS_BAK
445:名無しさん@お腹いっぱい。
17/12/05 09:20:20.37 .net
>>438
重箱の隅を突くようで悪いが,その書き方をするならシェバンは #!/usr/bin/bash
にしておけ。
$'string' は Bash の独自拡張だった気がする。
446:433
17/12/06 10:04:48.53 .net
>>433
今ごろ勘違いに気づいた
mapfileじゃ全然見当外れじゃないか…なんかごめん
たとえば
IFS=$'\t'
line="${IFS}b"
このとき
a=(${line})
で
a=("" "b")
となるのを期待しているのだけど、実際にはクオートしていないので
a=( b)
と同じことになって、先頭の「空の列」は残らない
かといってクオートしたら
a=("${line}")
これはタブ区切りで分割されることなく行全体がそのままになるので意味がない…
ということだよね
>>438のようにファイルに書き出すだけなら、そう
447:やってcutでやるのが扱いやすそうだけど もしどうしても配列にする必要があるときは、こんな感じでどうだろう https://ideone.com/uPfCwc 空だと消えてしまうなら空にならないよう何か入れとけばいいじゃない(配列にしてから取り除く) という案
448:名無しさん@お腹いっぱい。
17/12/11 05:34:31.40 .net
>>440
回答が遅れてすみませんでした
なるほど…その手はいけるんですね
ありがとうございます、活用させていただきます
自分は今回縛りがあってbashだけでやっているのですが、可能なら他のスクリプトに任すべきかな…(´・ω・`)
449:名無しさん@お腹いっぱい。
17/12/14 00:31:41.37 .net
そこは「他のシェルに」じゃないか
450:名無しさん@お腹いっぱい。
17/12/29 06:50:06.02 .net
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
PPEE18BYYA
451:名無しさん@お腹いっぱい。
18/01/08 17:53:30.81 .net
はじめまして
早速で申し訳ないのですが、以下のシェルスクリプトでdoを含むコマンドが一切使用できません。理由と解決策を教えてください。
#!/bin/sh
dir=`dirname ${0}`
echo -n "探す拡張子="
read que
ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}')
if [ -z "${ans}" ];then
echo "${que}は見つかりませんでした。\n終了します。"
exit
else
echo "${ans}"
fi
452:名無しさん@お腹いっぱい。
18/01/08 17:59:26.22 .net
>>444
すみません訂正します。
select文のみどこに書いてもSyntax error: "do" unexpectedというエラー出てしまいます。
453:名無しさん@お腹いっぱい。
18/01/08 18:43:33.26 .net
doが何のこと言ってるのかよくわからんが実行の仕方が間違ってんじゃね
まず問題がどこにあるかを明確に切り分けろ
454:名無しさん@お腹いっぱい。
18/01/08 20:31:51.74 .net
>>446
さっき書き直したのですが、改善しませんでした。
エラー内容はさっきと同じで、 Syntax error: "do" unexpectedです。
441でも、どこに記述しても変わらなかったため、問題の部分を消して使っていたので、doの部分を貼り忘れてました。すみませんでした。
#!/bin/sh
dir=`dirname ${0}`
echo -n "検索する拡張子:"
read que
while [ -z "${que}" ]
do #ここのdoは問題なし。
echo -n "拡張子を入力してください。\n検索する拡張子:"
read que
done
ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}')
if [ -z "${ans}" ];then
echo "${que}は見つかりませんでした。\n終了します。"
exit
else
echo "${ans}"
fi
#============ここから問題の部分===========
select var in ${ans}終了
do
if [ ${var} = 終了 ];then
exit
fi
if [ ${que} = gz -o xz];then
tar -xf ${dir}${var}
fi
done
455:名無しさん@お腹いっぱい。
18/01/08 20:59:27.67 .net
xz ]やないの?
シンタックスエラーって出てるんだからまず自分を疑おう
456:名無しさん@お腹いっぱい。
18/01/08 21:01:57.76 .net
どこに貼ってもだめならselectの構文がなんかおかしいんじゃないの
457:名無しさん@お腹いっぱい。
18/01/08 21:16:18.25 .net
>>448
スペース入れても変わりませんでした。
>>449
構文がおかしい部分を自分では見つけられませんでした。
458:名無しさん@お腹いっぱい。
18/01/08 21:41:13.34 .net
do unexpectedなら直前の「${ans}終了」ちゃうんけ
459:名無しさん@お腹いっぱい。
18/01/08 22:01:36.46 .net
>>451
変数じゃなくしても、終了を消しても、別の変数に変えてもSyntax error: "do" unexpectedは消えませんでした。
460:名無しさん@お腹いっぱい。
18/01/08 22:17:55.91 .net
とりあえず「間違いなく動作する」select構文をまず単品で書け
ネットのコピペでも構わん。出来る限りシンプルなやつで
動いたならそれを少しずつ改造して動かしてを繰り返しつつお前の目的に近づけろ
461:名無しさん@お腹いっぱい。
18/01/08 22:28:27.56 .net
shでselectってできたっけ
462:名無しさん@お腹いっぱい。
18/01/08 23:44:18.33 .net
SC2039: In
463: POSIX sh, select loops are undefined. bashならとりあえず動く、#!/bin/bash にしとけば
464:名無しさん@お腹いっぱい。
18/01/08 23:56:10.56 .net
>>453
ありがとうございます。コピペ&作り直しでできました。
>>454
Ubuntuでやっていたのでできました。
>>455
書き換えました。
皆様ありがとうございました。
もしかしたら似たようなものがすでにあるかもしれませんが、とりあえずできたものを>>454に貼っておきます。
465:名無しさん@お腹いっぱい。
18/01/08 23:57:24.21 .net
#!/bin/bash
PS3="入力してください:"
menu="曖昧 前方一致 後方一致 完全一致 拡張子"
echo "検索するディレクトリを入力してください
入力しなかった場合、このファイルがあるディレクトリを検索します。"
while [ -z "${dir}" ]
do
echo -n "ディレクトリ入力:"
read dir
if [ -e "${dir}" ];then
break
else
unset dir
echo "そのようなディレクトリはありません。"
fi
done
echo "検索方法を選択してください:"
>>455に続く
466:名無しさん@お腹いっぱい。
18/01/08 23:58:02.00 .net
>>457続き
select var in ${menu}
do
echo ["${var}"]で検索します。
echo -n "検索する単語を入力してください:"
read que
case "${var}" in
曖昧)
ans=$(find ${dir} -name *"${que}"*);;
前方一致)
ans=$(find ${dir} -name "${que}"*);;
後方一致)
ans=$(find ${dir} -name *"${que}");;
完全一致)
ans=$(find ${dir} -name "${que}");;
拡張子)
ans=$(find ${dir} -name *."${que}");;
esac
echo "${ans}"
exit
done
467:名無しさん@お腹いっぱい。
18/01/09 07:32:28.94 .net
正直見辛いしその程度なら一行コマンド打つんでいらないっす
468:名無しさん@お腹いっぱい。
18/01/09 12:43:53.77 .net
* が展開されてうまく動かなかった
469:名無しさん@お腹いっぱい。
18/01/09 20:01:44.41 .net
Linuxの話ならLinux板で聞いてください
470:名無しさん@お腹いっぱい。
18/01/10 13:12:44.56 .net
odコマンドって規定で行番号は付くは省略するわでほんとUNIX哲学的じゃねーな
xxdとかのほうが遥かに扱いやすいわ
471:名無しさん@お腹いっぱい。
18/01/10 16:21:53.96 .net
行番号ちゃうし
472:名無しさん@お腹いっぱい。
18/01/11 12:57:39.11 .net
od -An -v
473:名無しさん@お腹いっぱい。
18/01/13 15:24:43.34 .net
規定がっていう話でしょ
それと同じで ls も規定で勝手に表示を整えるのをやめてほしい。
Plan 9のlsは規定でls -1みたいな挙動らしいけど。
474:名無しさん@お腹いっぱい。
18/01/13 15:30:27.80 .net
規定なら従っといた方がいいじゃん
罰則あるかもしれんし
475:名無しさん@お腹いっぱい。
18/01/13 15:31:53.68 .net
それは規約じゃ
476:名無しさん@お腹いっぱい。
18/01/13 19:01:27.06 .net
default = 既定
477:名無しさん@お腹いっぱい。
18/01/13 22:58:37.21 .net
違反すると罰則あるのは規定じゃなくて規約だろって話
478:名無しさん@お腹いっぱい。
18/01/14 10:57:30.90 .net
だから「Default=規定」って書いたんじゃねーの?
規約じゃないって意味で。
479:名無しさん@お腹いっぱい。
18/01/14 11:45:22.78 .net
ワケワカメ
480:名無しさん@お腹いっぱい。
18/01/14 15:52:04.52 .net
なんだこの流れ
全員頭悪いの?
481:名無しさん@お腹いっぱい。
18/01/14 16:00:17.68 .net
流れ?
482:名無しさん@お腹いっぱい。
18/01/14 16:20:16.87 .net
全次郎?
483:名無しさん@お腹いっぱい。
18/01/14 17:49:06.78 .net
規約じゃなくて規定なら別に従う必要ないって話なだけじゃないのか
484:名無しさん@お腹いっぱい。
18/01/14 17:50:28.44 .net
default=既定≠規定
485:名無しさん@お腹いっぱい。
18/01/14 19:12:18.41 .net
>>465の誤字を>>466が茶化したのに理解されずにグダグダになった流れ
486:名無しさん@お腹いっぱい。
18/01/14 19:28:08.33 .net
すまん誤字に全く気付かなかった
487:名無しさん@お腹いっぱい。
18/01/14 19:34:54.90 .net
あーなるほどそういうことか。
普通に「既定」に脳内変換してたせいで意味不明な喧嘩に見えてたわ
488:名無しさん@お腹いっぱい。
18/01/15 00:06:01.79 .net
脳内変換てw馬鹿なだけやんかw
489:名無しさん@お腹いっぱい。
18/01/15 08:02:47.35 .net
すぐそうやって火種を撒く……
490:名無しさん@お腹いっぱい。
18/01/15 22:28:34.05 .net
$'\n' こういう $'何か' っていう書き方って bash 限定?
sh でもいける?
491:名無しさん@お腹いっぱい。
18/01/16 12:48:12.73 .net
bash限定
492:名無しさん@お腹いっぱい。
18/01/16 15:07:55.74 .net
POSIX xargs
URLリンク(pubs.opengroup.org)
には-0オプションがありませんが,どうにかしてxargsにナル文字区切りのデータを渡せませんかね。
もしくは xargs -0 がエラーになるOSをご存知でしたら教えて下
493:さい。 FreeBSD, MacOS, Debian GNU/Linuxともにxargsに-0オプションはありました。
494:名無しさん@お腹いっぱい。
18/01/16 16:09:39.07 .net
Solarisとかあやしそうだね
495:名無しさん@お腹いっぱい。
18/01/17 00:51:10.26 .net
>>485
そうみたいね
URLリンク(unix.stackexchange.com)
URLリンク(docs.oracle.com)
496:481
18/01/17 04:46:35.14 .net
>>485
>>486
ありがとうございます。
ファイルパスに関するシェルスクリプトを作ろうとしており,
ファイル名に改行文字が含まれている場合を考慮してナル文字区切りでデータを扱いたかったのです。
が,もうそんな特殊なファイル名にしている側の責任ってことにします。
仕事だったらもうちょっと考えるところですが個人で扱うので自分が気をつければいいだけなんで。
リンク等ありがとうございました。
497:名無しさん@お腹いっぱい。
18/01/17 08:37:13.99 .net
URLリンク(pubs.opengroup.org)
POSIXのfindには+終端もあるみたいだから、
用途によってはxargsを使わずに変なファイル名が扱えることもある。
例によってSolarisにはないが、POSIXに準拠してないということで切れる。
498:481
18/01/17 09:45:47.24 .net
>>488
ありがとうございます。
> 例によってSolarisにはないが、POSIXに準拠してないということで切れる。
恥かしながらSolaisってPOSIX準拠を謳っていないことを今知りました……
よくシステムコールAPIの説明で「SolaisまたはPOSIX」とありますが,
その真意をようやく掴めました。
---
awkのRSにナル文字を指定できればxargsの代替として使えるかもしれないと思ったんですが,
$ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | awk -v RS="$(printf '\0')" '{ print $0 }'
みたいなことをやっても撥ねられる
(シェルがナル文字についての警告を出して,「FirstSecondThird」とだけ表示される)
のでやっぱりナル区切りを扱うのはやめておこうと思いました。
大人しく空白区切り・改行レコードで行きます。
499:481
18/01/17 09:55:31.15 .net
なんかこうすると上手く行った (ように見えます)。
$ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | \
awk ' \
BEGIN {
RS="\0"
ORS="\n"
}
{
} \
'
なんでこれが良くて >>489 がだめなのか分からないのが怖いので結局ナル文字区切りはやめることにしました。
連投&スレ汚し失礼しました。
500:名無しさん@お腹いっぱい。
18/01/18 11:41:43.86 .net
sedでiフラグをdフラグと一緒に使うことはできないのでしょうか。
501:名無しさん@お腹いっぱい。
18/01/18 11:44:10.00 .net
↓
sed
スレリンク(unix板)
502:名無しさん@お腹いっぱい。
18/01/18 19:40:41.47 .net
>>492
誘導ありがとうございます。一応の解決を見ました。
503:名無しさん@お腹いっぱい。
18/01/26 00:50:46.41 .net
hoge.sh <(cat hoge.txt fuga.txt piyo.txt)
### hoge.sh
#!/bin/bash
wc -l $1 # 正しい行数
wc -l $1 # なぜか0
おせーてエロいひと
504:名無しさん@お腹いっぱい。
18/01/26 06:57:46.46 .net
>>494
つ cat hoge.txt fuga.txt piyo.txt | (wc -l; wc -l)
505:名無しさん@お腹いっぱい。
18/02/01 22:35:58.02 .net
こういうhoge.shがあったとして
```
#!/bin/bash
set -x
for x in aa bb cc; do
echo $x
done
```
実行するとこうなる
```
$ bash hoge.sh
+ for x in aa bb cc
+ echo aa
aa
+ for x in aa bb cc
+ echo bb
bb
+ for x in aa bb cc
+ echo cc
cc
```
けどこうしたい(forやifが出力されないようにしたい)
```
$ bash hoge.sh
+ echo aa
aa
+ echo bb
bb
+ echo cc
cc
```
どうしたらいい?
506:名無しさん@お腹いっぱい。
18/02/01 22:38:33.65 .net
つづき。ためしにこうしてみた
```
#!/bin/bash
for x in aa bb cc; do
set -x
echo $x
set +x
done
```
実行したら set +x も表示された(これは
507:いらない) ``` $ bash hoge.sh + echo aa aa + set +x + echo bb bb + set +x + echo cc cc + set +x ```
508:名無しさん@お腹いっぱい。
18/02/01 22:40:28.83 .net
grep -vでもしたら
509:名無しさん@お腹いっぱい。
18/02/01 23:21:30.45 .net
echo $x
の前に
echo + echo $x
と記述する
510:名無しさん@お腹いっぱい。
18/02/01 23:48:49.07 .net
bashだからじゃね?
511:名無しさん@お腹いっぱい。
18/02/02 01:26:01.46 .net
fishてどう?
512:名無しさん@お腹いっぱい。
18/02/02 01:47:58.90 .net
$ cat hoge.sh
#!/bin/bash
for x in aa bb cc; do
(set -x
echo $x)
done
$ bash hoge.sh
+ echo aa
aa
+ echo bb
bb
+ echo cc
cc
なんつって
513:名無しさん@お腹いっぱい。
18/02/02 08:54:06.42 .net
>>502
> (set -x
> echo $x)
この方法でできました。ありがとうございます。
もっと簡潔に書けるといいのだけど。
514:名無しさん@お腹いっぱい。
18/02/08 16:21:59.61 .net
すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど
i=256;j=0 ; while [ ! $i -eq 1 ] ; do i=$(( $i /2 ));echo $i; j=$(($j + 1)) ; done ;echo ans:$((32 - $j))
もっとてっとり早く出すコマンドはありませんか? できれば256を入れたら8とかさっさと返してくれるような奴を
あとよくわからんけど 計算で256と2を入力したら後ろの8とかを出すコマンドはないですか?
覚えるとか調べるは嫌いなんで、なるべく手間のかからないものを教えてください
515:名無しさん@お腹いっぱい。
18/02/08 17:19:18.65 .net
サブネットマスクぐらい暗記か手計算しろよ
516:名無しさん@お腹いっぱい。
18/02/08 18:06:11.03 .net
>覚えるとか調べるは嫌いなんで、
生きてる意味あんのか、これで?
517:名無しさん@お腹いっぱい。
18/02/08 19:05:19.51 .net
>>505
手間がかかるから面倒だよ
20万以上やるし
ああ これででるのね うしろに変なゴミが付いてるがどうでもいいか
:echo " l(65556)/l(2)" | bc -l
16.00044020841915062248
:echo " l(1024)/l(2)" | bc -l
10.00000000000000000010
>>506
また努力するするのが誇らしいとか思ってる馬鹿?ww
俺が考えるならこの機械とか利用価値はないよ
ゲーム開発のUNITYのスレに行けば似たような奴が沢山いるよ
まぁしばらくはマシーンを買う金がないからlinuxとイヤイヤ付き合うしかないが
ほんと手間がかかるな
518:名無しさん@お腹いっぱい。
18/02/08 19:20:30.57 .net
ある意味面白いやつだな
519:名無しさん@お腹いっぱい。
18/02/08 20:11:48.67 .net
>また努力するするのが誇らしいとか思ってる馬鹿?ww
こんなこと考えたこともないけど
思い込みが激しいっていうか頭腐ってるだろ
ああ死んでるんだったっけ
520:名無しさん@お腹いっぱい。
18/02/08 20:31:31.63 .net
落ち着け
521:名無しさん@お腹いっぱい。
18/02/08 20:57:59.75 .net
>>509
そういう手間が掛かるのはちょっと…
利用価値がないし
522:名無しさん@お腹いっぱい。
18/02/08 21:47:56.46 .net
バイト雇って計算してもらいましょう
523:名無しさん@お腹いっぱい。
18/02/08 23:17:47.05 .net
>>512
俺自体が無職だよ
さて間抜けからビットコインを盗まんと
524:名無しさん@お腹いっぱい。
18/02/09 01:51:26.42 .net
>>513
頼むわ
間抜けは存在自体がガンだから
525:名無しさん@お腹いっぱい。
18/02/09 09:19:26.94 .net
犯罪の予告と教唆かよ
526:名無しさん@お腹いっぱい。
18/02/09 22:09:51.06 .net
>>515
予告と教唆じゃなくて実行中だよ
とろくさいやつだなw
URLリンク(or2.mobi)
URLリンク(or2.mobi)
3週間たってだいぶリナックスにも慣れてきた
ある程度稼がせてもらったらウインドウズに戻るよ
ライブは少し使いにくい
527:名無しさん@お腹いっぱい。
18/02/09 22:12:54.21 .net
なんかシェルスクリプト総合とか書いてあったから来てみたけど
しょぼそうな連中しか居ないけど…
ここのひとってシステム管理とかで食ってる連中が多いの?
528:名無しさん@お腹いっぱい。
18/02/09 22:39:19.88 .net
煽ったらなんかもらえるのか?
529:名無しさん@お腹いっぱい。
18/02/09 22:54:21.43 .net
なんか急に変なの出てきたな
どっかにスレのアドレスでも貼られたのか
530:名無しさん@お腹いっぱい。
18/02/10 00:05:29.76 .net
いや元々お前らの方がずっと変だけどw
531:名無しさん@お腹いっぱい。
18/02/10 05:51:23.70 .net
変と思いながら見続けて今さあながら「変だ!変だ!」と言う人って・・・
まあ相手にされるかは別にして居たいなら居ていいと思うよ
532:名無しさん@お腹いっぱい。
18/02/10 11:31:48.71 .net
>>517
面白いネタがあれば食いつくんじゃない?
つまらんネタしか無いから過疎ってる。
533:名無しさん@お腹いっぱい。
18/02/10 19:55:51.78 .net
ほんとに揃いも揃っておまえらは無能な連中だよ
こんな能無し共が良いかねを取って裕福な生活をしてるのに
何で俺がしこしこビットコインを盗まんとならんのか……
よしよしw 今日はあがりはデカそうだな
534:名無しさん@お腹いっぱい。
18/02/15 20:16:20.69 .net
1111
2222
3333
という内容のファイルに対して,
• 3333 が見付かれば 3333 を,
• 見付からなければ 2222 を
• ⋮
という操作を施したいです。そして,これをパイプに繋ぎたいです。
私が考えたのは↓のスクリプトですが,
for q in 3333 2222 1111; do
cat <<-'EOF' |
1111
2222
3333
EOF
grep $q && break
done
難点があります。
1. パイプでファイルを渡せない。
2. 順番に依存している (実際のファイルでは 3333 が最後にくるとは限らない)
どうか助言願います
535:名無しさん@お腹いっぱい。
18/02/15 20:19:41.66 .net
あ,すいません。期待する動作は,
かりに理想のスクリプトを idea.sh として,
$ cat ./org.txt
2222
3333
1111
$ cat ./org.txt | idea.sh
3333
$ cat ./org.txt | sed -e '/3333/d' | idea.sh
2222
$ cat ./org.txt | sed -e '/3333/d' -e '/2222/d' | idea.sh
1111
という感じです。
536:名無しさん@お腹いっぱい。
18/02/15 21:01:11.15 .net
標準入力を受け取れるように作ればいいんじゃないの?
idea.sh
sed -e "/$1/d" < /dev/stdin
$ cat ./org.txt | ./idea.sh ‘3333’ | ./idea.sh ‘2222’ | ./idea.sh ‘1111’
537:名無しさん@お腹いっぱい。
18/02/15 21:10:36.33 .net
awk使うのが妥当。
awkが嫌なら、標準入力をファイルにコピーしてから複数回に分けて処理するしかないな。
538:名無しさん@お腹いっぱい。
18/02/15 21:26:45.83 .net
やりたい事はシンプルなのに標準入力使おうとしてるせいで妙に面倒になってるな
awkかgrepでよさそうだが
539:名無しさん@お腹いっぱい。
18/02/15 21:36:30.68 .net
事前にソートしたら?
540:名無しさん@お腹いっぱい。
18/02/15 21:38:59.09 .net
tacは?
541:名無しさん@お腹いっぱい。
18/02/15 21:41:36.03 .net
$PATHの中身って最初は空じゃないの?
$PATHをechoしてみたら,その中に
~/.bashrcや~/.bash_profileでexportされてるパス以外のモノが含まれてた
でも$PATHに初期値を設定できるならわざわざ~/.bashrcや~/.bash_profileでexportする必要なくない?
どうなってるのか教えてくれ
542:名無しさん@お腹いっぱい。
18/02/15 22:34:13.00 .net
OSによるけどinit.dの中とかlogin.confとかでデフォルトを設定する。
ここ書き換えると全ユーザに影響が出るので、個別設定は.bash_profileとかに書く。
exportするのは万一PATHなしで起動されてしまったとき用。
543:名無しさん@お腹いっぱい。
18/02/16 02:23:59.63 .net
>>504
> すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど
ipcalcコマンドで行けるんじゃね?
知ってるだけで使ったことないけど
他にもiptabとかipcountとかあるらしいな
544:名無しさん@お腹いっぱい。
18/02/16 08:44:35.62 .net
>>525
最初に自身で書いてたようなんで十分じゃないの?
パイプで渡せないというのが何を嫌がってんのかによるけど
テキストなら貯めてechoしたっていいんじゃ
DATA="$(cat -)" && cat $KEYWORDFILE | while read KEYWORD ; do ( echo "$DATA" | grep "$KEYWORD" ) && break ; done
データでかいから捜査対象の方を1パスで捜査したいってことなら
シェルスクリプトでがんばるより別のことでがんばろう
545:名無しさん@お腹いっぱい。
18/02/16 20:37:24.42 .net
>>533
ありがとやっと有益なレスが出たよ
他のやつは揃いも揃って無能な役立たずばっかりだから
546:名無しさん@お腹いっぱい。
18/02/16 20:41:32.04 .net
ショッアーーーーーーーーー!!!
さってビットコインを盗むか
547:名無しさん@お腹いっぱい。
18/02/16 21:23:29.93 .net
アホにレスした俺もアホだった。
やっぱアホはスルーに限る。
548:名無しさん@お腹いっぱい。
18/02/17 02:29:48.74 .net
>>533
俺も普通は ipcalc 使ってるけど最近は sipcalc というのもあるらしい。
紹介してくれてる iptab とか ipcount 含めて今度試してみようと思う
549:名無しさん@お腹いっぱい。
18/02/20 18:16:48.11 .net
シェルスクリプトの函数で扱える文字数に上限はないのでしょうか。
URLリンク(pubs.opengroup.org)
↑ここが多分公式の文書だと思うのですが,使用可能な文字の種類に言及こそすれ,文字数については触れていないように思いますが……
ファイル名などの上限と同じく255文字でしょうか?
550:名無しさん@お腹いっぱい。
18/02/22 02:57:44.82 .net
>>539
255文字かどうかは、質問するまでもなくすぐにわかると思いますよ。
551:名無しさん@お腹いっぱい。
18/02/22 05:46:35.30 .net
ワロタ、試せよwそして調べろよって話だよな
552:名無しさん@お腹いっぱい。
18/02/24 22:51:48.88 .net
$ :> "$(yes a | head -n 255 | tr -d '\n')"
$ :> "$(yes a | head -n 256 | tr -d '\n')"
sh: 1: cannot create aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: File name too long
553:名無しさん@お腹いっぱい。
18/02/25 16:39:26.69 .net
ファイル名の文字数上限はファイルシステムに依存する
554:名無しさん@お腹いっぱい。
18/03/03 23:53:36.62 .net
シェルスクリプトで有るコマンドを実行した時、
標準出力の内容を緑に、標準エラー出力の内容を
赤にしたいんだけどどうすればいい?
本当に聞きたいことはエスケープシーケンスではなく、
標準出力と標準エラーをそれぞれ別々に加工する方法ね
555:名無しさん@お腹いっぱい。
18/03/03 23:53:52.11 .net
ちなみにファイルに吐き出さずにやりたい
556:名無しさん@お腹いっぱい。
18/03/04 01:26:00.19 .net
お前にはなんか教えたくない
557:名無しさん@お腹いっぱい。
18/03/04 01:40:31.82 .net
なんかググればすぐ出てきそうな
558:名無しさん@お腹いっぱい。
18/03/04 02:21:55.51 .net
それがないんだよね。標準エラー出力を標準出力に
変えてしまうのは有るけど、それじゃ別々にやるのは不可能だし
559:名無しさん@お腹いっぱい。
18/03/04 16:46:18.09 .net
条件が厳しいからどうしてもシェルスクリプトでやりたいなら
先ずシェルを作るところから始めないといけない
560:名無しさん@お腹いっぱい。
18/03/05 00:43:32.66 .net
bashやzshなら簡単に出来るぞ
561:名無しさん@お腹いっぱい。
18/03/05 01:06:07.74 .net
出力を切り離してパイプで別々のコマンドでフィルタする程度じゃ全然駄目だから
こういうのを簡単にできると言い切る人はきっとものすごく優秀な頭脳の持ち主だと思う
562:名無しさん@お腹いっぱい。
18/03/05 01:28:58.62 .net
これは書いていなかった俺が悪いんだが、
bashやzshを使わずにposixの範囲でやりたいんだよね。
少なくともdashやashで動くものがほしい
でその方法が実際にあることは知ってるんだけど、
もっとシンプルな方法はないのだろうかと言うのと
俺がその方法をここに書いちゃうと
身バレしちゃうので書かなかった
563:名無しさん@お腹いっぱい。
18/03/05 12:24:32.78 .net
>>551
> 出力を切り離してパイプで別々のコマンドでフィルタする
だけやぞ
564:名無しさん@お腹いっぱい。
18/03/05 18:09:38.99 .net
POSIXに準拠したい気持は分かるけど,一次ファイルを作らないっていう謎の拘りが理解できない。
両立させるのは厳しいと思う。もうさ,
tempf="$(printf '%s%s%s%s' '/tmp/' "$(date +"%y%m%d%H%M%S")" '.' "$$")"; somecmd 2> "${tempf}" | \
printf '\e[1;32m%s\e[0m\n\e[1;31m%s\e[0m\n' "$(cat)" "$(cat "${tempf}")"; rm -rf "${tempf}"
でいいでしょ。もちろんPOSIX準拠。
あと偉そうなこと言うが,「身バレが怖いから持ってる (有益かもしれない) 情報を明かしません」って,
こっちからするとかなり不快だから,黙って何も知らないふりをしておいたほうがまだマシだよ。
565:名無しさん@お腹いっぱい。
18/03/05 18:12:03.21 .net
落ち着け
最初の質問の時点で性格の幼稚さは見え透いてるだろ
566:名無しさん@お腹いっぱい。
18/03/05 19:58:23.46 .net
>>550
やり方教えて
567:名無しさん@お腹いっぱい。
18/03/05 21:20:34.93 .net
>>554
> 一次ファイルを作らないっていう謎の拘りが理解できない。
書いてなかったのが悪いんだろうけど、一時ファイルを使うと
ストリーミングで処理できなくなるんだよ
つまり前のプログラムの出力が完了しないと次のプログラムが動かない
POSIX準拠はbusyboxで動かす必要があるからこれも必須
この二点は今回の質問には直接関係ないから理由じゃなくて制約として書いた
568:名無しさん@お腹いっぱい。
18/03/05 21:25:58.36 .net
そしてこっちの方で回答きたよ
くだらねえ質問はここに書き込め!Part 230
スレリンク(linux板:315番)
同じ文章なのになんでこう反応が違うんだろうね
同じ文章なんだからレスする側の問題があるだろうね
質問する側と回答する側、立場は対等だって言ったら怒りそう
569:名無しさん@お腹いっぱい。
18/03/05 21:38:48.22 .net
>>554
あとmktemp使ったほうが良いよ。
なんでぜったいにかぶらない方法があるのに
自分でなるべくかぶらないように努力するんだろう
結構多いよね。mktemp使ったほうがコード短くなるのに
570:名無しさん@お腹いっぱい。
18/03/05 21:48:54.27 .net
自分自身は何もしてないのになぜこうも態度をでかくできるのか
571:名無しさん@お腹いっぱい。
18/03/05 21:57:02.07 .net
別にでかくないでしょw ほかの人と一緒。
質問したからといってへりくだる必要はないと思ってるだけ
無知でもないしね
572:名無しさん@お腹いっぱい。
18/03/05 22:10:47.74 .net
マルチカスか
教えたがりを徹底的にこき使っとけ
ここには二度とくるなよ
573:名無しさん@お腹いっぱい。
18/03/05 22:45:20.19 .net
少なくとも聞く側の態度じゃぁないな
574:名無しさん@お腹いっぱい。
18/03/05 22:54:52.33 .net
聞く側はこういう態度を取らないといけないって
体育会系とか年功序列とか年上は敬え的な考え方だよ
今時はやらない
575:名無しさん@お腹いっぱい。
18/03/05 23:15:38.51 .net
545から漂う頭の悪さよ
576:名無しさん@お腹いっぱい。
18/03/05 23:21:32.35 .net
>>558 のそれ「解答」じゃないじゃん。
無理って言われてるんだぞ? 理解できてる?
577:名無しさん@お腹いっぱい。
18/03/05 23:23:14.97 .net
もういいじゃん
ほっとけよ
578:名無しさん@お腹いっぱい。
18/03/05 23:23:16.19 .net
どういう態度取るべきとは思わないけど、
相手を不快にさせたら得られるはずの回答も得られなくなる可能性が上がるよ。
それでよければご自由に。
579:名無しさん@お腹いっぱい。
18/03/05 23:26:33.25 .net
出力が色制御してきたら取り除いたりとか、マルチプロセスとかで変なところでブッタ斬り/ミックスされないように同期取ったりとか考えてたけど俺には無理だからもういいや
580:名無しさん@お腹いっぱい。
18/03/05 23:33:38.33 .net
>>566
やりたいこと
> 標準出力の内容を緑に、標準エラー出力の内容を
> 赤にしたいんだけどどうすればいい?
標準出力の内容を緑にする・・・簡単
標準エラー出力の内容を赤にする・・・?
>>558で明らかになったこと ・・・ 標準出力と標準エラー出力を入れ替える方法
ここから標準エラー出力の内容を赤にするには
標準出力と標準エラー出力を入れ替えれて
処理すればいいって気づくよね?
581:名無しさん@お腹いっぱい。
18/03/05 23:47:07.49 .net
>>570
ん?
それだと今度は標準出力が (標準エラー出力に複製されたので) パイプを通らなくなるから、
標準出力の内容 (今は標準エラー出力に出力されている) を緑にできないんじゃ?
582:もしかして同時じゃなくていいってこと?
583:名無しさん@お腹いっぱい。
18/03/06 00:20:35.13 .net
もうほっとけ
標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ
584:名無しさん@お腹いっぱい。
18/03/06 01:01:07.43 .net
>>571
片方ずつしか処理できないなら、
2回やれば両方できるだろ?
っていうかそれぐらいわかるだろw
585:名無しさん@お腹いっぱい。
18/03/06 01:01:45.64 .net
>>572
> 標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ
おせーておせーて
586:名無しさん@お腹いっぱい。
18/03/06 01:03:40.69 .net
|& ←このパイプは標準出力標準エラー出力ともに通すよ。
ただ質問者さんが望んでいるのは「標準出力か標準出力かが区別できる状態でのパイプ通過」だろうから、
それはちょっと無理なんじゃないかな。
あと態度がデカすぎる。一度死んだほうがいいと思う。
587:名無しさん@お腹いっぱい。
18/03/06 01:14:26.43 .net
>>573 まさかコマンド二回回すの? 標準出力と標準エラー出力分ける為だけに?
それ一時ファイル作るより余程冗長だぞw
もう一度シェルっていうかコンピュータの仕組みを勉強しなおしてきな
588:名無しさん@お腹いっぱい。
18/03/06 01:45:01.59 .net
だから一時ファイルを作るとストリーミングに
できなくなるからだめなんだって
さっきも書いたろ
589:名無しさん@お腹いっぱい。
18/03/06 01:47:17.52 .net
>>575
やっぱり>>558が今のところ一番シンプルな解みたいだね。
てか、標準出力と標準エラー出力を別々にファイルに吐き出せるんだから、
別々のプログラムにパイプでつなげられる機能があっても良いと思うんだけどね
590:名無しさん@お腹いっぱい。
18/03/06 02:48:45.93 .net
君たぶんだけど意思疎通に係わる障害持ってるから病院で診てもらったほうがいいよ。
知り合いにそういう調子の会話する人がいて、ある日会社で大きな事件を起こして辞めさせられたあと
病院で検査したらそういう系統の精神病だったからさ。
煽りとかじゃなくて、君はどうも社会で孤立してそうだから、助けになりたい。
591:名無しさん@お腹いっぱい。
18/03/06 03:23:52.46 .net
いや、おちょくってるだけだろ
まともに相手するだけ無駄やぞ
592:名無しさん@お腹いっぱい。
18/03/06 04:17:47.54 .net
ここに限らず、質問系のスレにたまに沸くアレでしょ
5chが過疎って最近あんま見てなかったから
なんか懐かしい感じするわw
593:名無しさん@お腹いっぱい。
18/03/06 10:26:50.47 .net
レス内容が煽りだけになったらおしまいw
594:名無しさん@お腹いっぱい。
18/03/06 20:25:23.40 .net
あっちで粘着してるみたいだな
久々にアレな奴を見たわ
595:名無しさん@お腹いっぱい。
18/03/06 21:23:37.44 .net
入力リダイレクトで複数ファイルを一度で流し込むのはどうしたら良いのですか?
596:名無しさん@お腹いっぱい。
18/03/06 21:44:48.81 .net
catしてパイプ
597:watarie
18/03/06 22:03:33.11 .net
よろしくお願いします。
mac で bashです。 mdfindからパイプつないだ先でcpしたら
検索が間に合わなかったのかコピーし損ねがでてきます。
再度コピーしそこねたファイル名リストを同じようにこれに掛けると、
幾つか成功していくつかはコピーし損ねます。
function readMdfind() {
while read LINE;
do
mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | xargs -J % cp -p "%" "$1" 2>/dev/null
done <${2}
引数の1はファイル名のリストが入ったテキストで、2はコピー先のフォルダになります。
ファイル名は殆どが一意にしてあるので、とりあえずヒットしたら良い感じです。
一度で取りこぼしのない良い方法はありませんでしょうか。
598:watarie
18/03/06 22:05:40.25 .net
引数の件1と2逆でした 惑わせてしまい申し訳ありません。
正しくは1がコピー先フォルダで2
599:がファイル名のリストです。
600:名無しさん@お腹いっぱい。
18/03/06 22:33:41.80 .net
>>585
回答ありがとうございます。
ということはそのまま
cat hoge huga | command
で、いいってことですか。なるほど。
レスつくまで色々ググって調べてみたのですが
command <( cat hoge huga )
でも全く同じ動作ですか?
601:名無しさん@お腹いっぱい。
18/03/06 23:27:44.61 .net
>>588
二番目の方法,たぶんコマンドラインで試して成功したから書き込んでるんだろうけど,
それはプロセス置換と言って Bash筆頭に幾つかのシェルの独自拡張だからシェルスクリプトにするときは
シェバンを #! /usr/bin/env bash か #! /bin/bash とかにする必要がある。
cat hoge huga | somecommand で代替できることに可搬性を犠牲にするのは避けたいだろうから
(つまり #! /bin/sh というシェバンを捨てるのは勿体無いということ)
<(cat hoge huga) は避けれる時は (特にシェルスクリプトで使う時) 避けといたほうがいいんじゃないかな。
602:586
18/03/06 23:29:38.39 .net
5行目あたりの日本語がおかしい。けど国語力ないので自然に直すの無理。
察してくれ。
603:名無しさん@お腹いっぱい。
18/03/06 23:43:28.43 .net
>>589
なるほど!
#!/bin/sh が必ずbashにリンクされてるとは限らないから、
拡張表現で書かなくて済む場合は確かに可搬性を優先した方がいいですね。
ありがとうございました。
604:名無しさん@お腹いっぱい。
18/03/06 23:49:32.51 .net
>>586
mdfindを知らんので問題解決に直接ならないけれど`done < ${2}`ではなく`done < "$2"`のほうがいいよ〜
もっと言うなら`cat "$2" | while read LINE;`のほうがいいかもね〜
* POSIX sh互換シェルは変数名に数字が来たらそこで読み取りを中断するので波括弧で変数名の範囲を明示しなくていい
* 変数$LINEに^Dとかが渡された時catコマンドと<リダイレクトで違いがある
短いんだけど参考: URLリンク(pubs.opengroup.org)
605:588
18/03/06 23:58:01.42 .net
あー!
さらに調べたら、よくわかりました。
#!/bin/sh でbashを起動したらbashの拡張とか使えなくなっちゃうんですね。
だからシェバンを書き換える必要があると…
そういう意味だったんですね。
(ちゃんとmanにかいてありました)
ためになりました。
606:名無しさん@お腹いっぱい。
18/03/07 07:20:57.39 .net
>>592
ん?どゆこと?
$ cat file | cmd
$ cmd < file
で違いがあるってこと?そうは思えないんだけど…
607:名無しさん@お腹いっぱい。
18/03/07 08:34:45.43 .net
$LINEに^Dってなんぞやってところだな
608:名無しさん@お腹いっぱい。
18/03/07 08:37:52.19 .net
>>586
まずはエラーをnullに落とさずに表示させろ
609:watarie
18/03/07 09:23:48.67 .net
>>592さん
610:watarie
18/03/07 09:32:33.42 .net
>>592さん
ありがとうございます。ちょっと英語で読解が難しいので時間を作って該当の箇所を読ませていただこうかと思います。
{2}の箇所を"2"に変更しました。
<の箇所をcatに変更しました。
非常に目に優しいくなりました。
読み込む箇所なので、怪しいと感じます。結果としては変わりませんでしたが、参照の箇所は興味がありますので読ませていただこうと思っています。英語で弱気になりますが^^;
ありがとうございます。
611:watarie
18/03/07 09:37:28.43 .net
>>596さん
すみません。確かにそうですよね。
初心者過ぎで逃げを当然にしてたバチがあたったようです。
吐き出したエラーは、
cp: /Volumes/Macintosh: No such file or directory
cp: HD: No such file or directory
などのファイルパスが、スペース区切りになってcp出来ませんでしたよというエラーでした。
ただ、検索に漏れた該当のファイルは何度めかにはヒットしますので上記のエラーとはならなかったということに。
spotlight特有のものだからと諦める�
612:オかないのか・・・ これがひょっとしたら手がかりになるかもしれませんが、わたしの力では全く・・・
613:watarie
18/03/07 09:45:34.86 .net
すみません、mdfindの検索結果のファイルパスが
スペースで割れてしまってcpに渡されたということでした。たぶん^^;
614:watarie
18/03/07 12:55:37.74 .net
解けました!ありがとうございます!
ダブルコーテーションを%の箇所で囲うのではなく、
1行取り出した先でパイプして囲えば良いと思い以下を試したところ出来ました。
mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | sed -e 's/^\(.*\)$/\"\1\"/' | xargs -J % cp -p % "$1" 2>/Users/mac10/Desktop/out
エラー出力素晴らしいです!
ありがとうございました!
615:名無しさん@お腹いっぱい。
18/03/07 18:25:56.09 .net
ずっとageっぱなし…(小声)
616:名無しさん@お腹いっぱい。
18/03/07 19:48:17.38 .net
mdfindとxargsに-0つけるのが定石だと思うけど、もう見てないかな。
617:名無しさん@お腹いっぱい。
18/03/08 00:41:50.66 .net
>>578
今更だけど、あるんだよね。誰も教えたくなかったんだね。
618:名無しさん@お腹いっぱい。
18/03/08 01:55:58.38 .net
まああるよね
619:名無しさん@お腹いっぱい。
18/03/08 07:30:07.37 .net
ヒントくらい出すか……。でもあいつに教えたくないんだよなぁ。
卑屈だけど、気持は分かるだろ?
パイプに名前(ry
620:名無しさん@お腹いっぱい。
18/03/08 16:44:02.99 .net
それ使うと出力側はこんな感じかな
while :;do sed -e 's/\(.*\)/^[[32m\1^[[m/' np1 & sed -e 's/\(.*\)/^[[33m\1^[[m/' np2 >&2; done
621:名無しさん@お腹いっぱい。
18/03/08 20:31:17.47 .net
>>607
野暮な指摘だが、sedを使わない
printf '\e[32m%s\[0m' "$(cat)"
の方が分かりやすくね? つーか printf ってそういう「整形した出力」の為のコマンドだろうし。
622:604
18/03/08 20:32:49.31 .net
>>695
ミスった… printf '\e[32m%s\e[0m' "$(cat)" だ。
こうすると "$(cat)" の部分で np1 を受けt[以下略]
623:名無しさん@お腹いっぱい。
18/03/08 20:51:46.21 .net
>>606
名前付きパイプ(mkfifo)はプロセスが2個あって
片方が出力側プロセス、片方側が入力側プロセスに
別れない限りストリーミングにすることができない
(同一プロセスでは出力しながら入力ができないため)
今回の場合、標準出力と標準エラー出力の2つがあるから
出力側プロセス1個と入力側プロセス2個の合計3プロセスが必要になる
つまり別プロセスとして起動しなければいけない
もちろん出力の完了待ちのwaitも必要だし、作成したパイプの削除も必要。
特にCTRL+Cで中断された場合とか
また万全を期してパイプ名が被ることも考慮してランダムな名前にしたい
ここまで言えば名前付きパイプを使った方法は実装するのに行数がかかり
面倒な方法だと言うことがわかるだろう?
また>>557で書いたとおりbusyboxで動かす必要があるのだが、
そもそもbusyboxでmkfifoが存在しない場合もある
↑俺にとってはこっちのほうが重要
624:名無しさん@お腹いっぱい。
18/03/08 21:00:55.81 .net
もう来なくていいよ
レス続けるならコテハン付けて
625:名無しさん@お腹いっぱい。
18/03/08 21:03:28.88 .net
粘着かよ
気持ち悪い
626:名無しさん@お腹いっぱい。
18/03/08 21:03:48.79 .net
レス続けたのは俺じゃないんだがw
627:名無しさん@お腹いっぱい。
18/03/08 21:57:56.36 .net
うわ。まだ居たのかこのキチガイ…
まあ放置が一番いいな。俺のこのレスも彼を発狂させる原因になるやもしれんし。
628:名無しさん@お腹いっぱい。
18/03/08 22:15:10.19 .net
まあ反論なく放置される(=俺の勝ち逃げ)という状況ってのが
俺にとっては一番であることには間違いないが
で俺がレスしたのは、放置してないからだよ?w
629:604
18/03/08 22:33:08.10 .net
>>609
あ、しまった printf '\e' は GNU/Linux じゃないと動かないみたい。
Debian使ってんのがバレてしまったw
FreeBSDとかでも動作させる為には printf '\033' とやる必要がある。
630:名無しさん@お腹いっぱい。
18/03/08 22:42:34.38 .net
>>609
出力 A 正常 出力 B 異常 出力 C 正常 の時
それだとACBまたはBACと表示されないか?
まぁそれで良ければ良いんだけど
631:名無しさん@お腹いっぱい。
18/03/08 23:32:13.81 .net
ガチでアレな奴が粘着してるな
ここまで気持ち悪い奴は滅多に見ない
632:名無しさん@お腹いっぱい。
18/03/08 23:54:18.50 .net
>>556
exec > >(sed -e 's/\(.*\)/^[[32m\1^[[m/')
exec 2> >(sed -e 's/\(.*\)/^[[33m\1^[[m/')
後は普通に処理を書けばおk
633:名無しさん@お腹いっぱい。
18/03/09 01:48:35.86 .net
どんだけ答え知りたいんだ
あっちのスレいけよこっちはこっちで楽しんでんだから
634:名無しさん@お腹いっぱい。
18/03/09 22:50:21.96 .net
おいおい勘違いするな
>>556はbashやzshでのやり方を聞いてる。
POSIXの範囲でやりたいと言ってる俺ではない
635:名無しさん@お腹いっぱい。
18/03/09 23:00:06.75 .net
そういや>>619で思い出したけど、
busyboxのsedってなんか動きがおかしいんだよね。
(echo 1; sleep 5; echo 2; sleep 5) | sed 's/a/a/'
例えばこれを実行すると、1が表示されるのは5秒後になる
debianだとすぐに表示されるのに。一行遅れて表示される
だからsedは今回の俺の用途には使えなくてreadを使ってる
636:名無しさん@お腹いっぱい。
18/03/10 00:28:42.71 .net
>>622
Ubuntu ではおかしいみたいですね。
Debian と openSUSE の busybox では記述通りの動きでした。
637:名無しさん@お腹いっぱい。
18/03/10 01:03:52.34 .net
>>623
WSL上のUbuntuは問題なかった。
busyboxはビルドによって色々変わるだろうけど
よく分からんね
638:名無しさん@お腹いっぱい。
18/03/10 01:06:54.08 .net
> openSUSE の busybox では記述通りの動きでした。
もしかして、sedはbusyboxじゃない方のsedになってない?
WSL上のUbuntuに入れたbusyboxのsed
↓つまりこれを実行するとやっぱり5秒後に1と表示される
(echo 1; sleep 5; echo 2; sleep 5) | busybox sed 's/a/a/'
やっぱりbusyboxが実装してる簡易版sedの問題な気がする
639:名無しさん@お腹いっぱい。
18/03/10 01:08:10.50 .net
まあもともとbusyboxってそういうものだし
とりわけ騒いだりはしないけどさ
640:名無しさん@お腹いっぱい。
18/03/10 02:15:25.24 .net
>>625
>>623 は busybox ash でシェルを起動して確認しています。
busybox sed 's/a/a/' にすると Debian も openSUSE も Ubuntu と同じ動作になりました。
641:名無しさん@お腹いっぱい。
18/03/10 09:07:03.16 .net
おーほんとだ。Busybox v1.22.1 on Debianでも同じような動きになる。
ここまでハッキリしたバグに遭遇したの久し振りだわ
単に離れてただけかもしれんが
642:名無しさん@お腹いっぱい。
18/03/10 09:38:16.90 .net
なにやら興味がある人がいるようでw
なんで俺の用途で使えないかというと、例えばこんな感じに
ユーザーのインタラクティブな入力を変換して出力したいから
↓ >(実際には画面に表示されない) の行がユーザーの入力
$ sh | sed 's/a/a/'
> echo 1
> echo 2
1
> echo 3
2
見ての通りユーザーが入力したコマンドの結果が一つ遅れて表示される
sedのよくあるユースケースでは問題ないんだろうけどね
643:名無しさん@お腹いっぱい。
18/03/10 12:15:21.67 .net
>>629
挙動が変わるツールは珍しいなと思いました。
busybox ash の中で sh | sed 's/a/a/' とすると、
Debian (v1.22.1) まとも
Ubuntu (v1.22.1) 遅れる
openSUSE (v1.21.1) まとも(sh プロンプトが表示される)
CentOS (v1.15.1) まとも(sh プロンプトが表示される)
Windows (v1.29.0) 遅れる
でした。
ビルド時に引いているライブラリの差異なのでしょうか...
644:名無しさん@お腹いっぱい。
18/03/10 12:28:15.59 .net
バッファリングが影響してそうなのかもしれないけど
正規表現の実装の都合な気もする。
はたまたカーネル�
645:ェ関係してるのかシェルの設定でなんかあるのか 正直、そういう違いが有るんだね。気をつけておくよと 事実を受け止めるぐらいでで深追いする気力はないw 話変わるけど、何もしない関数の定義、 foo() : もしくは、echoするだけの関数の定義 foo(): echo foo この書き方ってPOSIX準拠だよね? bashやzshではエラーになった
646:名無しさん@お腹いっぱい。
18/03/10 15:57:33.44 .net
>>631
foo() echo foo ならzshは理解するぞ
Bourne shell系はfoo() any-compound-commandだけ理解して
foo() any-commandは理解しない
647:名無しさん@お腹いっぱい。
18/03/10 18:45:48.71 .net
>>631
POSIX準拠なのかはよくわかりませんが、sh ならば
foo()
foo1() echo "$1"
で、sh でも bash でも動かすなら
foo() { :; }
foo1() { echo "$1"; }
でいけると思います。
648:名無しさん@お腹いっぱい。
18/03/10 23:10:12.04 .net
訂正
× foo(): echo foo
○ foo() echo foo
>>632
ごめん、zshでは試していなかった。
今zsh入れてたマシン壊れてるんだったw
別の環境にzsh入れたらたしかに動いたね
dash、ash、zsh では動いた
bashだけ動かなかった
649:名無しさん@お腹いっぱい。
18/03/10 23:17:51.17 .net
func() :
↑これ確かにシェバンを #! /bin/sh にすると通るけど
#! /usr/bin/env bash にすると撥ねられるな。
URLリンク(pubs.opengroup.org)
一応現行POSIXのシェル関数の定義はここに書いてあるけど、func() : は恐らく適合してるな。
多分bashの文法チェックが少しばかりおせっかいすぎるんだろう。
でもPOSIXに準拠した記法なのにエラーになるって嫌だなぁ
650:632
18/03/10 23:21:43.98 .net
あれ。yashでも「syntax error: a function body must be a compound command」って撥ねられるわ。
yashはかなり厳密にPOSIXに従ってる筈なんだけど…
651:名無しさん@お腹いっぱい。
18/03/11 00:25:29.87 .net
またちょうどよくシバンの話がw
シェルスクリプトのファイルを直接実行するのではなく
ライブラリとして他のスクリプトから読み込むだけの場合
シバンいらないよね? またその場合の拡張子ってどうしてる?
シンタックスハイライトとか自動で適用させたいんだけど
余計なものはできるだけ排除したい
652:名無しさん@お腹いっぱい。
18/03/11 00:28:14.22 .net
>>635
そうなんだよね。あと
> fname ( ) compound-command [io-redirect ...]
ここにio-redirectが書けたのがびっくり
どういう時に使えば良いんだろうか?
653:632
18/03/11 01:05:34.01 .net
>>638
俺は未インストールコマンドの処理に使ってる
check_command()
{
type "$1" > /dev/null 2>&1 || {
printf '%s%s\n' \
"$1" 'をインストールして下さい。'
exit 1
} >&2
return $?
}
check_command "curl"
こうするとエラーメッセージが標準出力に出ないからパイプ繋いでてもおかしなことになりにくい。
もっとも |& ←みたいなパイプなら無理だけど、そもそも標準エラー出力ごとパイプに使うなんて稀だろうという推測。
654:名無しさん@お腹いっぱい。
18/03/11 01:46:36.03 .net
>>639
いや、そうではなくて関数定義の最後に書けるんだなーって話
その例で言えば、こういう書き方ってこと
(関数全体を別の所に出力したいときには便利か、うーん使うかな?)
check_command()
{
type "$1" > /dev/null 2>&1 || {
printf '%sをインストールして下さい。\n' "$1"
exit 1
}
} >&2
# ついでにどうでもいい所を俺の趣味で変更したw
# exitもreturnに変えたい。もしくはexit_if_command_not_foundみたいな関数名にしたい
> もっとも |& ←みたいなパイプなら無理だけど、そもそも標準エラー出力ごとパイプに使うなんて稀だろうという推測。
/dev/ttyに出力するって手もあるよ
$ (echo stdout-a; echo stderr-a >&2; echo tty-a >/dev/tty) |& sed 's/a/b/'
tty-a
stdout-b
stderr-b
655:名無しさん@お腹いっぱい。
18/03/11 02:00:39.65 .net
>>636
yash覚えた
最低限機能しかももってないと思われるashで動けば
Bourne Shell 系全部でうごくだろうと思っていたから
そういうこともあるんだなーって思った
656:632
18/03/11 02:47:31.38 .net
>>640
あ,そういうことか。勘違いしてたわw それはちょっと使い道思い付かん
ところで,
return $?
↑これ消した理由なに? C言語をやってるせいか関数が終了ステータスを返さないと不安で仕方無いんだけども,
シェルスクリプトだと要らないのかな。今まで特にreturn行のせいで不具合が発生したこともなかったけれど。
657:名無しさん@お腹いっぱい。
18/03/11 11:42:23.58 .net
>>642
何も書いてなければ、その時点の$?がそのまま返るだろ?
> C言語をやってるせいか関数が終了ステータスを返さないと不安で仕方無いんだけども,
Ruby(最後に評価された値を返す)やってるとreturnなんて書かないんだがw
658:名無しさん@お腹いっぱい。
18/03/11 11:44:13.17 .net
> 今まで特にreturn行のせいで不具合が発生したこともなかったけれど。
まあ不具合は発生しないだろうね。
関数の最後でなにもしないなら、その時点の $? が返る所を
$?を取り出してreturnの引数で$?を返すようにしただけだからw
659:名無しさん@お腹いっぱい。
18/03/11 13:19:13.21 .net
Cとか化石みたいな言語使ってる人って無駄が多いよね
生産性悪w
660:名無しさん@お腹いっぱい。
18/03/11 13:41:26.14 .net
そういうこと言う奴って大体Cが出来ないコンプレックス抱えてるんだよなぁ
661:名無しさん@お腹いっぱい。
18/03/11 13:44:23.08 .net
Cから学べること多いのになぁ
662:名無しさん@お腹いっぱい。
18/03/11 13:59:18.74 .net
Cはハードに近いところを表現するのに適してるから絶対に無くならないけどね。
化石だけど生活には欠かせない燃料みたいなもんかな。
Cで書かれてるシェルのスレで否定しちゃうのはちょっと痛いね。
663:名無しさん@お腹いっぱい。
18/03/11 14:52:52.42 .net
俺はCを否定してないぞ。C以外を使っていれば
returnしなくていい言語だってあることを知るだろうし、
returnを書くことに拘る必要はないってことだ
664:名無しさん@お腹いっぱい。
18/03/11 16:03:25.28 .net
>>643
ruby使ってたってreturn書くことあるだろ
implicitとexplicitを状況に応じて使い分けることが大事
665:名無しさん@お腹いっぱい。
18/03/11 16:26:06.07 .net
山月記ってアニメ化されないの?
666:名無しさん@お腹いっぱい。
18/03/11 16:39:38.95 .net
>>650
ルビ厨の相手するなよ
667:名無しさん@お腹いっぱい。
18/03/11 17:07:11.55 .net
>>652
Cに対するコンプレックス同様
Rubyに対するコンプレックスも見苦しい
668:名無しさん@お腹いっぱい。
18/03/11 22:37:37.82 .net
>>650
returnを省略できる場合に、returnを書くことはないよ
669:名無しさん@お腹いっぱい。
18/03/12 09:24:03.09 .net
話をぶった切ってすまんが、なるべく依存関係が少ない・かつインタラクティブがある程度機能的なPOSIX互換シェルって何があるかな。
ksh98とかyashとかは使ったことあるけど、ああいう感じでもうちょい開発が盛んなやつとか知らない?
670:名無しさん@お腹いっぱい。
18/03/12 17:35:16.53 .net
連続足し算だけど
#!/bin/bash
while true
do
add=expr 0
read x
add=$(($add + $x))
echo '----------'
echo ' ' $add
done
でできるが
line 5: 0: command not found
1
----------
1
./tasizan-renzoku.bat: line 5: 0: command not found
2
----------
3
./tasizan-renzoku.bat: line 5: 0: command not found
と 気色悪い。 どうすれば正解なの?
671:名無しさん@お腹いっぱい。
18/03/12 17:39:55.92 .net
expr 0が何も囲われてないが大丈夫か
672:名無しさん@お腹いっぱい。
18/03/12 17:48:20.94 .net
すごいね、以下でエラーがなくなった。
#!/bin/bash
while true
do
add=(expr 0)
read x
add=$(($add + $x))
echo '----------'
echo ' ' $add
done
673:名無しさん@お腹いっぱい。
18/03/12 17:49:39.62 .net
エラーがなくなった が 足し算の合計もなくなった
674:名無しさん@お腹いっぱい。
18/03/12 17:58:34.26 .net
a=0
while read x; do
a=$((a + x))
echo ----------
echo ' ' $a
done
675:名無しさん@お腹いっぱい。
18/03/12 18:02:05.44 .net
ありがとう。 合計を外側で定義することがわからなかった。
こうなると �
676:d卓より便利!
677:名無しさん@お腹いっぱい。
18/03/12 22:12:41.08 .net
【大統領】 Japは我々の家畜 <大イスラエル帝国> 安楽に暮らせる奴隷 【議定書】
スレリンク(liveplus板)
678:名無しさん@お腹いっぱい。
18/03/12 23:38:42.01 .net
また頭がおかしいのがわいてきた
UNIX板荒らさないでほしい
679:名無しさん@お腹いっぱい。
18/03/13 00:08:45.00 .net
コマンドにローマ字で名前付けるやつは多かれ少なかれキチ成分が入ってる (経験からくる偏見)
680:名無しさん@お腹いっぱい。
18/03/15 11:45:55.61 .net
>>654
書いといた方がデバッグが楽だぞ
681:名無しさん@お腹いっぱい。
18/03/15 22:29:00.04 .net
>>665
あんまりそう思ったことないな
682:名無しさん@お腹いっぱい。
18/03/17 03:48:34.81 .net
for i in `seq -f %02g 1 10`
do
echo ${i}
done
このfor文の中で01の時に1、02の時に2を指定する方法ってありませんか?
簡潔に言うと先頭の0を取ったものを使いたいです
683:名無しさん@お腹いっぱい。
18/03/17 08:33:32.12 .net
>>665
どうしてデバッグが楽なのか知らんが、
少なくともprintfデバッグすると
終了コードが0に変わるからデバッグしづらいな
684:名無しさん@お腹いっぱい。
18/03/17 08:52:03.87 .net
>>667
2桁と決まっているなら
echo "${i##0}"
逆にしてこっちのほうが楽だと思うが
for i in $(seq 1 10)
do
printf "%02d\n" $i
done
685:名無しさん@お腹いっぱい。
18/03/17 08:52:41.56 .net
訂正
printf '%02d\n' "$i"
686:名無しさん@お腹いっぱい。
18/03/17 20:01:50.50 .net
拡張POSIX準拠らしいけど
echo {1..10} {01..10}
arch linuxだと普通のshでも展開してくれる
687:名無しさん@お腹いっぱい。
18/03/17 20:09:04.24 .net
ありがとうございます
688:名無しさん@お腹いっぱい。
18/03/17 21:41:11.21 .net
どういたしまして
689:名無しさん@お腹いっぱい。
18/03/17 22:02:49.28 .net
>>671
> arch linuxだと普通のshでも展開してくれる
してくれなかったぞ
690:名無しさん@お腹いっぱい。
18/03/17 23:05:13.47 .net
> 拡張POSIX準拠らしいけど
拡張POSIXってしう仕様があるの?
POSIXを拡張したもので、POSIX非準拠って意味だと思ってたんだけど?
691:名無しさん@お腹いっぱい。
18/03/18 00:55:12.66 .net
シェルスクリプトってさ、POSIXが標準だけど
実質bashがデファクトスタンダードって考えて良いのかな?
zshやfishを使っていてもbashはインストールされていると考えていい?
いや、あるコマンド作ろうと思ってるんだけど、
基本はPOSIXで動くようにするけど、bashがインストールされていれば
拡張機能が使えるようになる。という仕組みは
ほぼすべての人が拡張機能使えると考えて良いんだろうかなって思って
692:名無しさん@お腹いっぱい。
18/03/18 01:08:34.19 .net
>>676
bash前提はだめ。
BSD系にはデフォルトで入っていないし、後から入れてもパスが違う。
693:名無しさん@お腹いっぱい。
18/03/18 01:10:24.11 .net
>>674
ごめん
/bin/shのバージョン確認してみたら
GNU bash, バージョン 4.4.19だった
694:名無しさん@お腹いっぱい。
18/03/18 01:15:31.51 .net
>>677
いやbash前提じゃないんだ。POSIX シェル前提。POSIX シェルだけで動く。
だけどbashがインストールされていれば拡張機能が使える
その拡張機能っていうのも、本質的な機能じゃなくて
なんていうかな、同じコマンドで実行結果も同じだけど情報が詳細に取れるって感じ
BSD系といってもMacはデフォルトでbashになったのは知ってる。
パスに関してはシバンではなくbashコマンド経由で実行すれば良いと思ってる
(切替可能なようにするのでどっちみちシバンには頼らないと思うし)
695:名無しさん@お腹いっぱい。
18/03/18 01:16:39.04 .net
>>678
うん、たしかCentOS系はbashへのシンボリックリンクになってたはず
Debian系はdashなので拡張POISXは使えない
696:名無しさん@お腹いっぱい。
18/03/18 09:35:45.26 .net
POSIX規定外のことをPOSIX拡張って書くのは誤解のもとだからやめた方がいい。
伝統的にシェルにはなくてPOSIXで増えた機能のことをPOSIX拡張とよぶことがあるので、意味が真逆。
697:名無しさん@お腹いっぱい。
18/03/18 09:54:45.87 .net
可搬性を考えるとPOSIX準拠で書く癖をつけた方が
自分のためになるなあ
698:名無しさん@お腹いっぱい。
18/03/18 12:02:31.33 .net
★★★The● best way to eliminate too much gap between rich and poor, is to decide the tax● rate of the progressive tax in the referendum(Root Tax).★★★
この掲示板(万有サロン)に優●秀な書き込みをして、総額148万円の賞金をゲットしよう!(*^^)v
● URLリンク(jbbs.livedoor.jp) →リンクが不良なら、検索窓に入●れる!
699:名無しさん@お腹いっぱい。
18/03/18 14:34:15.18 .net
POSIX準拠で書くのは結構つらいので
デファクトスタンダードであるbash機能のみで書くといいよ
700:名無しさん@お腹いっぱい。
18/03/18 14:55:14.07 .net
>>679
いっその事
ps -p $$ -o comm=
でシェルを見て処理を分けるとか
701:名無しさん@お腹いっぱい。
18/03/18 15:53:34.91 .net
>>685
見分け方は本質的なところじゃないんで
俺にとってはどうでもいい話だけど、
シェルの判定ではなくて機能チェックで見分けるよ
ブラウザをUserAgentで判定するのではなく
使いたい機能が使えるかどうかで判定するのと似たようなやり方ね
> ps -p $$ -o comm=
ちなみにそれcygwinではエラーになった
702:682
18/03/18 22:58:03.92 .net
>>686
bash や zsh の機能を多く使うならば、その都度機能が動くかどうか判定するより、
起動シェルを見て分岐したほうが手間がないという意味合いで書きました。
cygwin の ps は -o オプションは無いのですね。失礼しました。
freebsd の環境で hoge.sh に ps -p $$ -o comm= と書いて、
/usr/local/bin/bash ./hoge.sh とすると、bash と表示されます。
(debian とかの ps でも ok)
cygwin の /bin/sh は /bin/bash なのでシェルを見るよりその都度使用する機能を判定するほうがよさそうですね。
703:名無しさん@お腹いっぱい。
18/03/19 06:19:05.05 .net
> > ps -p $$ -o comm=
> ちなみにそれcygwinではエラーになった
マジで!? POSIXでも定義されてるんだけどなぁ
704:名無しさん@お腹いっぱい。
18/03/19 14:02:30.98 .net
壊れた動画探しに
ffmpeg -i input -f null /dev/null 2>&1 | grep -m 1 -Ii error
ffmpeg -i input -f null /dev/null 2>&1 | grep -q -i error
とやったのですけれど、grepにヒットしてもffmpegの動画読み込みが止まりません。
grepにヒットしたらffmpegを止めるにはどうすればいいのか。
いいアイデアはないですか。
705:名無しさん@お腹いっぱい。
18/03/19 14:45:03.71 .net
この手が使えるのではないか
URLリンク(stackoverflow.com)
706:名無しさん@お腹いっぱい。
18/03/19 14:52:10.70 .net
ffmpeg -xerror は使えないんだっけ
‘-xerror (global)’
Stop and exit on error
707:名無しさん@お腹いっぱい。
18/03/20 00:41:07.30 .net
bashがどうしても使えない化石サーバは廃品回収へ
708:名無しさん@お腹いっぱい。
18/03/20 01:44:18.89 .net
新Mac板から来ました。
カレントディレクトリ内にaacファイルがあれば、mediainfoでHE-AACかLC-AACか調査して、
l-smash muxerを使ってHE-AACとLC-AACでは別のコマンドにてm4aに詰め込みたいです。
以下のままだと、aacが無い場合は
-----
aacファイルはありません.
-----
iTunes MP4 muxing mode
./test.sh: 3 行: 27777 Segmentation fault: 11 muxer -i $file ~
と表示されてしまいます。
AACファイルがない場合はmuxerのコマンドに進まないようにするにはどう書くといいん
709:でしょうか? 続く
710:名無しさん@お腹いっぱい。
18/03/20 01:44:57.18 .net
続き
#!/usr/bin/env bash
for file in *.aac; do
if [ -e $file ] ; then
# aacファイルが存在する場合
mediainfo $file | grep '^Format profile *: LC$' >/dev/null 2>&1
#es=$?
else
echo "-----"
# aacファイルが存在しない場合
echo "aacファイルはありません."
fi
#------------------------------------
# HE-AACだった場合
if [ $? = 1 ] ; then
echo "-----"
muxer -i $file?sbr --file-format m4a -o ${file%.aac}.m4a
fi
#------------------------------------
#AACの場合
if [ $? = 0 ] ; then
echo "-----"
muxer -i $file --file-format m4a -o ${file%.aac}.m4a
fi
# .aacで終わるファイル名だけど、HEでもLEでもどちらでも無い場合はどうやるんだろうか
done
711:名無しさん@お腹いっぱい。
18/03/20 06:10:19.91 .net
$1は本当に直前に実行したのコマンドのステータスしか入らないから注意
ifで比較する前にecho $1で何が入ってるか確かめてごらん
それをふまえて論理構造組み直しな
712:名無しさん@お腹いっぱい。
18/03/20 08:25:32.50 .net
「AACの場合」の前後の fi と if ... の2行を else に置き換えた上で、mediainfo コマンドの直後に
「HE-AAC だった場合」以降の if/else 文を移動、ではだめかな。
$? はすぐに別のコマンドの結果を格納してしまうので、
. mediainfo ...
. MEDIAINFO_RET=$?
. ...
. if [ $MEDIAINFO_RET = 0 ] ; then ...
みたいにコマンド実行直後に別の変数に回収してみるといいかもね。
713:名無しさん@お腹いっぱい。
18/03/20 10:06:24.97 .net
>>690,>>692
ありがとう
早速試してみる
714:名無しさん@お腹いっぱい。
18/03/20 11:43:54.77 .net
>>695
>>696
どうもありがとうございます
試してみます
ググっていたら、同じようにエラーが出る人がいて、testの[]を二重のカッコ[[]]にしてるようでした
今見返したら、es=$?でやってみようと思ってたのに途中になってたっぽいです
715:名無しさん@お腹いっぱい。
18/03/20 12:10:20.27 .net
for文脱出したいだけならbreak
716:名無しさん@お腹いっぱい。
18/03/21 02:19:38.65 .net
>>695
>>696
うまくいきました。
どうもありがとうございます。
>>699
書き換え前のスクリプトで試しましたが、こちらもエラーが出ませんでした。
どうもありがとうございます。
オライリーの入門bashには、ループの終了にbreakを使うのは良くないと書いてありました。
それはなぜでしょうか?
717:名無しさん@お腹いっぱい。
18/03/21 02:54:50.71 .net
>>700
今回みたいなエラー処理の場合はexitした方が良いかもね
718:名無しさん@お腹いっぱい。
18/03/21 09:34:02.98 .net
>>701
なるほどです
719:名無しさん@お腹いっぱい。
18/03/21 23:13:42.44 .net
>>693
>>694
>>696
上の場合はmediainfoの終了ステイタスで判断して次にさらにif~と進んでいるんですが、
LCかHE-AACかそのどっちでも無いかをcace~muxer~っとやるほうが確実なのかなと思いました。
その場合、
mediainfo $FILE | grep -E '^Format profile *: LC$|^Format profile *: HE-AAC / LC$'
で出てきた文字列をcaseに渡したいんですが、
case HOGE in
"*: LC" ) muxer~;;
"*: HE-AAC / LC" ) muxer~;;
* ) "AACではない";;
ecase
だった場合、HOGEにはどう書けばいいんでしょうか?
720:名無しさん@お腹いっぱい。
18/03/22 00:30:54.25 .net
>>703
HOGE=$(mediainfo $FILE | grep -E '^Format profile' | sed -E 's/.*: (.*)/\1/‘)
mediainfoの出力をgrepでFormat profileの行だけに絞って
それをsedで必要な箇所だけ置換して変数に入れてる
円マークはバックスラッシュに変換してね
721:名無しさん@お腹いっぱい。
18/03/22 00:40:17.02 .net
sedじゃなくbashのstring manipulationを使いたければ
HOGE=$(mediainfo “$FILE” | grep -E '^Format profile')
case ${HOGE##*:} in
…
${HOGE##*:} はHOGE内の文字列を先頭から”:”まで最長一致で取り除く
722:名無しさん@お腹いっぱい。
18/03/22 00:59:34.53 .net
自己レス
HOGE=`mediainfo $FILE | grep -E '^Format profile *: LC$|^Format profile *: HE-AAC / LC$'`
case $HOGE in
これで大丈夫�
723:サうですね
724:名無しさん@お腹いっぱい。
18/03/22 01:02:19.80 .net
>>704
>>705
どうもありがとうございます
今触れないので、あとでやってみます!
725:700
18/03/22 01:05:43.95 .net
>>703
>>706
>>707
の3つは私です
726:名無しさん@お腹いっぱい。
18/03/22 01:26:33.69 .net
文字列を1文字ずつ処理するってどうやれば良いのかな?
727:名無しさん@お腹いっぱい。
18/03/22 01:26:58.52 .net
なるべく速い方法で
728:名無しさん@お腹いっぱい。
18/03/22 01:40:38.44 .net
先頭の一文字を削除するっていうのはできるんだけどなぁ。
一文字削除したらな、その削除した一文字を取りたいものだ
あ、POSIXの話ね
729:名無しさん@お腹いっぱい。
18/03/22 01:43:14.01 .net
あ、これでいけるのか
str=abcdefg
last=${a##?}
echo ${str%%$last}
730:名無しさん@お腹いっぱい。
18/03/22 01:43:57.68 .net
exprが柔軟かな
731:名無しさん@お腹いっぱい。
18/03/22 02:17:21.19 .net
grep -o .
732:名無しさん@お腹いっぱい。
18/03/22 02:28:14.30 .net
>>709
速いかどうか分からんけど awk でやるなら
printf 'Hello\nWorld\n' | awk -F '' '{for(i=1;i<=NF;i++) print $i}'
とかかなぁ。grep -Eo '.' ってのもあるけど
for c in $(printf 'Hello\nWorld\n' | grep -Eo '.')
do
echo "$c"
done
あとは fold コマンドとかで。
printf 'Hello\nWorld\n' | fold -w1
733:名無しさん@お腹いっぱい。
18/03/22 02:37:08.12 .net
間違えてた
str=abcdefg
last=${str##?}
echo ${str%%$last}
734:名無しさん@お腹いっぱい。
18/03/22 02:39:35.06 .net
>>715
後出しだけど、意外と改行まで1文字として扱うのは大変なんだよね
735:名無しさん@お腹いっぱい。
18/03/22 02:48:27.27 .net
改行を扱いたい場合は bash か zsh の read かな。
printf 'Hello\nWorld\n' | while read -r -n 1 c;do echo "$c"; done
awk の場合は RS に '\0' をセットすればいいかも
printf 'Hello\nWorld\n' | awk -vRS='\0' -F '' '{for(i=1;i<=NF;i++) print $i}'
736:名無しさん@お腹いっぱい。
18/03/24 18:09:58.40 .net
公開するようなシェルスクリプトって--helpオプションくらいは付けたほうがいいかな。
問答無用で第一引数をファイル名やらURLやらだと解釈するほうがはるかに楽だし簡潔になるんだけども。
737:名無しさん@お腹いっぱい。
18/03/24 18:17:47.94 .net
オプションで思い出した。
オプションの解析めんどくせーとか思って他の言語のライブラリを参考に
オプション解析のライブラリを作ろうかと思ってるんだが、
getoptやgetopts程度だと使いやすくなった気がしないし、
作った所でそんなに簡単に書けるようなもんでもなさそうで、
何のためにコレが必要なんだ?って思いなした結果
他言語にあるようなライブラリは、--helpを半自動で
生成してくれるものだと思ってたりする
でももう少しオプションの解析楽にならないかな?
どうすればいいんだろう
738:名無しさん@お腹いっぱい。
18/03/25 01:51:02.53 .net
ある文字列のハッシュ値を求めたいんですけど
どのLinux/UNIX/FreeBSDでも標準ではいってる
ハッシュ化コマンドって何がありますかね?
それからPOSIX標準コマンド?みたいなものってあるんですか?
どこでも絶対はいっていなければいけないコマンドとか
739:名無しさん@お腹いっぱい。
18/03/25 02:25:15.03 .net
POSIXってこれ?
URLリンク(pubs.opengroup.org)
740:700
18/03/25 02:29:04.48 .net
DATE=`date '+%Y%m%d%H%M'`
TMPDIR='/tmp'
BAKDIR='$TMPDIR/backup_%DATE'
#echo "$DATE"
mkdir $TMPDIR/backup_$DATE
cp -rfp /home/atashi/doc $BAKDIR
これだとcpが出来ないんですがどこが間違えていますか?
741:名無しさん@お腹いっぱい。
18/03/25 02:29:55.81 .net
ない
742:700
18/03/25 02:34:52.38 .net
最後の行は
cp -rfp /home/atashi/doc $BAKDIR/docです
743:名無しさん@お腹いっぱい。
18/03/25 02:41:09.90 .net
>>723
3行目の%が間違ってるよね?
あと
4行目でデバッグ用にechoすべきは$BAKDIR
5行目はmkdir “$BAKDIR”
一つ一つ確認したほうがいいよ
744:名無しさん@お腹いっぱい。
18/03/25 02:44:00.47 .net
>>723
BAKDIR='$TMPDIR/backup_%DATE'
こうじゃない?
BAKDIR='$TMPDIR/backup_$DATE'
745:名無しさん@お腹いっぱい。
18/03/25 02:44:27.17 .net
あ、かぶったw
746:700
18/03/25 03:03:57.65 .net
>>726
>>727
ほんとだ。
$に直したんですが、
DATE=`date '+%Y%m%d%H%M'`
TMPDIR='/tmp'
BAKDIR='$TMPDIR/backup_$DATE'
echo "$TMPDIR"
#mkdir "$BAKDIR"
echo "$BAKDIR"
を実行すると、
$ ./hoge.sh
/tmp
$TMPDIR/backup_$DATE
になってしまって、ダメでした。
mkdir "$BAKDIR"
を入れると、カレントディレクトリに「$BAKDIR」というフォルダが出来てしまいました
747:名無しさん@お腹いっぱい。
18/03/25 03:13:28.38 .net
>>729
シェル シングルクォートとダブルクォートの違い 辺りでググってみて
748:700
18/03/25 03:17:52.62 .net
DATE=`date '+%Y%m%d%H%M'`
TMPDIR='/tmp'
BAKDIR="$TMPDIR/backup_$DATE"
echo "$TMPDIR"
mkdir "$BAKDIR"
echo "$BAKDIR"
>>730
出来ました!
どうもありがとうございました。
$ ./test.sh
/tmp
/tmp/backup_201803250316
749:700
18/03/25 04:07:06.26 .net
上の後に
cp -rfp /home/hoge/doc $BAK_DIR/doc
zip -r $BAK_DIR.zip $BAK_DIR
をやるとzipを解凍してみたら
tmpフォルダが出来てその中にbackup_201803250348フォルダが出来ているんですが、
zipを解凍したらbackup_201803250348フォルダが出来るようにするにはどうしたらいいですか?
750:名無しさん@お腹いっぱい。
18/03/25 09:39:54.86 .net
( cd $TMPDIR ; zip -r backup_$DATE.zip backup_$DATE )
751:名無しさん@お腹いっぱい。
18/03/25 16:41:32.60 .net
すみません、timeoutコマンドのうまい使い方を教えてください
シェルの中でtimeoutでタイムアウトさせた場合、シェル丸ごとごと落ちてしまいます
タイムアウトさせた上で処理を分岐させて継続して処理させるにはどう制御したら良いのでしょうか
timeout unzip || func_hoge
といった感じで一応回避できたのですが、関数処理が終わると丸ごとプロセスキルされる事には変わらず、綺麗に終わらすことができません
752:名無しさん@お腹いっぱい。
18/03/25 16:54:52.07 .net
timeoutコマンドを実行したシェルは落ちないよ
$ timeout 1 unzip … としたときに
タイムアウト後にunzipのプロセスがキルされると困るって話??
753:名無しさん@お腹いっぱい。
18/03/25 17:56:56.40 .net
URLリンク(linuxjm.osdn.jp)
コマンドがタイムアウトした場合で、かつ --preserve-status が設定されていない場合、 終了ステータスは 124 になります。
754:名無しさん@お腹いっぱい。
18/03/25 19:03:35.42 .net
>>735
紛らわしい書き方をしてすみませんでした
シェルスクリプトです
今環境がないので具体的な結果を示せませんが、例えば以下のような処理を実行するとtimeoutがプロセスを落とした(?)メッセージがコンソール出力された後、後続のechoは何も表示されません
#/bin/bash
timeout 1 unzip piyo.zip
if [ $? -ne 0 ]; then
echo hoge
else
echo fuga
fi
echo owata
755:名無しさん@お腹いっぱい。
18/03/25 19:19:17.27 .net
>>737
んー。こっちでは表示されるけれども…
Script started on 2018年03月25日 19時18分12秒
testuser@debian:~/var/tmp/temp$ cat ./to.sh
#! /bin/sh -
timeout 1 sleep 10
if [ $? -ne 0 ]; then
echo hoge
else
echo fuga
fi
echo owata
testuser@debian:~/var/tmp/temp$ ./to.sh
hoge
owata
testuser@debian:~/var/tmp/temp$ exit
exit
Script done on 2018年03月25日 19時18分30秒
756:700
18/03/25 21:40:43.57 .net
>>733
どうもありがとうございます
757:名無しさん@お腹いっぱい。
18/03/25 22:27:12.96 .net
ていうか
BAKDIR
がいつから
BAK_DIR
になったんだ
758:名無しさん@お腹いっぱい。
18/03/25 22:38:36.41 .net
このコードってvalidですよね?
やってること・・・foo関数が最初に呼ばれた時に
OS判定(相当)のことをして、OS毎に処理を切り替えて実行
関数を上書きすることで、次回以降は判定することなく処理実行
#!/bin/sh
foo() {
echo first call
os_type=linux
[ $os_type = linux ] && \
foo() {
echo linux
}
[ $os_type = mac ] && \
foo() {
echo mac
}
foo
}
foo
foo
759:名無しさん@お腹いっぱい。
18/03/25 22:53:06.94 .net
>>738
なんででしょうね(´;ω;`)
もう一度見直してみます
760:名無しさん@お腹いっぱい。
18/03/26 08:52:17.43 .net
くだらないtypoしていたに一票。
変だと思ったら、
sh -x スクリプト名
でなにやってるか眺めてみることをオススメする。
勿論、
761:標準エラーを /dev/null に捨てたりするのもナシで。
762:名無しさん@お腹いっぱい。
18/03/26 11:04:26.16 .net
再確認してきました
実際にはリンク先の48,49行目のログ整形のための処理で問題が起こっているようです
timeout自体の問題ではないので一旦取り下げます、ご協力ありがとうございました
URLリンク(pastebin.com)
763:名無しさん@お腹いっぱい。
18/03/26 11:13:47.05 .net
ワロタw
fail() {
case "$1" in
0)
echo "Info :$2"
;;
1)
echo "Warn :$2"
;;
2)
echo "Error:$2"
;;
3)
echo "Success :$2"
exit 0
;;
4)
echo "Fatal:$2"
exit 1
;;
略
esac
}
764:名無しさん@お腹いっぱい。
18/03/26 11:16:57.86 .net
failwww ひどいなw
fail 0 " **** test start ****"
WAIT_SEC=5
time timeout -sKILL ${WAIT_SEC} unzip -t /home/xxxx/crypto.zip
if [ $? -ne 0 ]; then
fail 2 "hage"
else
fail 0 "hoge"
fi
fail 3 "**** test end ****"
765:名無しさん@お腹いっぱい。
18/03/26 11:20:23.93 .net
おお、是非原因と対処法も書いてってください
766:名無しさん@お腹いっぱい。
18/03/26 11:22:56.42 .net
failなのにsuccessなのか…
767:名無しさん@お腹いっぱい。
18/03/26 11:47:56.48 .net
>>747
原因・・・他人のコードを理解せずにパクって、行き当たりばったりにコード書き加えて、終わらすこと
対処法・・・ちゃんとコード読んで理解して無駄なものをなくせ
768:名無しさん@お腹いっぱい。
18/03/26 12:55:45.54 .net
>>749
全く耳が痛い、実際そういうレベルだけど頑張るよ(´・ω・`)
> >は実際わけわからずに使ってるし
769:名無しさん@お腹いっぱい。
18/03/27 02:35:57.99 .net
あー、ちくしょ、
ローカルでもリモートでも使うスクリプトを
置くディレクトリ名が決まらない
ローカルだけで使うスクリプト
リモートだけで使うスクリプト
両方で使うスクリプト
どういうディレクトリ構成にしよう
Windowsも考慮したいから
シンボリックリンクは使いたくない
770:名無しさん@お腹いっぱい。
18/03/27 02:56:48.81 .net
またお前か
771:名無しさん@お腹いっぱい。
18/03/27 19:30:16.58 .net
>>751
~/share/public/
に置いてる。
772:名無しさん@お腹いっぱい。
18/03/27 20:19:33.81 .net
なんか冗長な感じ
773:名無しさん@お腹いっぱい。
18/03/27 21:50:15.67 .net
うちは~/share/public/sbin/
774:名無しさん@お腹いっぱい。
18/03/27 22:20:21.84 .net
あんまり良くないのかもしれんが……
/srvを特定の一般ユーザに対して書込可にして、
/srv/git/github.com/<account name>/dotfiles (GitHubで管理するなら)
にしてる。
775:名無しさん@お腹いっぱい。
18/03/27 23:56:34.98 .net
>>753そんなことしてまで/srvに置く意味あんの
776:名無しさん@お腹いっぱい。
18/03/28 14:37:11.36 .net
>>751
なぜ/usr/remote/binじゃダメなのか 理由を知りたい
777:名無しさん@お腹いっぱい。
18/03/29 01:01:26.37 .net
>>758
逆になぜ/usr/remote/binなのかの理由が知りたい。
なにかのアプリケーションが使うの?
778:名無しさん@お腹いっぱい。
18/03/29 02:51:11.17 .net
findのprint0やった、NULL文字区切りのファイル名一覧って
POSIXのreadじゃ読み取れないんだな-dオプションがないから
つーことはファイル名に改行、そのた制御文字が入るかもしれないことを
考慮するとPOSIXの範囲じゃ対応不可能ってことなのか
779:名無しさん@お腹いっぱい。
18/03/29 03:44:39.70 .net
>>760
なんで対応不可能だと思うんだよw
じゃあどうして「POSIXが」ファイル名に改行含め制御文字を許可してるんだよって話。
C99どころかシェルコマンド(awk)レベルで余裕で扱えますが
780:名無しさん@お腹いっぱい。
18/03/29 09:47:58.90 .net
>>761
ひねくれた回答はいらないよ
ここはシェルスクリプト
POSIX shが対応してないって言ってんの
781:名無しさん@お腹いっぱい。
18/03/29 09:57:03.22 .net
\0区切りもshそのものの機能じゃなくね?
782:名無しさん@お腹いっぱい。
18/03/29
783:10:03:19.16 .net
784:名無しさん@お腹いっぱい。
18/03/29 10:30:24.37 .net
\0区切りがなんのコマンドによる出力かどうかは
今は関係ないんだよ。
いろんなコマンドでよく使われる\0区切りのデータに
shが対応していないって話をしているんだから
で調べてみたらawkもポータブルな方法では
\0区切りには対応してないようだな
785:名無しさん@お腹いっぱい。
18/03/29 11:35:38.17 .net
>>765
> いろんなコマンドでよく使われる\0区切りのデータ
って何がある?
786:名無しさん@お腹いっぱい。
18/03/29 11:37:07.53 .net
>>765
shはポータブルな方法で対応してるぞ。
xargsは確かに対応してないが。
findについては>>764が書いてるように、遅くはなるもののポータブルな解はある。
xargs と sh の区別はつけようぜ。
787:名無しさん@お腹いっぱい。
18/03/29 11:39:23.23 .net
MacOSのsed (bsd)も\0扱えないっぽい
まあもともと\0はC言語の終端文字だしな
そんなのが扱えるほうがおかしいか
788:名無しさん@お腹いっぱい。
18/03/29 11:44:03.16 .net
>>767
xargsの話は誰もしてない
shは\0を変数に入れられない
shがポータブルな方法で\0文字に対応してるってのは嘘
(forは\0を使わない)
789:名無しさん@お腹いっぱい。
18/03/29 11:51:22.35 .net
>>769
改行じゃなくて \0 の話をしてるのか。
POSIXではシステムコールの仕様上、 \0 をファイル名に入れることは決してできない。
だから、ファイル名に \0 を使う話をすること自体が、POSIX的にナンセンス。
790:名無しさん@お腹いっぱい。
18/03/29 11:55:53.07 .net
>>770
> ファイル名に \0 を使う話
はお前しかしていないよ。
791:名無しさん@お腹いっぱい。
18/03/29 11:59:26.26 .net
>>771
発端の>>761はファイル名に改行を入れる話だろう。
ファイル名中の改行をポータブルに扱う方法はshにある。
みんなちゃんとそう指摘してるのに君だけ勘違いしてる。
792:名無しさん@お腹いっぱい。
18/03/29 12:20:16.06 .net
は?バカなのかこいつ?
793:名無しさん@お腹いっぱい。
18/03/29 12:38:36.81 .net
なんで改行の入ったファイル名を扱うために、シェルが \0 を文字列の一部として
扱う必要があるなんていうアサッテの発想にいたるのか…
(まあプログラミングができないせいで分かってないんだろうけど)
もうちょっと態度がまともなら、ポータブルなやり方を具体的に教えてやっても
いいが、 >>773 みたいな煽りは嫌いなので教えてやらないw
794:名無しさん@お腹いっぱい。
18/03/29 12:40:47.01 .net
findのprint0で出てくる/0区切りのファイル名一覧がreadで読み取れないンゴ…
795:名無しさん@お腹いっぱい。
18/03/29 12:50:37.16 .net
そもそも -print0 の出力をそのままの形でポータブルに
read で読めるんじゃないかと考えること自体が間違い。
POSIXで規定されている read のオプションは -r だけで
-d はないので、改行を含む文字列をそのままで read だけを
使って単一の文字列変数に取り込むことは、ポータブルには
できない。
もちろん、だからといって sh で改行を含む文字列を扱えない
なんてことにはならないのは言うまでもない。
796:名無しさん@お腹いっぱい。
18/03/29 12:54:44.85 .net
>>774
無知ごくろうさんw
797:名無しさん@お腹いっぱい。
18/03/29 12:56:17.18 .net
やっと>>760が言ったことに追いついたのか?
798:名無しさん@お腹いっぱい。
18/03/29 13:05:43.31 .net
773って757が言ったことを冗長に言い換えただけだなw
799:名無しさん@お腹いっぱい。
18/03/29 13:11:26.76 .net
>>774
>なんで改行の入ったファイル名を扱うために、シェルが \0 を文字列の一部として
>扱う必要があるなんていうアサッテの発想にいたるのか…
find作ったやつに言えw
800:名無しさん@お腹いっぱい。
18/03/29 13:21:49.15 .net
> findのprint0やった、NULL文字区切りのファイル名一覧って
> POSIXのreadじゃ読み取れないんだな-dオプションがないから
ここまでは正しい。しかし、
> つーことはファイル名に改行、そのた制御文字が入るかもしれないことを
> 考慮するとPOSIXの範囲じゃ対応不可能ってことなのか
これが xargs の文章であれば、その通り。
しかしこれが sh についての文章であれば、完璧に間違い。
これだけ繰り返し指摘されてもいまだに理解できないような奴でも
Bourne shell でスクリプトを書くようになったんだなという変な感慨があるな。
801:名無しさん@お腹いっぱい。
18/03/29 13:24:21.25 .net
>>781 >これが xargs の文章であれば、その通り。 だれもxargsの話なんかしてない。(2回目)
803:名無しさん@お腹いっぱい。
18/03/29 13:26:26.64 .net
>>781はxargsが\0扱えることも知らなそうw