シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
http://echo.2ch.net/test/read.cgi/unix/1439563321/
シェルスクリプト総合 その26 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/03/20(月) 12:07:26.41
2018/02/15(木) 20:19:41.66
あ,すいません。期待する動作は,
かりに理想のスクリプトを 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
という感じです。
かりに理想のスクリプトを 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
という感じです。
2018/02/15(木) 21:01:11.15
標準入力を受け取れるように作ればいいんじゃないの?
idea.sh
sed -e "/$1/d" < /dev/stdin
$ cat ./org.txt | ./idea.sh ‘3333’ | ./idea.sh ‘2222’ | ./idea.sh ‘1111’
idea.sh
sed -e "/$1/d" < /dev/stdin
$ cat ./org.txt | ./idea.sh ‘3333’ | ./idea.sh ‘2222’ | ./idea.sh ‘1111’
2018/02/15(木) 21:10:36.33
awk使うのが妥当。
awkが嫌なら、標準入力をファイルにコピーしてから複数回に分けて処理するしかないな。
awkが嫌なら、標準入力をファイルにコピーしてから複数回に分けて処理するしかないな。
2018/02/15(木) 21:26:45.83
やりたい事はシンプルなのに標準入力使おうとしてるせいで妙に面倒になってるな
awkかgrepでよさそうだが
awkかgrepでよさそうだが
526名無しさん@お腹いっぱい。
2018/02/15(木) 21:36:30.68 事前にソートしたら?
2018/02/15(木) 21:38:59.09
tacは?
528名無しさん@お腹いっぱい。
2018/02/15(木) 21:41:36.03 $PATHの中身って最初は空じゃないの?
$PATHをechoしてみたら,その中に
~/.bashrcや~/.bash_profileでexportされてるパス以外のモノが含まれてた
でも$PATHに初期値を設定できるならわざわざ~/.bashrcや~/.bash_profileでexportする必要なくない?
どうなってるのか教えてくれ
$PATHをechoしてみたら,その中に
~/.bashrcや~/.bash_profileでexportされてるパス以外のモノが含まれてた
でも$PATHに初期値を設定できるならわざわざ~/.bashrcや~/.bash_profileでexportする必要なくない?
どうなってるのか教えてくれ
2018/02/15(木) 22:34:13.00
OSによるけどinit.dの中とかlogin.confとかでデフォルトを設定する。
ここ書き換えると全ユーザに影響が出るので、個別設定は.bash_profileとかに書く。
exportするのは万一PATHなしで起動されてしまったとき用。
ここ書き換えると全ユーザに影響が出るので、個別設定は.bash_profileとかに書く。
exportするのは万一PATHなしで起動されてしまったとき用。
530名無しさん@お腹いっぱい。
2018/02/16(金) 02:23:59.63 >>501
> すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど
ipcalcコマンドで行けるんじゃね?
知ってるだけで使ったことないけど
他にもiptabとかipcountとかあるらしいな
> すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど
ipcalcコマンドで行けるんじゃね?
知ってるだけで使ったことないけど
他にもiptabとかipcountとかあるらしいな
531名無しさん@お腹いっぱい。
2018/02/16(金) 08:44:35.62 >>522
最初に自身で書いてたようなんで十分じゃないの?
パイプで渡せないというのが何を嫌がってんのかによるけど
テキストなら貯めてechoしたっていいんじゃ
DATA="$(cat -)" && cat $KEYWORDFILE | while read KEYWORD ; do ( echo "$DATA" | grep "$KEYWORD" ) && break ; done
データでかいから捜査対象の方を1パスで捜査したいってことなら
シェルスクリプトでがんばるより別のことでがんばろう
最初に自身で書いてたようなんで十分じゃないの?
パイプで渡せないというのが何を嫌がってんのかによるけど
テキストなら貯めてechoしたっていいんじゃ
DATA="$(cat -)" && cat $KEYWORDFILE | while read KEYWORD ; do ( echo "$DATA" | grep "$KEYWORD" ) && break ; done
データでかいから捜査対象の方を1パスで捜査したいってことなら
シェルスクリプトでがんばるより別のことでがんばろう
532名無しさん@お腹いっぱい。
2018/02/16(金) 20:37:24.42533名無しさん@お腹いっぱい。
2018/02/16(金) 20:41:32.04 ショッアーーーーーーーーー!!!
さってビットコインを盗むか
さってビットコインを盗むか
534名無しさん@お腹いっぱい。
2018/02/16(金) 21:23:29.93 アホにレスした俺もアホだった。
やっぱアホはスルーに限る。
やっぱアホはスルーに限る。
2018/02/17(土) 02:29:48.74
2018/02/20(火) 18:16:48.11
シェルスクリプトの函数で扱える文字数に上限はないのでしょうか。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05
↑ここが多分公式の文書だと思うのですが,使用可能な文字の種類に言及こそすれ,文字数については触れていないように思いますが……
ファイル名などの上限と同じく255文字でしょうか?
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05
↑ここが多分公式の文書だと思うのですが,使用可能な文字の種類に言及こそすれ,文字数については触れていないように思いますが……
ファイル名などの上限と同じく255文字でしょうか?
2018/02/22(木) 02:57:44.82
>>536
255文字かどうかは、質問するまでもなくすぐにわかると思いますよ。
255文字かどうかは、質問するまでもなくすぐにわかると思いますよ。
2018/02/22(木) 05:46:35.30
ワロタ、試せよwそして調べろよって話だよな
2018/02/24(土) 22:51:48.88
$ :> "$(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
$ :> "$(yes a | head -n 256 | tr -d '\n')"
sh: 1: cannot create aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: File name too long
2018/02/25(日) 16:39:26.69
ファイル名の文字数上限はファイルシステムに依存する
541名無しさん@お腹いっぱい。
2018/03/03(土) 23:53:36.62 シェルスクリプトで有るコマンドを実行した時、
標準出力の内容を緑に、標準エラー出力の内容を
赤にしたいんだけどどうすればいい?
本当に聞きたいことはエスケープシーケンスではなく、
標準出力と標準エラーをそれぞれ別々に加工する方法ね
標準出力の内容を緑に、標準エラー出力の内容を
赤にしたいんだけどどうすればいい?
本当に聞きたいことはエスケープシーケンスではなく、
標準出力と標準エラーをそれぞれ別々に加工する方法ね
2018/03/03(土) 23:53:52.11
ちなみにファイルに吐き出さずにやりたい
2018/03/04(日) 01:26:00.19
お前にはなんか教えたくない
2018/03/04(日) 01:40:31.82
なんかググればすぐ出てきそうな
2018/03/04(日) 02:21:55.51
それがないんだよね。標準エラー出力を標準出力に
変えてしまうのは有るけど、それじゃ別々にやるのは不可能だし
変えてしまうのは有るけど、それじゃ別々にやるのは不可能だし
2018/03/04(日) 16:46:18.09
条件が厳しいからどうしてもシェルスクリプトでやりたいなら
先ずシェルを作るところから始めないといけない
先ずシェルを作るところから始めないといけない
2018/03/05(月) 00:43:32.66
bashやzshなら簡単に出来るぞ
2018/03/05(月) 01:06:07.74
出力を切り離してパイプで別々のコマンドでフィルタする程度じゃ全然駄目だから
こういうのを簡単にできると言い切る人はきっとものすごく優秀な頭脳の持ち主だと思う
こういうのを簡単にできると言い切る人はきっとものすごく優秀な頭脳の持ち主だと思う
2018/03/05(月) 01:28:58.62
これは書いていなかった俺が悪いんだが、
bashやzshを使わずにposixの範囲でやりたいんだよね。
少なくともdashやashで動くものがほしい
でその方法が実際にあることは知ってるんだけど、
もっとシンプルな方法はないのだろうかと言うのと
俺がその方法をここに書いちゃうと
身バレしちゃうので書かなかった
bashやzshを使わずにposixの範囲でやりたいんだよね。
少なくともdashやashで動くものがほしい
でその方法が実際にあることは知ってるんだけど、
もっとシンプルな方法はないのだろうかと言うのと
俺がその方法をここに書いちゃうと
身バレしちゃうので書かなかった
2018/03/05(月) 12:24:32.78
2018/03/05(月) 18:09:38.99
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準拠。
あと偉そうなこと言うが,「身バレが怖いから持ってる (有益かもしれない) 情報を明かしません」って,
こっちからするとかなり不快だから,黙って何も知らないふりをしておいたほうがまだマシだよ。
両立させるのは厳しいと思う。もうさ,
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準拠。
あと偉そうなこと言うが,「身バレが怖いから持ってる (有益かもしれない) 情報を明かしません」って,
こっちからするとかなり不快だから,黙って何も知らないふりをしておいたほうがまだマシだよ。
2018/03/05(月) 18:12:03.21
落ち着け
最初の質問の時点で性格の幼稚さは見え透いてるだろ
最初の質問の時点で性格の幼稚さは見え透いてるだろ
2018/03/05(月) 19:58:23.46
>>547
やり方教えて
やり方教えて
2018/03/05(月) 21:20:34.93
>>551
> 一次ファイルを作らないっていう謎の拘りが理解できない。
書いてなかったのが悪いんだろうけど、一時ファイルを使うと
ストリーミングで処理できなくなるんだよ
つまり前のプログラムの出力が完了しないと次のプログラムが動かない
POSIX準拠はbusyboxで動かす必要があるからこれも必須
この二点は今回の質問には直接関係ないから理由じゃなくて制約として書いた
> 一次ファイルを作らないっていう謎の拘りが理解できない。
書いてなかったのが悪いんだろうけど、一時ファイルを使うと
ストリーミングで処理できなくなるんだよ
つまり前のプログラムの出力が完了しないと次のプログラムが動かない
POSIX準拠はbusyboxで動かす必要があるからこれも必須
この二点は今回の質問には直接関係ないから理由じゃなくて制約として書いた
2018/03/05(月) 21:25:58.36
そしてこっちの方で回答きたよ
くだらねえ質問はここに書き込め!Part 230
https://mao.5ch.net/test/read.cgi/linux/1515383155/315
同じ文章なのになんでこう反応が違うんだろうね
同じ文章なんだからレスする側の問題があるだろうね
質問する側と回答する側、立場は対等だって言ったら怒りそう
くだらねえ質問はここに書き込め!Part 230
https://mao.5ch.net/test/read.cgi/linux/1515383155/315
同じ文章なのになんでこう反応が違うんだろうね
同じ文章なんだからレスする側の問題があるだろうね
質問する側と回答する側、立場は対等だって言ったら怒りそう
2018/03/05(月) 21:38:48.22
2018/03/05(月) 21:48:54.27
自分自身は何もしてないのになぜこうも態度をでかくできるのか
2018/03/05(月) 21:57:02.07
別にでかくないでしょw ほかの人と一緒。
質問したからといってへりくだる必要はないと思ってるだけ
無知でもないしね
質問したからといってへりくだる必要はないと思ってるだけ
無知でもないしね
2018/03/05(月) 22:10:47.74
マルチカスか
教えたがりを徹底的にこき使っとけ
ここには二度とくるなよ
教えたがりを徹底的にこき使っとけ
ここには二度とくるなよ
2018/03/05(月) 22:45:20.19
少なくとも聞く側の態度じゃぁないな
2018/03/05(月) 22:54:52.33
聞く側はこういう態度を取らないといけないって
体育会系とか年功序列とか年上は敬え的な考え方だよ
今時はやらない
体育会系とか年功序列とか年上は敬え的な考え方だよ
今時はやらない
2018/03/05(月) 23:15:38.51
545から漂う頭の悪さよ
2018/03/05(月) 23:21:32.35
>>555 のそれ「解答」じゃないじゃん。
無理って言われてるんだぞ? 理解できてる?
無理って言われてるんだぞ? 理解できてる?
2018/03/05(月) 23:23:14.97
もういいじゃん
ほっとけよ
ほっとけよ
2018/03/05(月) 23:23:16.19
どういう態度取るべきとは思わないけど、
相手を不快にさせたら得られるはずの回答も得られなくなる可能性が上がるよ。
それでよければご自由に。
相手を不快にさせたら得られるはずの回答も得られなくなる可能性が上がるよ。
それでよければご自由に。
2018/03/05(月) 23:26:33.25
出力が色制御してきたら取り除いたりとか、マルチプロセスとかで変なところでブッタ斬り/ミックスされないように同期取ったりとか考えてたけど俺には無理だからもういいや
2018/03/05(月) 23:33:38.33
2018/03/05(月) 23:47:07.49
>>567
ん?
それだと今度は標準出力が (標準エラー出力に複製されたので) パイプを通らなくなるから、
標準出力の内容 (今は標準エラー出力に出力されている) を緑にできないんじゃ?
もしかして同時じゃなくていいってこと?
ん?
それだと今度は標準出力が (標準エラー出力に複製されたので) パイプを通らなくなるから、
標準出力の内容 (今は標準エラー出力に出力されている) を緑にできないんじゃ?
もしかして同時じゃなくていいってこと?
2018/03/06(火) 00:20:35.13
もうほっとけ
標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ
標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ
2018/03/06(火) 01:01:07.43
2018/03/06(火) 01:01:45.64
2018/03/06(火) 01:03:40.69
|& ←このパイプは標準出力標準エラー出力ともに通すよ。
ただ質問者さんが望んでいるのは「標準出力か標準出力かが区別できる状態でのパイプ通過」だろうから、
それはちょっと無理なんじゃないかな。
あと態度がデカすぎる。一度死んだほうがいいと思う。
ただ質問者さんが望んでいるのは「標準出力か標準出力かが区別できる状態でのパイプ通過」だろうから、
それはちょっと無理なんじゃないかな。
あと態度がデカすぎる。一度死んだほうがいいと思う。
2018/03/06(火) 01:14:26.43
2018/03/06(火) 01:45:01.59
だから一時ファイルを作るとストリーミングに
できなくなるからだめなんだって
さっきも書いたろ
できなくなるからだめなんだって
さっきも書いたろ
2018/03/06(火) 01:47:17.52
2018/03/06(火) 02:48:45.93
君たぶんだけど意思疎通に係わる障害持ってるから病院で診てもらったほうがいいよ。
知り合いにそういう調子の会話する人がいて、ある日会社で大きな事件を起こして辞めさせられたあと
病院で検査したらそういう系統の精神病だったからさ。
煽りとかじゃなくて、君はどうも社会で孤立してそうだから、助けになりたい。
知り合いにそういう調子の会話する人がいて、ある日会社で大きな事件を起こして辞めさせられたあと
病院で検査したらそういう系統の精神病だったからさ。
煽りとかじゃなくて、君はどうも社会で孤立してそうだから、助けになりたい。
2018/03/06(火) 03:23:52.46
いや、おちょくってるだけだろ
まともに相手するだけ無駄やぞ
まともに相手するだけ無駄やぞ
2018/03/06(火) 04:17:47.54
ここに限らず、質問系のスレにたまに沸くアレでしょ
5chが過疎って最近あんま見てなかったから
なんか懐かしい感じするわw
5chが過疎って最近あんま見てなかったから
なんか懐かしい感じするわw
2018/03/06(火) 10:26:50.47
レス内容が煽りだけになったらおしまいw
2018/03/06(火) 20:25:23.40
あっちで粘着してるみたいだな
久々にアレな奴を見たわ
久々にアレな奴を見たわ
2018/03/06(火) 21:23:37.44
入力リダイレクトで複数ファイルを一度で流し込むのはどうしたら良いのですか?
2018/03/06(火) 21:44:48.81
catしてパイプ
583watarie
2018/03/06(火) 22:03:33.11 よろしくお願いします。
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はコピー先のフォルダになります。
ファイル名は殆どが一意にしてあるので、とりあえずヒットしたら良い感じです。
一度で取りこぼしのない良い方法はありませんでしょうか。
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はコピー先のフォルダになります。
ファイル名は殆どが一意にしてあるので、とりあえずヒットしたら良い感じです。
一度で取りこぼしのない良い方法はありませんでしょうか。
584watarie
2018/03/06(火) 22:05:40.25 引数の件1と2逆でした 惑わせてしまい申し訳ありません。
正しくは1がコピー先フォルダで2がファイル名のリストです。
正しくは1がコピー先フォルダで2がファイル名のリストです。
2018/03/06(火) 22:33:41.80
>>582
回答ありがとうございます。
ということはそのまま
cat hoge huga | command
で、いいってことですか。なるほど。
レスつくまで色々ググって調べてみたのですが
command <( cat hoge huga )
でも全く同じ動作ですか?
回答ありがとうございます。
ということはそのまま
cat hoge huga | command
で、いいってことですか。なるほど。
レスつくまで色々ググって調べてみたのですが
command <( cat hoge huga )
でも全く同じ動作ですか?
2018/03/06(火) 23:27:44.61
>>585
二番目の方法,たぶんコマンドラインで試して成功したから書き込んでるんだろうけど,
それはプロセス置換と言って Bash筆頭に幾つかのシェルの独自拡張だからシェルスクリプトにするときは
シェバンを #! /usr/bin/env bash か #! /bin/bash とかにする必要がある。
cat hoge huga | somecommand で代替できることに可搬性を犠牲にするのは避けたいだろうから
(つまり #! /bin/sh というシェバンを捨てるのは勿体無いということ)
<(cat hoge huga) は避けれる時は (特にシェルスクリプトで使う時) 避けといたほうがいいんじゃないかな。
二番目の方法,たぶんコマンドラインで試して成功したから書き込んでるんだろうけど,
それはプロセス置換と言って Bash筆頭に幾つかのシェルの独自拡張だからシェルスクリプトにするときは
シェバンを #! /usr/bin/env bash か #! /bin/bash とかにする必要がある。
cat hoge huga | somecommand で代替できることに可搬性を犠牲にするのは避けたいだろうから
(つまり #! /bin/sh というシェバンを捨てるのは勿体無いということ)
<(cat hoge huga) は避けれる時は (特にシェルスクリプトで使う時) 避けといたほうがいいんじゃないかな。
587586
2018/03/06(火) 23:29:38.39 5行目あたりの日本語がおかしい。けど国語力ないので自然に直すの無理。
察してくれ。
察してくれ。
2018/03/06(火) 23:43:28.43
2018/03/06(火) 23:49:32.51
>>583
mdfindを知らんので問題解決に直接ならないけれど`done < ${2}`ではなく`done < "$2"`のほうがいいよ〜
もっと言うなら`cat "$2" | while read LINE;`のほうがいいかもね〜
* POSIX sh互換シェルは変数名に数字が来たらそこで読み取りを中断するので波括弧で変数名の範囲を明示しなくていい
* 変数$LINEに^Dとかが渡された時catコマンドと<リダイレクトで違いがある
短いんだけど参考: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_01
mdfindを知らんので問題解決に直接ならないけれど`done < ${2}`ではなく`done < "$2"`のほうがいいよ〜
もっと言うなら`cat "$2" | while read LINE;`のほうがいいかもね〜
* POSIX sh互換シェルは変数名に数字が来たらそこで読み取りを中断するので波括弧で変数名の範囲を明示しなくていい
* 変数$LINEに^Dとかが渡された時catコマンドと<リダイレクトで違いがある
短いんだけど参考: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_01
590588
2018/03/06(火) 23:58:01.42 あー!
さらに調べたら、よくわかりました。
#!/bin/sh でbashを起動したらbashの拡張とか使えなくなっちゃうんですね。
だからシェバンを書き換える必要があると…
そういう意味だったんですね。
(ちゃんとmanにかいてありました)
ためになりました。
さらに調べたら、よくわかりました。
#!/bin/sh でbashを起動したらbashの拡張とか使えなくなっちゃうんですね。
だからシェバンを書き換える必要があると…
そういう意味だったんですね。
(ちゃんとmanにかいてありました)
ためになりました。
591名無しさん@お腹いっぱい。
2018/03/07(水) 07:20:57.392018/03/07(水) 08:34:45.43
$LINEに^Dってなんぞやってところだな
2018/03/07(水) 08:37:52.19
>>583
まずはエラーをnullに落とさずに表示させろ
まずはエラーをnullに落とさずに表示させろ
594watarie
2018/03/07(水) 09:23:48.67 >>589さん
595watarie
2018/03/07(水) 09:32:33.42 >>589さん
ありがとうございます。ちょっと英語で読解が難しいので時間を作って該当の箇所を読ませていただこうかと思います。
{2}の箇所を"2"に変更しました。
<の箇所をcatに変更しました。
非常に目に優しいくなりました。
読み込む箇所なので、怪しいと感じます。結果としては変わりませんでしたが、参照の箇所は興味がありますので読ませていただこうと思っています。英語で弱気になりますが^^;
ありがとうございます。
ありがとうございます。ちょっと英語で読解が難しいので時間を作って該当の箇所を読ませていただこうかと思います。
{2}の箇所を"2"に変更しました。
<の箇所をcatに変更しました。
非常に目に優しいくなりました。
読み込む箇所なので、怪しいと感じます。結果としては変わりませんでしたが、参照の箇所は興味がありますので読ませていただこうと思っています。英語で弱気になりますが^^;
ありがとうございます。
596watarie
2018/03/07(水) 09:37:28.43 >>593さん
すみません。確かにそうですよね。
初心者過ぎで逃げを当然にしてたバチがあたったようです。
吐き出したエラーは、
cp: /Volumes/Macintosh: No such file or directory
cp: HD: No such file or directory
などのファイルパスが、スペース区切りになってcp出来ませんでしたよというエラーでした。
ただ、検索に漏れた該当のファイルは何度めかにはヒットしますので上記のエラーとはならなかったということに。
spotlight特有のものだからと諦めるしかないのか・・・
これがひょっとしたら手がかりになるかもしれませんが、わたしの力では全く・・・
すみません。確かにそうですよね。
初心者過ぎで逃げを当然にしてたバチがあたったようです。
吐き出したエラーは、
cp: /Volumes/Macintosh: No such file or directory
cp: HD: No such file or directory
などのファイルパスが、スペース区切りになってcp出来ませんでしたよというエラーでした。
ただ、検索に漏れた該当のファイルは何度めかにはヒットしますので上記のエラーとはならなかったということに。
spotlight特有のものだからと諦めるしかないのか・・・
これがひょっとしたら手がかりになるかもしれませんが、わたしの力では全く・・・
597watarie
2018/03/07(水) 09:45:34.86 すみません、mdfindの検索結果のファイルパスが
スペースで割れてしまってcpに渡されたということでした。たぶん^^;
スペースで割れてしまってcpに渡されたということでした。たぶん^^;
598watarie
2018/03/07(水) 12:55:37.74 解けました!ありがとうございます!
ダブルコーテーションを%の箇所で囲うのではなく、
1行取り出した先でパイプして囲えば良いと思い以下を試したところ出来ました。
mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | sed -e 's/^\(.*\)$/\"\1\"/' | xargs -J % cp -p % "$1" 2>/Users/mac10/Desktop/out
エラー出力素晴らしいです!
ありがとうございました!
ダブルコーテーションを%の箇所で囲うのではなく、
1行取り出した先でパイプして囲えば良いと思い以下を試したところ出来ました。
mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | sed -e 's/^\(.*\)$/\"\1\"/' | xargs -J % cp -p % "$1" 2>/Users/mac10/Desktop/out
エラー出力素晴らしいです!
ありがとうございました!
2018/03/07(水) 18:25:56.09
ずっとageっぱなし…(小声)
2018/03/07(水) 19:48:17.38
mdfindとxargsに-0つけるのが定石だと思うけど、もう見てないかな。
601名無しさん@お腹いっぱい。
2018/03/08(木) 00:41:50.66 >>575
今更だけど、あるんだよね。誰も教えたくなかったんだね。
今更だけど、あるんだよね。誰も教えたくなかったんだね。
2018/03/08(木) 01:55:58.38
まああるよね
2018/03/08(木) 07:30:07.37
ヒントくらい出すか……。でもあいつに教えたくないんだよなぁ。
卑屈だけど、気持は分かるだろ?
パイプに名前(ry
卑屈だけど、気持は分かるだろ?
パイプに名前(ry
2018/03/08(木) 16:44:02.99
それ使うと出力側はこんな感じかな
while :;do sed -e 's/\(.*\)/^[[32m\1^[[m/' np1 & sed -e 's/\(.*\)/^[[33m\1^[[m/' np2 >&2; done
while :;do sed -e 's/\(.*\)/^[[32m\1^[[m/' np1 & sed -e 's/\(.*\)/^[[33m\1^[[m/' np2 >&2; done
2018/03/08(木) 20:31:17.47
>>604
野暮な指摘だが、sedを使わない
printf '\e[32m%s\[0m' "$(cat)"
の方が分かりやすくね? つーか printf ってそういう「整形した出力」の為のコマンドだろうし。
野暮な指摘だが、sedを使わない
printf '\e[32m%s\[0m' "$(cat)"
の方が分かりやすくね? つーか printf ってそういう「整形した出力」の為のコマンドだろうし。
606604
2018/03/08(木) 20:32:49.312018/03/08(木) 20:51:46.21
>>603
名前付きパイプ(mkfifo)はプロセスが2個あって
片方が出力側プロセス、片方側が入力側プロセスに
別れない限りストリーミングにすることができない
(同一プロセスでは出力しながら入力ができないため)
今回の場合、標準出力と標準エラー出力の2つがあるから
出力側プロセス1個と入力側プロセス2個の合計3プロセスが必要になる
つまり別プロセスとして起動しなければいけない
もちろん出力の完了待ちのwaitも必要だし、作成したパイプの削除も必要。
特にCTRL+Cで中断された場合とか
また万全を期してパイプ名が被ることも考慮してランダムな名前にしたい
ここまで言えば名前付きパイプを使った方法は実装するのに行数がかかり
面倒な方法だと言うことがわかるだろう?
また>>554で書いたとおりbusyboxで動かす必要があるのだが、
そもそもbusyboxでmkfifoが存在しない場合もある
↑俺にとってはこっちのほうが重要
名前付きパイプ(mkfifo)はプロセスが2個あって
片方が出力側プロセス、片方側が入力側プロセスに
別れない限りストリーミングにすることができない
(同一プロセスでは出力しながら入力ができないため)
今回の場合、標準出力と標準エラー出力の2つがあるから
出力側プロセス1個と入力側プロセス2個の合計3プロセスが必要になる
つまり別プロセスとして起動しなければいけない
もちろん出力の完了待ちのwaitも必要だし、作成したパイプの削除も必要。
特にCTRL+Cで中断された場合とか
また万全を期してパイプ名が被ることも考慮してランダムな名前にしたい
ここまで言えば名前付きパイプを使った方法は実装するのに行数がかかり
面倒な方法だと言うことがわかるだろう?
また>>554で書いたとおりbusyboxで動かす必要があるのだが、
そもそもbusyboxでmkfifoが存在しない場合もある
↑俺にとってはこっちのほうが重要
2018/03/08(木) 21:00:55.81
もう来なくていいよ
レス続けるならコテハン付けて
レス続けるならコテハン付けて
2018/03/08(木) 21:03:28.88
粘着かよ
気持ち悪い
気持ち悪い
2018/03/08(木) 21:03:48.79
レス続けたのは俺じゃないんだがw
2018/03/08(木) 21:57:56.36
うわ。まだ居たのかこのキチガイ…
まあ放置が一番いいな。俺のこのレスも彼を発狂させる原因になるやもしれんし。
まあ放置が一番いいな。俺のこのレスも彼を発狂させる原因になるやもしれんし。
2018/03/08(木) 22:15:10.19
まあ反論なく放置される(=俺の勝ち逃げ)という状況ってのが
俺にとっては一番であることには間違いないが
で俺がレスしたのは、放置してないからだよ?w
俺にとっては一番であることには間違いないが
で俺がレスしたのは、放置してないからだよ?w
613604
2018/03/08(木) 22:33:08.10 >>606
あ、しまった printf '\e' は GNU/Linux じゃないと動かないみたい。
Debian使ってんのがバレてしまったw
FreeBSDとかでも動作させる為には printf '\033' とやる必要がある。
あ、しまった printf '\e' は GNU/Linux じゃないと動かないみたい。
Debian使ってんのがバレてしまったw
FreeBSDとかでも動作させる為には printf '\033' とやる必要がある。
2018/03/08(木) 22:42:34.38
2018/03/08(木) 23:32:13.81
ガチでアレな奴が粘着してるな
ここまで気持ち悪い奴は滅多に見ない
ここまで気持ち悪い奴は滅多に見ない
2018/03/08(木) 23:54:18.50
>>553
exec > >(sed -e 's/\(.*\)/^[[32m\1^[[m/')
exec 2> >(sed -e 's/\(.*\)/^[[33m\1^[[m/')
後は普通に処理を書けばおk
exec > >(sed -e 's/\(.*\)/^[[32m\1^[[m/')
exec 2> >(sed -e 's/\(.*\)/^[[33m\1^[[m/')
後は普通に処理を書けばおk
2018/03/09(金) 01:48:35.86
どんだけ答え知りたいんだ
あっちのスレいけよこっちはこっちで楽しんでんだから
あっちのスレいけよこっちはこっちで楽しんでんだから
2018/03/09(金) 22:50:21.96
2018/03/09(金) 23:00:06.75
そういや>>616で思い出したけど、
busyboxのsedってなんか動きがおかしいんだよね。
(echo 1; sleep 5; echo 2; sleep 5) | sed 's/a/a/'
例えばこれを実行すると、1が表示されるのは5秒後になる
debianだとすぐに表示されるのに。一行遅れて表示される
だからsedは今回の俺の用途には使えなくてreadを使ってる
busyboxのsedってなんか動きがおかしいんだよね。
(echo 1; sleep 5; echo 2; sleep 5) | sed 's/a/a/'
例えばこれを実行すると、1が表示されるのは5秒後になる
debianだとすぐに表示されるのに。一行遅れて表示される
だからsedは今回の俺の用途には使えなくてreadを使ってる
2018/03/10(土) 00:28:42.71
2018/03/10(土) 01:03:52.34
2018/03/10(土) 01:06:54.08
> 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の問題な気がする
もしかして、sedはbusyboxじゃない方のsedになってない?
WSL上のUbuntuに入れたbusyboxのsed
↓つまりこれを実行するとやっぱり5秒後に1と表示される
(echo 1; sleep 5; echo 2; sleep 5) | busybox sed 's/a/a/'
やっぱりbusyboxが実装してる簡易版sedの問題な気がする
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 働いて働いて働いても生活は…円安に歯止めが掛からず生活は苦しくなるばかり…サナエノミクスの限界で「高市不況」がやってくる ★5 [ぐれ★]
- 中国空母、太平洋で訓練……日本・防衛省発表 [少考さん★]
- 日中対立、打開策見えず 高市氏答弁1カ月、影響拡大 [蚤の市★]
- 働いて働いて働いても生活は…円安に歯止めが掛からず生活は苦しくなるばかり…サナエノミクスの限界で「高市不況」がやってくる ★6 [ぐれ★]
- 『DOWNTOWN+』2回目生配信で松本の実兄・松本隆博が登場し共演 [jinjin★]
- 2026年はゲーム機やPC、スマホが一斉値上げか メモリ大手ブランド「Crucial」廃止の衝撃 [樽悶★]
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1820
- 2025/2026 Formula E Lap.1
- 競輪実況★1621
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap612
- とらせんIP ★3
- 他サポ2025-281
- 脳みそ🧠スッカスカバカ無職集会所🏡
- 日本人が戦争したがってる中国、ガチで強い模様…なぜ日本人は強気なの? [819729701]
- 夢は…「結婚!」 ダウン症や自閉症の女性18人が模擬挙式
- 国民・玉木雄一郎「日本は台湾を国家として正式に承認していないため、台湾への攻撃だけでは存立危機事態にはなりません」と世界に発信 [594040874]
- ネトウヨ「害国人の犯罪ガー」なお今年の日本人による海外での犯罪がこちら [165981677]
- 「VIPから来ますた」ってAAがあっても帰属意識を批判する奴もいたんだよな
