19/12/18 19:39:48.69 uFDqtnkl.net
日本語の問題とman自身の問題は別の話でしょう?
英語圏の人がmanを使ったときの問題は
テキストベースだから使いづらい。
HTMLではないから使いづらい。
画像がないから分かりづらい。
そういった点でしょう?
日本語の問題はワークフローの問題だよ。
まず世の中英語と日本語だけじゃない無数に言語がある。
アプリの新バージョンを作ったときに翻訳してからじゃないとリリースできない
ってのは無いと思うし、翻訳だけしたらバージョンアップというのもおかしな話
(例えば--helpの内容とか)
アプリとそのマニュアルは本来別でリリースすべきなんだろう
263:デフォルトの名無しさん
19/12/19 10:03:23.50 y7Q/2NKF.net
マニュアルとプログラム本体が一緒くたにされてる今でもマニュアルの内容が古いとか
書いてることと実際の動作が違うとか問題が多発してるのに
分けようなんて言いだしたらもはや二者の乖離が酷すぎて、だれもマニュアルなんて読もうとしなくなる
……っは!もしやそれが狙いか?w
264:デフォルトの名無しさん
19/12/19 11:24:35.20 belDjs1+.net
まぁ指摘される度にお前がやれだの英語で読めだの言うけどそれ諦めてるよね
逃げ口上というか捨て台詞というか負け惜しみというか
265:デフォルトの名無しさん
19/12/19 16:35:50.82 jArWapvD.net
OSS
言い出しっぺがやるというだけだろ
指摘ってなにが目的なんだか。俺がか?
266:デフォルトの名無しさん
19/12/19 18:30:09.45 4hkxYlHE.net
bashで関数名に使える文字と使えない文字ってこれであってる?
・使える
アルファベット、ASCII文字以外 (制御文字は知らんw)
- = ~ [ ] : , . _ /
% (ジョブ機能が有効だと呼び出せない?)
数字 @ (単体はダメ)
# ^ { } (始まっているものはダメ)
+ * ?(終わるものはダメ)
・使えない
! " $ & ' ( ) \ | ` < > ; スペース
何だこのカオスwww
267:デフォルトの名無しさん
19/12/19 18:38:08.39 UoMpZOx6.net
関数名には記号を使わないのが基本だ
使っていいのは _ ぐらい
あとは紛らわしくてしょうがない
可読性が著しく下がる
268:デフォルトの名無しさん
19/12/21 20:28:47.93 X9+p8H27.net
func() {
foo "123$@"
}
って書いて、func a b c と実行すると
foo 123a b c という呼び出しになるという仕様
奇妙だなって思ってたけど理由に気づいた
func() {
tar "v$@"
}
func zxf file.tar.gz ってやった時
tar vzxf file.tar.gz とするために必要な仕様なんだ
はー、よくできてんなー。
シェルスクリプトってなんとなくいきあたりばったりで
作られたように見えるのによく練られた仕様だと思うよ
269:デフォルトの名無しさん
19/12/22 11:21:06.45 JDtuJK73.net
むしろそうじゃない方が例外的な動作で奇妙に見えるけど
""の内側で$@は引数に展開されるし
"str$var"←こういう引用符だったら文字列と引数はくっ付いて表示される。
270:デフォルトの名無しさん
19/12/22 11:45:14.20 JDtuJK73.net
sedでC言語中の#includeディレクティブを無効化したいんだけど
sed \
-e ':a' -e '/^#[[:blank:]]*include.*\\$/N;/\\\n/d;ta' \
-e '/^#[[:blank:]]*include.*/d'
↑これで対処できるかな。
271:デフォルトの名無しさん
19/12/22 12:51:34.17 O05uH48x.net
>>256
他の言語だったら、文字列+文字列の配列 の場合に
エラーかもしくは配列の要素が一つ増えるって考えるでしょ?
文字列の配列の一番目に、結合されるって仕様はなかなか思いつかないと思うよ
272:デフォルトの名無しさん
19/12/22 15:12:02.64 JDtuJK73.net
>>258
なるほど。
ただ、$@って配列変数じゃない気がするわ。
単に引数が空白区切りで格納されてるだけで。
↑じゃあ配列と何が違うんだと言われると難しいけどw
配列だとおこりえない挙動を示せるいい例が思い付かないので。
273:デフォルトの名無しさん
19/12/22 15:49:52.02 9GUBQyj0.net
>>257
t は s の結果に依存するのでそこで使うのは適切ではないと思われる。
sed でやるならこんな感じか。
#!/bin/sed -f
/^#[[:blank:]]*include/!b
:L0
/\\$/{N;b L0}
d
274:デフォルトの名無しさん
19/12/22 16:03:17.69 XO28QfbO.net
削除じゃなくてコメントにしちゃうとか
sed -e '/^#[[:blank:]]*include.*\\$/,/[^\\]$/s:^://:' \
-e 's:^#[[:blank:]]*include://&:'
275:デフォルトの名無しさん
19/12/22 17:46:01.65 O05uH48x.net
>>259
$1、$2でアクセスするし、その$1に空白入れる事も
できるんだから配列は配列だよ。空白区切りじゃない。
bashでは$@の名前付き版$NAME[@]は
明確に配列と言われてるしね
276:デフォルトの名無しさん
19/12/22 18:25:06.92 M+q9E136.net
>>255
必要な仕様というよりシンプルな文字列展開としてはそうなるというだけでは
その例はたまたまそういうように使えるというだけのような
あえて賢い対応してるなと言うなら "v""$@" とか書く必要がないとこかな
277:デフォルトの名無しさん
19/12/23 15:40:09.98 YJsAIsu8.net
シェル組み込みのgetoptsを同一処理内で二回以上用いるときに
$OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
dashみたいにgetoptsを内蔵していないシェルでは
外部コマンドとしてgetopts(1)を起動した瞬間に$OPTIND変数が初期化されるみたい。
BashやらKshみたく組込みgetoptsを内蔵してるシェルの、
それも関数を跨がない処理
(getoptsを使ってる関数から一度も抜けることなく再度使用)
の時だけ$OPTIND変数が初期化されないみたいで、
そのせいで不本意な挙動の原因が掴めず半時間ほど無駄にしたw
(dashだと問題ないし、Bashでも特定の箇所でだけ不具合が生じるから)
278:デフォルトの名無しさん
19/12/23 15:55:18.14 YJsAIsu8.net
>>262
どういう要件を見たせば
ある変数が配列変数だって言えるのか知ってる?
(俺は知らん。でもプログラミング言語論とかで定義されてそう)
$@がその要件を満たしてれば配列に違いないね。
でもそういう明確な定義が無いなら
もう個人の勝手なんじゃないかな。
279:デフォルトの名無しさん
19/12/23 16:20:51.38 CGg4xw4r.net
>>264
> $OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
当たり前だな。どこに状態を保存してるのかと
> dashみたいにgetoptsを内蔵していないシェルでは
は?内蔵してるが?おそらく初期版から。
getoptsを内蔵してないのはbusyboxで
意図的に外してビルドした場合ぐらいだろ
280:デフォルトの名無しさん
19/12/23 16:22:45.93 CGg4xw4r.net
>>264
何を言ってるのかわからんが、検証が間違ってる
281:デフォルトの名無しさん
19/12/23 16:36:13.95 YJsAIsu8.net
>>267
あ、そうなの。
じゃあdashの組み込みgetoptsが何らかの
形でBashやKshのそれと$OPTIND変数に対する処理が違うんだな。
ともあれ単純に初期化すればいいだけなんで、
事もないよ。
282:デフォルトの名無しさん
19/12/23 16:37:34.35 CGg4xw4r.net
だいたい$OPTINDはシェル変数なんだから、
getoptsは外部コマンドとして実装するのは不可能なんだよ
どうやってシェルスクリプトから実行された外部コマンドから
呼び出し元シェルスクリプトの
プロセス内のメモリを書き換えるんだよw
283:デフォルトの名無しさん
19/12/23 16:40:45.68 CGg4xw4r.net
>>268
geoptsを何回も呼び出したいなら、OPTINDを1にして初期化しろ仕様で決まってる
URLリンク(pubs.opengroup.org)
> If the application sets OPTIND to the value 1, a new set of parameters can be used:
> either the current positional parameters or new arg values. Any other attempt to
> invoke getopts multiple times in a single shell execution environment with
> parameters (positional parameters or arg operands) that are not the same in all invocations,
> or with an OPTIND value modified to be a value other than 1, produces unspecified results.
284:デフォルトの名無しさん
19/12/23 16:43:06.84 CGg4xw4r.net
bashやkshはローカル変数にでもなってるんだろ
285:デフォルトの名無しさん
19/12/23 20:47:02.60 sS1JWXeN.net
ぷぷぷ、ぷろぐらみんぐ言語論wwwww
286:デフォルトの名無しさん
19/12/23 20:50:03.01 YJsAIsu8.net
>>269
え、そうなん?
じゃあ
URLリンク(pubs.opengroup.org)
↑getoptsはここには載ってるけれども
実質としては組み込みコマンドとして実装するしかないのか。
ありがとう!勉強になったわ。
287:デフォルトの名無しさん
19/12/23 22:11:39.28 gENEPh5i.net
>>273
そこに乗ってるのは確かに気持ち悪さがあるけどね。alias、cd、readあたりも。
まあプロセス間通信などを使えば、外部コマンドとして作るのは
絶対に不可能というわけじゃないがまずやらんだろうなw
288:デフォルトの名無しさん
19/12/23 22:26:33.99 EXKdfS/F.net
大昔は cd が外部コマンドだったと知って吃驚仰天
289:デフォルトの名無しさん
19/12/24 11:07:35.47 mQqeuoCV.net
そんなバナナ
290:デフォルトの名無しさん
19/12/24 11:10:44.79 8h2rOUkn.net
URLリンク(www.atmarkit.co.jp)
Cシェル(csh)上に、/usr/bin/cdと書くと、チェンジディレクトリがうまくいかず、普通にcd~~と書くと正しくチェンジディレクトリされます。
shellのカレントディレクトリを変更したいのなら、組み込みコマンドを使わないとダメです。
# にもかかわらず外部コマンドのcdを持っているUnixがあるのは何故だろう?
# joke ?
291:デフォルトの名無しさん
19/12/24 11:11:40.76 8h2rOUkn.net
URLリンク(tutorialmore.com)
この素晴らしい回答で参照されているように、POSIXシステムには外部バイナリ cd があります
シェル組み込みに加えて。 OS X 10.8では /usr/bin/cd です 。組み込みの cd のように
使用することはできません 独自の作業ディレクトリを変更するとすぐに終了するためです。どんな目的に役立つのですか?
解決した方
292:法 # 1 主に、シェルの
293:デフォルトの名無しさん
19/12/24 13:50:24.53 lTGNfo7C.net
POSIXシステムには外部バイナリ cd があります
ないけど…?
294:デフォルトの名無しさん
19/12/24 17:56:12.00 O0jTO9nR.net
WSLのUbuntuにもない。
295:デフォルトの名無しさん
19/12/24 18:31:17.89 mQqeuoCV.net
というか、あったとしてどうやって使うのか?
296:デフォルトの名無しさん
19/12/24 18:35:06.35 mQqeuoCV.net
カレントディレクトリを移動してから何か実行させたいならそのcdコマンドからexecしない限りできんよな?
とするとそのcdコマンドはディレクトリだけでなく実行するコマンドを引数として受け取るのか?
297:デフォルトの名無しさん
19/12/24 20:48:55.98 uCBqTgFr.net
>>278 が出ているのに。あまり使い道がない例だけどな
298:デフォルトの名無しさん
19/12/24 21:07:13.05 uCBqTgFr.net
URLリンク(pubs.opengroup.org)
APPLICATION USAGE
最初�
299:ノビルトインに決まってるという説明の後で、ほぼ同じこと書いてあるやん 例が実行できるようにするには必要で、これはできないとは書いてないからあるのが仕様内だろう、たぶん こんな使い方しねーよで無いんじゃないの、Ubuntu(Debian?)などは
300:デフォルトの名無しさん
19/12/25 17:49:11.61 DcKuxkE0.net
なるほど
301:デフォルトの名無しさん
19/12/25 18:50:00.73 N+K1pmuB.net
シェルのバックグラウンドジョブとtrapとシグナルについての理解がしたいです。
手許の環境はBashですが、コマンドライン自体はPOSIXに準じているつもりです。
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }&
↑このコマンドラインを実行すると
すぐにプロンプトが帰ってきて
start
# 5秒後
end
↑などと出力されます。
一方で
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& sleep 1; kill -s QUIT $!
↑このコマンドラインを実行すると
start
# 1秒後
trapped
↑と出力されますが(少なくとも手許では)、
バックグランドジョブに回した直後のsleepを除去すると↓
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
何も出力されなくなります。
最後のコマンドラインでもsleep 1を挿入した時と同じ挙動(start→#1秒後→trappedと表示)に
させるにはどうすればいいでしょうか。
どうかご教示ください。
302:デフォルトの名無しさん
19/12/25 19:25:32.89 GfHtMQ6w.net
シグナルハンドラはデフォルトの動作があらかじめ決まってる
SIGQUITだとコアダンプ吐いて強制終了かな。SIGUSR1/SIGUSR2もなんかあったな
シグナルハンドラを設定しようとするスクリプト(trap)が実行される前にはそのデフォルトのが動いてしまう
シグナルハンドラを設定するスクリプトが実行されるであろうまでsleepで待つか、設定した準備できたと知らせる(親プロセスにシグナル投げるなり)じゃないかな
onhandling=0; trap -- 'onhandling=1' USR1; { trap -- 'echo trapped; exit' QUIT; kill -USR1 $$; echo start; sleep 5& wait $!; echo end; }& while [ $onhandling -eq 0 ]; do sleep 0.1; done; kill -s QUIT $!
とか
シグナル実行抑止遅延とかあったかなあ
303:デフォルトの名無しさん
19/12/25 19:36:59.98 N+K1pmuB.net
>>287
ありがとうございます!
無事解決しました。
ところで (すでに問題は解決できたので)単なる興味本位なのですが、
trap -- 'kill -s QUIT $!' USR1; { trap -- 'echo trapped; exit' QUIT; kill -s USR1 $$; echo start; sleep 5& wait $!; echo end;
}&
↑これだと問題ありますか。
素人目線では上手くいくような気がしますが、子プロセスを殺すtrapを親プロセスの前に仕掛けてるあたりが
マズい気がします……。
(ちなみに手許では>>287様が示してくださったものと同様上手くいきました)
304:デフォルトの名無しさん
19/12/25 19:39:42.14 N+K1pmuB.net
>>288
これは取消します。
これではいかなる場合でもtrapが実行されちゃいますね。
すいませんでした。
305:デフォルトの名無しさん
19/12/25 19:59:14.64 GfHtMQ6w.net
notif=/tmp/$$.fifo; mkfifo $notif; { trap -- 'echo trapped; exit' QUIT; echo read > $notif; echo start; sleep 5& wait $!; echo end; }& read a < $notif; kill -s QUIT $!; rm $notif
通知はFIFO使って、ループが無くなってちょっとスッキリ版
306:デフォルトの名無しさん
19/12/25 20:09:25.33 v8ePSHs/.net
>>286
> { trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
> 何も出力されなくなります。
コアダンプって出力されるよな?
307:デフォルトの名無しさん
19/12/25 21:22:56.22 rkHGbRnb.net
一行で書くから見づらいったらありゃしないw
そんなごちゃごちゃやらなくても、これでいいやろ?
#!/bin/sh
sleep 1& SLEEP=$!
{
trap -- 'echo trapped; exit' QUIT
kill $SLEEP
echo start
sleep 5& wait $!
echo end
}&
wait $SLEEP
kill -s QUIT $!
一行に戻すでー
sleep 1& SLEEP=$!; { trap -- 'echo trapped; exit' QUIT; kill $SLEEP; echo start; sleep 5& wait $!; echo end; }& wait $SLEEP; kill -s QUIT $!
308:デフォルトの名無しさん
19/12/25 22:03:53.28 N+K1pmuB.net
>>291
うーん。すいません。
恐らくシステムか何かがコアダンプを生成しないようになっているようです。
コアダンプはありませんでした。
309:デフォルトの名無しさん
19/12/25 22:28
310::14.59 ID:iUDS0c82.net
311:デフォルトの名無しさん
19/12/25 22:29:25.06 ixBqsT77.net
このスレにtrapでソフトタイマを作ったのが載ってるよ。
312:デフォルトの名無しさん
19/12/25 22:40:18.77 rkHGbRnb.net
>>295
もうやめたれwww
313:デフォルトの名無しさん
19/12/26 00:40:43.87 uF/G2OAQ.net
いちゃもんつけながらでないと自己表現できない自分が確認できない、いつものやつ
314:デフォルトの名無しさん
19/12/26 00:57:23.99 0kHOyMkL.net
>>297
わかるように結構工夫して書いてるんだぜw
315:デフォルトの名無しさん
19/12/26 00:58:24.91 uF/G2OAQ.net
質問主も応えてるのもわかってるけどな
316:デフォルトの名無しさん
19/12/26 00:58:56.93 0kHOyMkL.net
「俺」を否定することはできても
「レス」は否定できないやろ?w
>>292とかシンプルで美しい回答だからな
317:デフォルトの名無しさん
19/12/26 01:01:09.61 uF/G2OAQ.net
自己満wキモいわ自分で言うか
すげえな。これ以上何を言っても通じないな
318:デフォルトの名無しさん
19/12/26 01:03:25.32 0kHOyMkL.net
そうそう俺を叩いた所で無駄やで。煽り耐性レベルMAXだからな
そんなくだらないことよりレス(シェルスクリプト)の話をしようや
319:デフォルトの名無しさん
19/12/26 10:54:33.00 zbYMFUyq.net
>>292はいいな。タイムアウトまで実装できてる
>>287とか>>290だとバグで通知が行われないとフリーズしてしまうが
>>292だと一定期間でタイムアウトになって処理を継続できる
320:デフォルトの名無しさん
19/12/26 12:41:29.91 MI1/ojN2.net
>>292だとどうしても1秒間停止してしまわない?
echo trappedを(適切に)実行する準備が整い次第速やかにkill QUITしたいんじゃ
なかったっけ?
>「sleep 1を付けると(シグナルハンドラを設定するスクリプトが起動する猶予が生れて)
start→trappedが出力されるけど、sleep 1を取っ払っても作動するようにしたい」
>>287の実装が一番良いな。
シグナル受け取り側の準備が出来るまで実直に待ってるから余計な待ち時間はほぼ発生しない。
sleep <小数点>はBash拡張ってのが玉に瑕だけどもともとBash前提だから問題ない。
321:デフォルトの名無しさん
19/12/26 12:47:29.21 zbYMFUyq.net
>>304
よく読んでみて、停止しないでしょ?
必要最小限しかwaitしない
>>287だと0.1秒待つことになるが
そんなに待たないし、ループで負荷をかけることもない
322:デフォルトの名無しさん
19/12/26 12:51:43.96 zbYMFUyq.net
仮にwaitする前にsleepが(一瞬で)killされたとしても
wait ${すでにいないPID} を実行してもエラーにならないんだよね
323:デフォルトの名無しさん
19/12/26 13:26:19.54 zbYMFUyq.net
>>287も>>292もQUITだとdashで想定どおりに動かないからTERMに変更したけど
timeで測りやすくスクリプトにして実行した結果はこんな感じ
$ time sh 287.sh
start
trapped
real 0m0.103s
user 0m0.001s
sys 0m0.002s
$ time sh 292.sh
start
trapped
real 0m0.002s
user 0m0.002s
sys 0m0.000s
>>287は多くの場合、最初の [ $onhandling -eq 0 ]; を満たさないのでsleep 0.1をすることになる。
なので↓のsleep 1を取っ払いたい要望に対して、sleep 0.1に変えたのと大差なくなってる。
{ trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& sleep 1; kill -s QUIT $!
324:デフォルトの名無しさん
19/12/26 14:16:08.46 MI1/ojN2.net
>>305
あ、kill $SLEEPを読み飛ばしてたw
すまん。
325:デフォルトの名無しさん
19/12/26 15:10:05.95 W7puUhWv.net
自演w連投ぶりからいつもの
326:デフォルトの名無しさん
19/12/26 17:04:03.21 uIk/XshQ.net
自称神様の降臨か
327:デフォルトの名無しさん
19/12/26 17:46:42.36 W7puUhWv.net
ずっと居ついているだろ
328:デフォルトの名無しさん
19/12/26 20:40:26.24 VT4/hGaE.net
ただいま。ってかお前ら何やってんの?w
また俺じゃない人に絡んでるようだが
329:デフォルトの名無しさん
19/12/26 20:57:57.00 GKWkZChC.net
わざとらしすぎてわろた
330:デフォルトの名無しさん
19/12/26 20:59:56.60 VT4/hGaE.net
違うから違うって言ってるんだけどなw
331:デフォルトの名無しさん
19/12/26 21:06:21.96 GKWkZChC.net
はいはい
同じ反応速度、普通のスクリプトでわいわいなレスに対していきなりな同じ態度レスで絡む
同一人物でいいだろ。そんな辺なやつはそう居ないと思うけど
332:デフォルトの名無しさん
19/12/26 21:08:13.76 VT4/hGaE.net
意訳 俺以外はみんなあいつ
333:デフォルトの名無しさん
19/12/26 21:08:43.19 VT4/hGaE.net
俺の敵はみんなあいつ
の方が良いか
334:デフォルトの名無しさん
19/12/26 21:12:56.47 GKWkZChC.net
連投wその連投ぶりのレスの内容といい
特徴的な共通点が多すぎ
335:デフォルトの名無しさん
19/12/26 21:35:49.17 VT4/hGaE.net
>>307
俺もやってみたけどQUITじゃたしかにdashで動かないね
確かめたつもりだったけど
> sleep 0.1に変えたのと大差なくなってる。
実際のところ、この例だとsleep 0でも問題なかったりする
sleepという外部プロセスを呼び出す時間があれば、その間にtrapできてるから
と思ってkshでやったら動かんかったわw
kshではsleepはシェルビルトインなんだな
336:デフォルトの名無しさん
19/12/27 09:20:57.82 NrzsOb0y.net
横だけどQUITって使うことってある?
OSとかデバッガ系なら使うことあるだろうけど
アプリでは使わないほうが良いんじゃいかな?
337:デフォルトの名無しさん
19/12/27 13:14:28.69 GMT90LLU.net
>>320
それはなにか理由ある?
338:デフォルトの名無しさん
19/12/27 21:58:46.84 jjhZE+Ou.net
QUITってコアダンプさせるためのものでしょ?
339:デフォルトの名無しさん
19/12/28 12:47:18.40 /Zzxwqbk.net
POSIXでは基本的にTERMとほぼ同じだけど
XSI拡張では「なにか他の動作を追加的に行ってもよい」とあるな。
URLリンク(pubs.opengroup.org)
340:デフォルトの名無しさん
19/12/28 23:26:23.77 lWCFWx/Q.net
QUITをトラップするとコアダンプ機能が使えなくなるというデメリットがあるね
普通はQUITでコアダンプするわけだから、あれ?コアダンプできない?ってなるかもしれない
コアダンプを明示的に生成する方法あるのかな?
あと、もしかしてdash、ksh、yashだとQUITってtrapできない?
trapしても何も動作しない
341:デフォルトの名無しさん
19/12/29 01:40:48.31 FmabBrht.net
dash,kshはQUITでtrapで動いてるけど。yashは試してない
342:デフォルトの名無しさん
19/12/29 01:53:56.90 MrCxy9bb.net
#!/bin/sh
trap 'echo trapped; exit' QUIT
echo $$
sleep 60
これを、sh test.sh & ってやって
表示されたプロセスIDに対してkill -q QUIT プロセスIDって
やっても何も表示されないんだけど、どうやって確認した?
343:デフォルトの名無しさん
19/12/29 02:02:29.22 FmabBrht.net
sleepというかコマンドが実行が終わるまでtrapで設定したのは動かないよ
344:デフォルトの名無しさん
19/12/29 02:10:00.25 FmabBrht.net
なんか言い方が変だな。POSIXでそのような文が書いてあったと思うそのまま書いた
コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行
for i in $(seq 60); do sleep 1; done
とかで動くでしょ
345:デフォルトの名無しさん
19/12/29 02:13:23.19 MrCxy9bb.net
あれ?なんかおかしいね。
じゃあ>>287がbashだとtrappedって表示されて
shでは何も表示されないのはなぜ?
念の為、整形したやつ
#!/bin/sh
onhandling=0
trap -- 'onhandling=1' USR1
{
trap -- 'echo trapped; exit' QUIT
kill -USR1 $$
echo start
sleep 5& wait $!
echo end
}&
while [ $onhandling -eq 0 ]; do
sleep 0.1
done
kill -s QUIT $!
346:デフォルトの名無しさん
19/12/29 02:14:47.34 MrCxy9bb.net
>>328
つまりコマンド実行中はtrapしていても無視されて
強制終了してしまうってこと?
347:デフォルトの名無しさん
19/12/29 02:17:11.43 FmabBrht.net
無視ではなくて保留だな。受け取っていることは受け取っている
348:デフォルトの名無しさん
19/12/29 02:19:29.79 MrCxy9bb.net
保留だとしたらkill -s QUITした時点で終了するのはおかしいはずだが?
349:デフォルトの名無しさん
19/12/29 02:25:16.44 FmabBrht.net
>>329
shって?dashでいいの?表示されたけど
強制終了ってなにをいいたいのかわからん
dashはtrap中の標準出力にクセがあるかな?dash起動してコマンドラインでtrapでechoして、他からシグナル送っても出力されないリターンキー叩いたりしたら出る、コマンドラインではね>>329はそうならんけど
>>332
なに
350:を言いたいのかわからん。>>326は解決したんだろ? 強制終了と思い込んで次の展開されても困るぞ
351:デフォルトの名無しさん
19/12/29 02:31:00.58 MrCxy9bb.net
>>333
全ては>>329でdashとbashで動作に違いがあるってことだよ
強制終了は強制終了。そのまんま終了してしまうってこと
352:デフォルトの名無しさん
19/12/29 02:46:04.76 FmabBrht.net
強制終了自体してなくないんじゃないの
なぜかスクリプトファイルとして実行すると、dash/kshではサブシェルのtrapが動いてないな>>329は
シグナル無視なのかなんなのかendまで動き終わる
>>326はそんなんじゃなくて、単なるシンプルな間違いで、違いもなんもないけど
353:デフォルトの名無しさん
19/12/29 03:24:42.26 QzTL60WW.net
URLリンク(community.progress.com)
Posted by ske on 8 Aug 2017 13:59
らしいよ。6. とか確かに
コマンドラインでの違いとかはわからんけど
354:デフォルトの名無しさん
19/12/31 07:15:28.46 xfr0s5Fj.net
PowerShell最強説
355:デフォルトの名無しさん
19/12/31 08:44:50.09 qHnQy48w.net
諸説あります
356:デフォルトの名無しさん
19/12/31 15:40:24.49 F82oxaIy.net
※個人の感想です
357:デフォルトの名無しさん
19/12/31 23:33:05.25 vVhGTaaB.net
僕もPowerShell愛用しています。
これを使い始めてから人生茨色です!
358:デフォルトの名無しさん
19/12/31 23:43:55.86 tLgKzi5A.net
人生の道が茨で埋め尽くされております!
359:デフォルトの名無しさん
19/12/31 23:48:11.73 9cUyZ2YF.net
※ 来世にご期待下さい!
360:デフォルトの名無しさん
20/01/01 08:19:52.80 6zSEt3Eo.net
>>337
使用されることが最強に少ない感
361:デフォルトの名無しさん
20/01/02 13:42:39.95 ZoBKtk8g.net
例えば/usr/local/binに
#!/bin/bash
xdg-open /usr/local/bin/hoge.html
という中身のhogeってファイル入れてコマンドで同階層のhtmlを開きたい場合、
ブラウザを閉じたら
[Parent fuga,Cecko_IOThread]
WARNING:pipe error: Connection reset by peer(piyo):
Connection reset bu peer:
file /build/firefox-esr-tpvy6K/filefox-esr-68.2.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc. line 358
という表示が出てくるのですがこれを表示させない方法ってありますか?
362:デフォルトの名無しさん
20/01/02 13:59:42.22 Ifo0PTAe.net
Bugzilla に登録されてるね。
Gecko_IOThread] WARNING: pipe error: Broken pipe: ... ipc_channel_posix.cc
URLリンク(bugzilla.mozilla.org)
363:デフォルトの名無しさん
20/01/02 14:17:59.62 ZoBKtk8g.net
>>345
つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m
364:デフォルトの名無しさん
20/01/02 18:23:50.86 8+JZKzet.net
>>345
プログラム板の鑑みたいな人だな
凄い
365:デフォルトの名無しさん
20/01/10 15:59:20.38 pZwemz/Y.net
GNU sedって一応POSIXに準拠してるけど、色々拡張機能もあるじゃん
こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある?
366:デフォルトの名無しさん
20/01/10 16:05:57.94 c8NDboJX.net
GNU sed, GNU awk には --posix オプション、GNU bc には --standard
っていうオプションが用意されている
367:デフォルトの名無しさん
20/01/11 08:05:41.49 IVNUyUW+.net
知らんかった。ありがとう
368:デフォルトの名無しさん
20/01/11 21:29:54.53 9SPVzhvj.net
やっぱzshクソ。pathとかstatu
369:sが特殊変数なのやめてくれ。 しかも大文字と小文字区別しねーし path=hogehogeってやったら、環境変数PATHから検索しなくなる。 command not found!
370:デフォルトの名無しさん
20/01/11 23:34:38.48 NBzz9dXo.net
単にいままでのに慣れて違いを受け入れないってだけだな
371:デフォルトの名無しさん
20/01/11 23:39:31.73 NBzz9dXo.net
なんだ、単に zsh = ksh + tcsh ってのを理解してなくて的外れな文句言っているだけじゃん
アホらしい。文字通り
372:デフォルトの名無しさん
20/01/12 08:42:02.61 QbL/hexX.net
なんでそんなに攻撃的なんだよw
373:デフォルトの名無しさん
20/01/12 09:36:05.07 FpBV3Lt5.net
>>1より
> ・csh/tcshでのシェルスクリプトは*まったく推奨しません*
>>353
> なんだ、単に zsh = ksh + tcsh ってのを
kshにまったく推奨しないものを加えたら、クソになるんじゃないですかねぇ(笑)
374:デフォルトの名無しさん
20/01/12 09:39:05.21 u1ffAIxu.net
あと、環境変数の大文字と小文字は区別されてるのに
PATHに関してだけ区別されないのはどう考えてもクソだと思いますよ
pathに代入してもPATHが変わるってどう考えても
存在理由がない機能でしょw
375:デフォルトの名無しさん
20/01/12 11:22:16.69 QbL/hexX.net
まるでwindows…
376:デフォルトの名無しさん
20/01/12 17:34:52.15 J9pO5B5T.net
そんなに不満があるなら誰かがフォークしてそれがメジャーになってるだろ
俺が正しいって言ってもお前の頭の中ではだな
377:デフォルトの名無しさん
20/01/12 18:17:26.10 QbL/hexX.net
せやな。
事実一番メジャーなシェルはBashだしね。
378:デフォルトの名無しさん
20/01/12 18:54:12.07 J9pO5B5T.net
読めない自己紹介にしかなってないな
379:デフォルトの名無しさん
20/01/12 19:23:15.19 J9pO5B5T.net
>>356
わざわざ後付けで書いてあるのに根本的に何も理解しようとしてないだけだな
大文字小文字を判断してないじゃないよ、
PATHは単なる文字列pathは配列、
pathはcsh特有での、
PATHとpathという別の2つの環境変数
shモードcshモードを切り替えてなんていう実装ではなくちゃんぽんの可能な実装なので、PATH/pathをどちらか変更したら相対する方にも同期するというのだろ。そもそもcshでのpathがそういうものらしいが
内部的に参照しているのはpathの方かな。同期されない特定状態の場合から(どういうときか探してみようw)
今まで使っていたのと違うというだけじゃ話にならない、俺が正しいって言ってもお前の頭の中ではだなでしかないということ(>>355なんてそれが甚だしいけどw)
380:デフォルトの名無しさん
20/01/12 21:32:38.39 UPYAUoGA.net
cshがーっていうけど、zshとcshに互換性はまったくないじゃん
真似しなくていいものを真似した結果、貴重な短い変数名が
使えなくなってしまったことに違いはないんだけど
381:デフォルトの名無しさん
20/01/12 21:53:04.90 J9pO5B5T.net
作りもしないのに何を文句だけ言っているのだか。そんなに俺が偉いしたいの?
This is a shar file containing zsh, a ksh/tcsh-like shell.
というコンセプトで始めてるんだよ、その成果が認められているのは有名ディストリでもパッケージとしてあるんだから明らかだろう
そんなに俺の考えたのが最強なら作ってみればいいじゃん、フォークしてでも。世界に名を轟かせるいい機会だぞ、こんな匿名で偉そうに評論してんじゃなくw
382:デフォルトの名無しさん
20/01/12 22:07:46.46 7H3TRCXg.net
zshのクソ機能をクソ機能と言っただけで
なにファビョってるんだろう?
お前が作ったわけでもないだろうに
バカにされたとでも思ってるのか?
383:デフォルトの名無しさん
20/01/12 22:14:00.70 J9pO5B5T.net
クソ機能をクソ機能と言えるほど全然賢くないのが明らかなのに、自覚のないヤツ(ら?)だなあという。自覚がないようだからでしかないんだがな
いや、そのコメでますますアレでしかないなあ。自分は何かをクソと呼ぶが、自分が同じように呼ばれると聞かないって、じゃあ、そもそもどういうつもりでクソと呼んでいるのか?哲学だよww
結局俺偉いだけもしくはただの根拠のない感情だけだから、俺が自分自身と同じだと思ってそんなコメすんだろな?としか思えんけど
384:デフォルトの名無しさん
20/01/12 22:26:10.29 7H3TRCXg.net
うわっw なんだろう、これ美味しくないって言ったら
お前は料理できるんか?みたいな反応
ただの評論家だろ、評論家は評論するな!
自分で料理しろ、自分で自分で絵をかけ、自分で歌を歌え
プロよりうまくなかったら、評価する資格なし。みたいな極端な考えw
385:デフォルトの名無しさん
20/01/12 22:29:57.49 J9pO5B5T.net
わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん
それに対して、そんなことないぞなぜなら~と返しているのだが。なにか問題があるか?
料理調理の内容がというなら自分で作れというのはいたって当たり前だろう。不満があったら自分で調理するのがOSSだからな
結局俺偉いってだけで反論を許さない、なぜなら俺偉いからというだけかw
386:デフォルトの名無しさん
20/01/12 22:36:44.16 7H3TRCXg.net
> わざわざ不特定多数のとこで美味しくないという個人的感情を書く理由はなんなん
レビュー。Googleもやってるで
387:デフォルトの名無しさん
20/01/12 22:39:15.15 J9pO5B5T.net
ちょっと意味がわからんが、ああいうとこはやりとりはしないできないだろ
てか、ど素人かよ。スクリプトであってもまがりなりにも何か自分で作っているのに未だど素人かよと思ってしまうな、クレーマーレベルすぎてw
388:デフォルトの名無しさん
20/01/13 05:57:08.53 iUioslZh.net
そんなに気に入らないなら自分で新しいシェル作れば良いのに。
389:デフォルトの名無しさん
20/01/13 06:56:27.50 00IYKkjv.net
信者の例
新しいバトルシステムが使いづらい
→ そんなに気に入らないなら自分で新しいゲーム作れば良いのに
「設定」が使いづらい
→ そんなに気に入らないなら自分でOS作れば良いのに
390:デフォルトの名無しさん
20/01/13 12:47:53.36 cEXtDkBR.net
ナポレオン「私は卵を産めないが、卵が腐っていると判断できる」
(Zshの利用者が満足するような)シェルを作れる自信はないが、
Zshの一部機能を腐ってるとは言える。
ていうか他の人も指摘してたけど二三の欠点を指摘されただけで
まるで自分の人格を全否定されたかのような反応をするのってどういう感情なんだろう?
391:デフォルトの名無しさん
20/01/13 15:10:18.33 v+Mp6rDH.net
psコマンドで見て a.out で実行されているプロセスを全部 kill -9 してくれるスクリプトってどう書いたらいいですか
392:デフォルトの名無しさん
20/01/13 15:12:27.51 stzsvKPq.net
教えてあげないよじゃん
393:デフォルトの名無しさん
20/01/13 15:35:35.00 v+Mp6rDH.net
約に立たない2chのクズ共が自分で調べた方が早い
ps | grep "./a.out" | grep -v grep | awk '{ print "kill -9", $1}' | sh
394:デフォルトの名無しさん
20/01/13 15:47:43.19 GhUCXbF0.net
374は屑だが回答ないと豹変するのもどうかと
395:デフォルトの名無しさん
20/01/13 16:00:10.75 L1QEfUqR.net
killall でいいんじゃないかな
396:デフォルトの名無しさん
20/01/13 16:03:48.34 cEXtDkBR.net
煽って回答を貰うのはよく見掛ける光景だけど
煽りながら自己解決するのは珍しいなw
397:デフォルトの名無しさん
20/01/13 16:56:48.83 48BANHU6.net
zshはbashの強化版だと思ってたら違うのね
bashを覚えるので手一杯なんで他のシェルに浮気する余裕ないけど
398:デフォルトの名無しさん
20/01/13 22:41:06.83 ybxFvJaC.net
シェルスクリプトとしてはzshは使わないね。
bashとだいたい互換性があるシェル。
スクリプトとしてはPOSIX準拠にするかbashでしょう
399:デフォルトの名無しさん
20/01/13 23:52:57.18 HaVRjpT+.net
>>379
派生、元とした流れが全く違うからね
新しい機能つけるのに相互に参照してたり参考にしてたりするかもだが
400:デフォルトの名無しさん
20/01/14 00:50:43.36 /0srrHag.net
macでosアップデートしたらzsh強制になったんだが
401:デフォルトの名無しさん
20/01/14 03:49:13 GtH+RxOj.net
アップデートでは強制にならないよ
アップデートでなくても強制でもないし、単なるデフォ
402:デフォルトの名無しさん
20/01/14 16:08:03.31 5kcRpVJe.net
いつもの
URLリンク(i.imgur.com)
403:デフォルトの名無しさん
20/01/14 18:06:08.65 Xjyusg2Z.net
>>384
>>2のリンク先にオリジナルが書いてあるから、
どこぞに転載されたものを貼り付けなくていい
404:デフォルトの名無しさん
20/01/14 18:09:26.71 Xjyusg2Z.net
この図 URLリンク(tangentsoft.com) を見ると
zshはtcshを取り入れてると言うが、正確にはそれをやったのはKornShellで
その後継のksh88が、POSIX shellやbash等の現存する全てのシェルの祖先に
なるわけだから、zshと同様にdashやbashなんかもtcshを取り入れてることになるんだよな。
405:デフォルトの名無しさん
20/01/14 18:10:25.17 Xjyusg2Z.net
ksh2020でたからこの図更新してくれんかなw
406:デフォルトの名無しさん
20/01/14 18:46:58.03 3k/caRNi.net
kshってなんか凄いんだな
昔、AIXでksh書いた事あるけど
AIXぐらいでしかインストールされてる環境に出逢ったことない
Solarisでbsh書いてた後に触って配列使えて感動したのを覚えてる
また使ってみるかなぁ
407:デフォルトの名無しさん
20/01/14 23:00:12.31 eC6vK415.net
>>386
図だけで想像しすぎ
kshで取り入れたのはヒストリ機能などの極めて一部
そういろいろいうなら、ちゃんと調べた方がいいよ
408:デフォルトの名無しさん
20/01/14 23:05:01.84 eC6vK415.net
>>388
インストールというのならmacOSも昔から標準で入ってる
デフォルトログインシェルなのはAIXぐらいらしいね
409:デフォルトの名無しさん
20/01/15 00:00:09.35 kWU6CwmB.net
UNIXでbshができる
BSDでcshができる
改良版のtcshができる
bshにtcshを追加したkshができる
kshが商用だったので派生が拡がる
軽量版bshのashができる
Lnux版ashのdashができる
GNU版bshのbashができる
機能マシマシのzshができる
独立系のfishができる
こんな感じか
文字の修正とか昔のbashにはなかったらしいな
410:デフォルトの名無しさん
20/01/15 00:15:20 iV6SKP+H.net
デジャヴな適当なまとめレス
411:デフォルトの名無しさん
20/01/15 00:24:02 PiCqpD5C.net
fishは全然関係ねー
互換性がない別物
412:デフォルトの名無しさん
20/01/15 07:03:57 kWU6CwmB.net
関係ないから独立系にしたんだけど
413:デフォルトの名無しさん
20/01/15 07:44:52 YlxQUfnE.net
それ依然に単に図を適当に日本語にしただけの説明なんてしなくていいから。
414:デフォルトの名無しさん
20/01/16 07:51:49 kJFHtYN8.net
TETって使ってる?
OpenGroupが配布してる適合テスト
415:デフォルトの名無しさん
20/01/17 08:13:43 z4CRALQ3.net
しらん
416:デフォルトの名無しさん
20/01/19 08:08:23 q9WTUin1.net
例えば'100 50'を渡すとして、コマンドと実行結果がそれぞれ
awk '$0' #100 50
awk '$0+=1' #101
awk '$0+=$0' #200
awk '$0+=$2/2' #125
awk '$1+=$2/2' #125 50
みたいになったのですが、内側3つの挙動がよく分かりません。
予想ではそれぞれ'101 51'や'200 100'や'125 75'等になると思っていたのですが、
$0って計算式を書き込むと$1を表示する仕組みなんでしょうか…?
417:デフォルトの名無しさん
20/01/19 09:17:02 qcodQ+dh.net
$1, $2 などは、フィールド(列)変数。
$0 は、入力レコード(行)全体
こういう特別な変数に、代入してはいけない!
読み込む事だけに使うこと!
418:デフォルトの名無しさん
20/01/19 11:47:43.00 eoYSOV4S.net
それは言いすぎだろう。少なくとも gawk では何が起こるか明確になっている。
理解する気が無いならやらない方がいいというならその通りだ。
419:デフォルトの名無しさん
20/01/19 19:39:38 JpGnQ0ST.net
シェル芸の定義って、スクリプトファイル作らないで、シェル(CLI)を駆使して
実用的ではないネタを披露すること。でいいですかね?
いやあまりにもくだらないネタが多いんで
420:デフォルトの名無しさん
20/01/19 19:41:53 rMML9kO3.net
何が言いたいんだか
421:デフォルトの名無しさん
20/01/19 19:52:31 JpGnQ0ST.net
難読化シェル芸の解読
ながいPythonコードをシェル芸で実行させる
じわじわ広がる星型模様シェル芸
動く!電光掲示板シェル芸
ボディビルダーが泳ぐシェル芸
アイドルグループが46か48かわからなくなったときにワンライナーで解決する方法
鬼滅の刃の幾何学模様シェル芸
踊るgifシェル芸
ojichatグラフシェル芸
3の倍数と3が付く数字のときだけアホになるシェル芸
床屋シェル芸
闇シェル芸「さあ、闇のゲーム(シェルゲイム)の始まりだぜ!」
実践 キングウンコの作り方
画像っぽい素数をシェル芸でつくる
fish起動時にサイゼリヤ1000円ガチャの結果を表示する
【危険シェル芸】禁じられた闇の魔術とその防衛術??
422:デフォルトの名無しさん
20/01/19 19:54:37 ExWppFRM.net
>>400
POSIXでも、
The symbol $0 shall refer to the entire record; setting any other field causes the re-evaluation of $0. Assigning to $0 shall reset the values of all other fields and the NF built-in variable
と明言してるね。$1~$nを変えれば$0が再構築され、$0を変えれば$1~$nとNFが作り直される風に
423:デフォルトの名無しさん
20/01/19 20:01:00 ExWppFRM.net
>>403
ふむ
それがくだらなくないレスなのか。読んだ時間を返せw
424:デフォルトの名無しさん
20/01/20 04:39:32 JFurewkA.net
>>351
っPowerShell
425:デフォルトの名無しさん
20/01/20 15:24:29.08 oVJVVsJQ.net
>>399 >>404
ありがとうございます、普通に動くから大丈夫だと思ってましたm(_ _)m
とりあえず今後は素直にprintで出力します
426:デフォルトの名無しさん
20/01/21 12:52:55 m6IPx8KZ.net
kshって今時だとninjaとか使うんか…
昔ながらのMakefileじゃないんだね
427:デフォルトの名無しさん
20/01/21 21:11:00 Mn6KsPak.net
教えていただきたいことがあります。
ワンクリックで複数のターミナルを開いてそれぞれで別々のコマンドを動かすスクリプトを書きたいと思っています。
gnome-teminalにオプションつけたらいけるかと思いますしたが、うまく行かなくて、、なにかアドバイスいただけないでしょうか
428:デフォルトの名無しさん
20/01/22 07:07:11 uCiji4On.net
gnome-terminal なら -- の後に実行したいコマンドを書けばいいだけみたいだけど
動いているが挙動がイマイチとかじゃないの?
うまく行かないって、そのままTerminalとしてウィンドウを残しておきたいとか引き続きインタラクティブでなんかしたいとか?
429:デフォルトの名無しさん
20/01/22 07:22:53 uCiji4On.net
GUI Terminalアプリは一般的にコマンドが実行し終えたらアプリも終える=ウィンドウも消えるという、まあそうなるか的な(まあshもそうだし)
gnome-terminalはオプションでウィンドウを残すようにできるが、なんかイマイチかな、出るべきものが出てないとか
gnome-terminal -- sh -c 'なんかコマンド;sh'
が確実に解りやすいかなあ
shで引き続きインタラクティブにするのには、--rcfile スクリプトファイル という変態的な方法で
gnome-terminal -- sh --rcfile スクリプトファイル
とかあったが、変態すぎてしないなw
430:デフォルトの名無しさん
20/01/22 20:17:38 IMIM4EWG.net
返信ありがとうございます!
具体的にはFIFOを複数作成した後に、
ffplay (作成したfifo) というコマンドを
fifoの数だけ開きたいのですが、数が多くて一つ一つ開くのは大変なので、スクリプトで一気に開けないかと考えているところです。
431:デフォルトの名無しさん
20/01/22 20:31:41 aGAY9ZaD.net
ffplayって自分で独自のウィンドウ開くんじゃないの?
全てバックグラウンドで起動する/動かせばいいんじゃないの?
ffplayが吐くログも同時に見たいとか??
432:デフォルトの名無しさん
20/01/22 20:38:59 0dPQnm43.net
>>413
説明不足ですみません、、
そうなんです、ログも同時に複数表示させたくて
433:デフォルトの名無しさん
20/01/22 21:18:09 aGAY9ZaD.net
for i in 1 2 3 4; do
gnome-terminal -- ffplay $i.fifo
done
で、再生中はTerminalウィンドウも健在でログも見えるんじゃないの。ffplayが終了したらTerminalウィンドウは閉じてしまう
gnome-terminal -- sh -c "ffplay $i.fifo;sh"
で、Terminalウィンドウも残ると思うけど。Terminalウィンドウでffplayを終了させようとctrl-cすると、後のsh起動まで行かないけど
434:デフォルトの名無しさん
20/01/22 21:37:15 0dPQnm43.net
>>415
ありがとうございます!!
できました!
先週linux初めて触って分からないことだらけで、お手数おかけしました、、
435:デフォルトの名無しさん
20/01/25 17:35:52.15 2I6NhO3j.net
index=2,INFO1="abc",INFO2="ab,c"
↑こういう風に
「カンマ区切りで値が並んでて、区切り文字ではないカンマは引用符で囲まれてる」
みたいなデータに対して、
シェルスクリプトでINFO2やらindexやらの値を取得したいんだけどどういう方法がいいですかね。
IFSをカンマにする方法では引用符で囲まれてるカンマも区切りと見做されちゃうし…
シェルって""←の中を特別に扱う筈だから、evalとか使えば効率的に処理できそうなんだけど、
思い付かん…
436:デフォルトの名無しさん
20/01/25 19:29:47 nGGHbHoP.net
なんか前も似たような話があった気がするな
でもカンマ区切りでダブルクォートの中にカンマが含まれてるのかー
ってかCSV形式だなw
CSV関連のコマンドと連携させれば簡単に作れるけど
俺は使いたくないなー。というすると自分でパースするしか無いかなー
自分が必要なら最悪パースするけど、簡単な方法ないかなーw
437:デフォルトの名無しさん
20/01/25 19:31:22 nGGHbHoP.net
あ、IFSをカンマにしてから、evalに渡せばできるんじゃね?
438:デフォルトの名無しさん
20/01/25 19:32:25 nGGHbHoP.net
あ、evalじゃだめか。setがいるか
439:デフォルトの名無しさん
20/01/25 19:44:38 nGGHbHoP.net
setはいらんかったw
あとはスペースが入ってるときかー、どうやって対処するかな?
440:デフォルトの名無しさん
20/01/25 20:29:47.31 2I6NhO3j.net
>>418
CSV形式の一種なのかな。
ただ改行はなくて、常に一行。
あと引用符はあったりなかったりする。
具体的には、m3u8プレイリストの一部を処理したいのよね。
441:デフォルトの名無しさん
20/01/25 20:29:55.33 S3XsKqnt.net
プログラミング言語でやったことあるけど
もともとあるデータに手を加えられないなら
カンマを違う区切り文字に置き換えたかな
行解析ロジック入れたりもした
最近作ったシェルスクリプトだと
読み込むファイルをちゃんと設計して
そんなデータは行末に来るようにした
そしてwhile readで処理できるようにしてる
442:デフォルトの名無しさん
20/01/25 20:48:15 2I6NhO3j.net
超具体的に言うと(てかここまで直接に状況を晒すとクレクレみたくなるなw)
“playlist.m3u8”っていうファイルだとして
↑こういう形式の行が沢山あるんだけど、
ここのRESOLUTIONの値と対応するMOVIE-URIの値をずらずら欲しい。
IFSを変える方法だとやっぱり引用符に関係なく「,」で区切られちゃうのよね
while read l; do
IFS=','; for s in "$l"; do
echo "$s"
done
done < ./playlist.m3u8
443:デフォルトの名無しさん
20/01/25 20:49:51 2I6NhO3j.net
>>423
自分で生成するんだったら区切り文字は絶対に
他の文字と被らないようにするんだけどね……
444:デフォルトの名無しさん
20/01/25 21:15:13 nGGHbHoP.net
面倒になったー
index=2,INFO1="abc",INFO2="ab,c"
を
index=2 INFO1="abc" INFO2="ab c"
に変換すれば
evalできるよ!
あとは頑張ってー
445:デフォルトの名無しさん
20/01/25 22:38:09 2I6NhO3j.net
>>426
それだと引用符の中のカンマまで変換されちゃうのよね。
まあ、もう簡単に処理する方法はあきらめて
AWKやらでガシガシ解析するしかないw
446:デフォルトの名無しさん
20/01/25 22:39:10 nGGHbHoP.net
>>427
戻せばいいよー
447:デフォルトの名無しさん
20/01/25 22:40:41 nGGHbHoP.net
んー?戻すとなったらset使ったほうがいいんか?
eval set -- index=2 INFO1="abc" INFO2="ab c"
$1, $2,・・・代入されるからに処理しやすい
448:デフォルトの名無しさん
20/01/25 22:41:54 nGGHbHoP.net
> AWKやらでガシガシ解析するしかないw
シェルスクリプトでも普通にやればいいんだけどねー
一文字ずつ処理する方法さえ調べれば、
あとは簡単な普通のパーサー
449:デフォルトの名無しさん
20/01/25 22:43:30 nGGHbHoP.net
こういうのってawkで高度(?)な機能と発想の転換で使ってこなすより
1文字ずつ処理したほうが楽でわかりやすいよな
450:デフォルトの名無しさん
20/01/26 01:20:08.20 GaEtLwpN.net
GNU awk なら FPAT が使える
echo 'index=2,INFO1="abc",INFO2="ab,c"' |
gawk -vFPAT='[^=,"]+=("[^"]*"|[^,]*)' '{print gensub(FPAT, "\\1", "g")}'
=> 2,"abc","ab,c"
451:デフォルトの名無しさん
20/01/26 01:26:07.97 gf7z5zyj.net
>>432
そういうやつね、高度な機能っていうのは
大体動くんだろうけど、仕組みを把握するのがだるいんだよね
仕組みっていうかどこまで動いて、どこが動かないのかの把握
大体動く精神なんだろうけど、それ使う側がそれで
納得できる前提だから、知らない人が使う場合困るんだよな
いざ問題が起きたら、対応が逆に大変になる
452:デフォルトの名無しさん
20/01/26 01:31:16.29 GaEtLwpN.net
いやぁ、こっちからみると eval や set を使う方がツラいわ…
453:デフォルトの名無しさん
20/01/26 01:38:47.61 3NTRDHS2.net
evalやsetは普通にシェルが文法を解釈するのと
同じ動きをするだけなんだからシンプルだろ
シェルの構文パーサー自体はしっかりと作られてるんだから
でもFPATはだいたい動くという理念で作られてる
454:デフォルトの名無しさん
20/01/26 01:48:36.68 GaEtLwpN.net
FPATって単なる正規表現(ERE)でしかないけどな。個人的には正規表現で
考える方が楽でいいし確実。以前に同じ様な事があったけど、
・変数名にもカンマを使いたい(SQLみたいにバッククォートで括る)
・値の方には複数行のテキストを入れたい(newlineを使える様にして)
っていうリクエストがあって大変だったけど、結局 python の CSV パッケージ
を使って解決
455:デフォルトの名無しさん
20/01/26 02:14:38.87 3NTRDHS2.net
そもそも正規表現は単語(文字の並び)を見分けるもので
その単語の意味(このカンマはどういう意味?)を
見分けるものじゃないんだよ
本来得意ではない意味を区別できるよう拡張していったら
逆にコード見ても何をしているか意味がわからなくなってる
コードをパット見てその意味がわからんのは
スパゲッティコードと大差ないよ
456:デフォルトの名無しさん
20/01/26 02:21:54 GaEtLwpN.net
eval 使うのは面白いけど、
$ eval $(echo 'id=$(whoami),hostname=$(hostname),date="$(date)"' | tr , ' ')
fork_bomb=$(:(){ :|:& };:) なんて文字列を埋め込まれたら嫌だな…
457:デフォルトの名無しさん
20/01/26 03:03:54 GaEtLwpN.net
m3u8-file-parser(URLリンク(npm.taobao.org))なんてのがあるな
playlist のフォーマットって RFC8216 で定義されていたのね
458:デフォルトの名無しさん
20/01/26 09:15:52 EvZHCPY7.net
URLリンク(tools.ietf.org)
属性列挙を解析したいって話か。
459:デフォルトの名無しさん
20/01/26 11:48:02 EvZHCPY7.net
>>427
AWKで解析するとして、コンマが引用符の中かそうじゃないかなんて判断できるのかな?
正規表現は>>423も言ってる通り単に文字の並びを指定するもので
ある箇所での文字の「意味」は定義できないからこういう作業には向いてなさそう。
460:デフォルトの名無しさん
20/01/26 13:26:43.97 XFNlR92Q.net
てかお前らいつまで化石みたいな話してんの?
PowerShellやれよ
お前らが大好きなLinuxにもPowerShell入れられるように成ってるからw
もうこれからはハイパーVとかWindowsサーバーとかWSLできないと食ってなるぞお前らまじで
461:デフォルトの名無しさん
20/01/26 13:39:38.23 IghF1+Kj.net
Perl ならこんな感じか。
perl -ne 'while ( /(("[^"]*"|[^,])+)/g ){ print("$1\n") }'
Perl にも CSV を扱うモジュールはあるけどね。
462:デフォルトの名無しさん
20/01/26 13:42:52.65 EvZHCPY7.net
ちょっとやろうとしてみたけど
_var='a b "a,b" c "a b"'
IFS=' '
eval set -- $_var
for s in "$@"; do
echo "$s"
done
↑これが↓
a
b
a,b
c
a b
になるのに、
_var='a,b,"a,b",c,"a b"'
IFS=','
eval set -- $_var
for s in "$@"; do
echo "$s"
done
↑これが↓
a
b
a b
c
a b
↑こうなってしまうのでevalとsetでどうにかするのはかなり難しそう。
(コンマの情報が潰されちゃう)
シェルスクリプトで自作するのに拘ってるみたいだけど
m3u8パーサ?使うべきじゃないかなぁ。
463:デフォルトの名無しさん
20/01/26 14:11:49.86 GaEtLwpN.net
>>443
Perl(PCRE)だと non-greedy matching が使えるからいいよね
とすると GNU grep ではこんな感じ
grep -Po '((".*?"|[^,])+)'
464:デフォルトの名無しさん
20/01/26 16:19:39 5vRllc8t.net
なんかハマってるなw
例えば最初がこれだとするだろ?
index=2,INFO1="a bc",INFO2="ab,c"
ダブルクォートの中にスペースが入ることがあるとして、まずスペースをありえない文字(制御文字)に変換するだろ?
index=2,INFO1="a<DEL>bc",INFO2="ab,c"
次にカンマをスペースにするだろ?
index=2 INFO1="a<DEL>bc" INFO2="ab c"
これをeval + setするだろ?
eval "set -- $DATA"
そうすると、こうなるやんか?
$1: index=2
$2: INFO1="a<DEL>bc"
$3: INFO2="ab c"
あとはループして、<DEL>をスペースに戻しつつevalすればOKだよ
文字の置換はIFS使って分割して結合
俺が悩んでたのは、実はありえない文字に変換しないで
できないかなーってところなんだよねw
>>438
そういうのは仕様。それを防ぎたかったらevalは使えないのでパースするしか無い
もしくはエスケープ+evalだけどエスケープするために結局パースが必要になる
465:デフォルトの名無しさん
20/01/26 16:34:10 GaEtLwpN.net
URLリンク(npm.taobao.org) に載ってる m3u8 のサンプル
を見るとこういう行もある
#EXTINF:23.222 tvg-logo="haha, ddd" tvg-aa="sb@" tag=sa, Sample artist, : - Sample title
466:デフォルトの名無しさん
20/01/26 17:19:14.35 EvZHCPY7.net
<URLリンク(tools.ietf.org)によるといずれの形式の属性値も読点を含んではならないとあるのに,
例えば<URLリンク(tools.ietf.org)のCODEC属性値の説明には「引用符で囲まれた読点区切りの…」とある。
もしもAttributeValueの形式に全部のタグが従っていたら,上での細かい話は要らず�
467:ノ IFS=','やらawk -v FS=','やらいくらでも方法はあったのにね。 ざっと見たところ,属性値であるにもかかわらず読点を含むという仕様になってるのは例にも挙げた #EXT-X-STREAM-INF:タグのCODEC属性値のみっぽいので,もういっそそれだけを区別して処理するのもありかも。
468:デフォルトの名無しさん
20/01/26 17:24:07.99 EvZHCPY7.net
中身のない連投すまんが,
処理する相手がRFC 8216に準拠したファイルだという前提があるとするなら
タグごとに挙動を変えるほうが賢いかもしれない。
というのもどのタグにどういう文字列が現れうるかということが規格に明記されているので。
>>446 ありえない文字に置換する手法もいいとは思うけど,そういう制御文字ってたいてい
<URLリンク(pubs.opengroup.org)に記述されている
非可搬な文字だから,ちゃんと運用する予定のスクリプトに入れるのは不安……。
469:デフォルトの名無しさん
20/01/26 17:29:07.81 EvZHCPY7.net
しっかし音楽・映像関連の処理をシェルスクリプトでやろうとしているとは,
そうとう変わってるなw
普通そんなファイルが存在して,かつそれらを自分で処理する=その後何らかの形で利用する
ような環境にいるんだったら,もっと色々やりやすい道具(PythonやらJavaScriptやら)もある筈よね。
シェルスクリプトで処理するしかないのは,貧弱な環境と単純なデータ構造に対してでしょうに。
(まあ>>1で「他の言語でやれ」は禁止とあるから,シェルによる処理を考えているけど)
470:デフォルトの名無しさん
20/01/26 17:42:41.77 GaEtLwpN.net
世の中には「ナントカ原理主義」を標榜する一派がいるのでな…
いや、この話題はやめておこう
471:デフォルトの名無しさん
20/01/26 17:54:10.76 5vRllc8t.net
>>449
非可搬な文字ってどういう意味?
ただの文字コードに過ぎないし、化けるわけでもなし
どんな問題があるのか全くわからんのだけど、
それにそこのテーブルに書いてある文字がダメだというのなら、
ESCAPE文字もダメってことになるじゃんか
16進数で0x1B、8進数で033、 文字に色をつけるときの\033
echo -e "\033[0;31mテキスト\033[0;39m"
理論上でもいいからどんな問題があるのかを言ってくれないと
472:デフォルトの名無しさん
20/01/26 17:55:19.59 5vRllc8t.net
非可搬な文字を心配するぐらいだったらAWKのGNU拡張に対応してるかを心配するほうがより現実的w
473:デフォルトの名無しさん
20/01/26 18:45:22.92 EvZHCPY7.net
>>452
おっしゃる通り理論上の話で実際はほぼありえない(制御文字の使い方もほぼ統一されてるから)けど,
<DEL>文字が端末それ自体を制御する為のものだった場合,それが標準出力に出力された時に
端末自体に挙動が渡ってしまう。
> 文字に色をつけるときの...
事実色をエスケープ文字によって付ける方法はシェルの標準には載ってない。
474:デフォルトの名無しさん
20/01/26 19:38:00 5vRllc8t.net
>>454
別に<DEL>じゃなくてもいいよw
略称思いつかなかっただけだし、表示されて困る文字だからこそ
テキストの中に含まれてることはないだろという理由だし
> 事実色をエスケープ文字によって付ける方法はシェルの標準には載ってない。
シェルの標準の載ってるかどうかの話じゃなくて「非可搬な文字」だから「使えない」という
理屈でいくのなら、エスケープ文字も使えないねって話
俺は「非可搬な文字」だけど「使っていけないとは書かれてない」と言ってる
だいたい非可搬っていうのは、その文字の意味が定められていないぐらいの意味やろ
バイナリで見ればただのデータなんだから
バイナリで見ればこのバイトは非可搬な文字と一致するから
データの中に使ってはいけないんだ~みたいな話したいわけじゃないやろ?
475:デフォルトの名無しさん
20/01/26 21:27:37 EvZHCPY7.net
>>455
いや,別に<DEL>に限った話じゃない。
今回みたく
「シェルに扱ってほしくない文字を置換して一時的に退避」
→「シェルで処理」→「元に戻す」
↑こういう手法を使うにあったって必要な,
「普通の文字列には現れそうにない文字」
っていうのは大抵不可視の制御文字でしょう?(<DEL>だろうが<US>だろうが<FS>だろうが)
で,そいつら制御文字が標準出力に流れた時の挙動は未定義だから避けたほうがいいんじゃない?
という話。
繰り返すけど,これは理論上の話で,実際はほぼ起こり得ない。
けれども,
printf '\033[>c' | cat
↑こういうスクリプトが実行されたとすると,こいつはある種のOS/端末で端末情報を返すので
パイプも働かないし,おかしなことになる。
しつこいけど,こんなことが意図せず起きるなんて万に一つ。
普通は<US>やら<FS>やらを一時退避用の制御文字として利用するし,こいつらはOS/端末に対してなんら特殊な働き掛けをしないのが通例だからね。
ただ,しないとも限らないし,そうでないことが規定されておらず「非可搬」だと明記されていることも踏まえると,使わないほうがいいかなと。
476:デフォルトの名無しさん
20/01/26 23:20:03 5MGoPlaT.net
>>456
> で,そいつら制御文字が標準出力に流れた時の挙動は未定義だから避けたほうがいいんじゃない?
いやだから、そういう理屈でいくと、
「色をつけるエスケープ文字も避けたほうがいいんじゃない?」って
言ってるってことでいいんだねって聞いてるんだが
477:デフォルトの名無しさん
20/01/26 23:27:21 2jcz6vHU.net
Ruby にも、CSV モジュールがある
デフォルト設定では、
行区切り文字は、改行
列区切り文字は、カンマ
クォート文字は、"
この3つの特殊文字が、要素内にない時は、クォートしなくてよい
逆に、ある時は、クォート文字で囲む。
その際、" だけは、"" と2つにする!
478:デフォルトの名無しさん
20/01/27 00:03:23 2UZekz3a.net
>>458
話の流れが分からない馬鹿は引っ込んでろ
479:デフォルトの名無しさん
20/01/27 00:15:59 Ad8VU0Ek.net
csvパーサー使えで終わる話を
延々とやってる暇人のほうがどう考えても馬鹿だと思うぞ
480:デフォルトの名無しさん
20/01/27 02:47:42 ZRdDiNHX.net
必要なのはCSVパーサーじゃないんでしょ?
481:デフォルトの名無しさん
20/01/27 08:20:17 bYuDSUjl.net
>>457
うん。色を付けるエスケープ文字も,可搬な規格がない以上避けたほうがいい。
もちろん,ISO 1745やらに従って着色するという手もあるけど
IEEE Std 1003に準拠してる処理系がISO 1745にも準拠してるとは限らないからねぇ。
>>460
今の話はCSVの話じゃないよ,HTTP Live Streamingのファイル形式。
これはCSVの規格と違うもの。
482:デフォルトの名無しさん
20/01/27 12:19:59 3a7Xl2Zg.net
じゃあ可搬な規格がない文字を出力する
POSIX標準のtputはアウトだねw
可搬な規格がない = 使ったらダメって考えなんでしょ
なんで可搬な規格がないから使ったらダメになるのかさっぱりだw
483:デフォルトの名無しさん
20/01/27 12:49:44 YY6i47O6.net
>>463
どうやったら「避けたほうがいい。」が「使ったらダメ」になるんだ?
読んでるこっちの方のセリフだよ>さっぱりだ
484:デフォルトの名無しさん
20/01/27 13:00:46 3a7Xl2Zg.net
>>464
非可搬な文字だから,ちゃんと運用する予定のスクリプトに入れるのは不安
なんでしょ?その不安を解決するには禁止するしか無いじゃん
だいたい最初に聞いたはずだが、一体何がポータブルじゃないのかって。
ポータブルじゃないのはその文字を端末に表示した時の端末の挙動であって、
その文字を使ったときにシェルが誤動作するとかいう話ではまったくない
そもそも今回は画面に表示しないから全く関係ない。
スクリプトはどんな環境でも正しく動くのに避ける理由がない。
画面に表示した時の端末の挙動の話であることをあんたは理解してない
文字自体はポータブル(そもそもただの値でしか無い)
シェルスクリプトで使えないデータは 0x00 のみ(zshなど一部シェルでは使えるようだが)
485:デフォルトの名無しさん
20/01/27 13:02:14 3a7Xl2Zg.net
× 画面に表示した時の端末の挙動の話であることをあんたは理解してない
? 理解したふりして本質的な所が分かってない。理解が浅いから
話がつながってることが分かってない。それぞれ単独に知ってるだけ。
486:デフォルトの名無しさん
20/01/27 13:02:45 3a7Xl2Zg.net
文字化けした。ハテナではなくマル
487:デフォルトの名無しさん
20/01/27 13:02:53 bYuDSUjl.net
>>465
不安なのは俺であって>>464←こいつじゃない。
488:デフォルトの名無しさん
20/01/27 13:04:22 3a7Xl2Zg.net
知らんがなw IDなんか見てないw
489:デフォルトの名無しさん
20/01/27 13:09:39 J/l4gb9z.net
そこはちゃんと見ろよ。相変わらずオッチョコチョイな奴だw
490:デフォルトの名無しさん
20/01/28 10:45:44 kbn44J5i.net
シェルスクリプトでC言語みたく
do {...;} while ()
的な書き方できないかな。
つまり最初に条件無視して絶対一回実行されるっていう。
491:デフォルトの名無しさん
20/01/28 11:54:17 nzUBCcWX.net
while true; do
do_something
condition && break
done
492:デフォルトの名無しさん
20/01/28 13:32:33 wxWXUE5J.net
while
do_something
condition
do :; done
493:デフォルトの名無しさん
20/01/28 16:31:01 kbn44J5i.net
>>473
すげ。thx
494:デフォルトの名無しさん
20/01/28 18:42:04.80 eRWskeVd.net
do {...;} while () はいらない子
495:474
20/01/28 20:54:08.43 kbn44J5i.net
>>475
たしかにCでも>>472氏や>>473氏のような手法で
while (...) { ...; }
文で実現できるな…
496:デフォルトの名無しさん
20/01/28 21:18:03 G+y/1z2g.net
縁の下の力持ちだよ。
/usr/include で grep してみなさい。
497:デフォルトの名無しさん
20/01/29 13:54:11.80 B4xAwP+d.net
wc -mがUTF-8とかの文字列でも正しく判定できててビビった。
GNU系はともかく組み込み向けの実装では
絶対無理だと思ってBusyboxとかで試したんだけど、
全部正しい文字数を数えれてた……。
寧ろ喜ぶべきなんだけど、なんか釈然としない(foldとかがポンコツなのに)
498:デフォルトの名無しさん
20/01/29 14:12:22.86 sm4oITBd.net
逆にbusyboxは動くやろw
不安なのはBSDやで、
あれ、それなりにOKだったらそこで終わってるやん
POSIXの最低基準さえ満たせればいいって思ってる。
busyboxはPOSIX完全準拠を目指さない代わりに
「現実的な用途で動くこと」を目指してる。
UTF-8対応も現実的な要件の一つだよ
499:デフォルトの名無しさん
20/01/29 15:20:33 0dvwui3i.net
fold -w n に関しては LC_CTYPE=ja_JP.UTF-8 grep -Eo '.{1,n}' とかにするとか
500:デフォルトの名無しさん
20/01/29 16:06:00 9GJ5+8eT.net
Windows版busyboxも日本語処理なんとかしてくれないかなぁ。
cp932の処理がいまいちなのか、コマンド・プロンプトで使うlsでダメ文字のファイルが表示されないよ。
501:デフォルトの名無しさん
20/01/29 16:13:50 sm4oITBd.net
>>481
Windowsのネイティブ文字コードはUnicodeなのだから
cp932を使うのをやめればいいだけ
502:デフォルトの名無しさん
20/01/29 16:26:53 Q03p/42V.net
>>481
っ PowerShell
503:デフォルトの名無しさん
20/01/29 20:21:31.86 B4xAwP+d.net
>>480
grep優秀っすね…
504:デフォルトの名無しさん
20/01/29 20:22:55.72 UE7eyrg0.net
grepは俺が育てた
505:デフォルトの名無しさん
20/01/29 21:24:51 +kOHCQkf.net
>>482
cp65001 だと文字化けして使えない
>>483
powershell で busybox ls とやっても同じくダメ文字が表示されない
最新のバイナリ(busybox-w64-FRP-3329-gcf0fa4d13.exe)でもだめ
506:デフォルトの名無しさん
20/01/30 22:29:51 uJZNpkau.net
なんで対処方法お母さんに聞かなかったの?
自分で対応できると思ったの
507:デフォルトの名無しさん
20/01/31 07:54:20 aEgzRTpo.net
シェルスクリプトでaliasを使うことでしか実現できない挙動ってある?
コマンドを別に定義する方法って主に3通りくらいある
関数: somecmd() { ... }
別名: alias somecmd=...
変数 : somecmd=...
と思うんだけど、この内aliasに独特の特長ってあるのかな。
508:デフォルトの名無しさん
20/01/31 09:38:38 fxx+hpXO.net
>>478
UTF-8は上位ビットを見れば文字の先頭か途中かまた何バイトなのか等がわかるので変換しなくても文字数はわかる(詳しくはWikipedia等を参照)。
そんな小技使って作られているかどうかはわからないが。
509:デフォルトの名無しさん
20/01/31 10:37:58 XoEdclD3.net
>>488
alias loop="while true; do"
loop echo aaa; done
510:デフォルトの名無しさん
20/01/31 10:41:13 XoEdclD3.net
alias IF=if
alias THEN=then
alias ENDIF=fi
IF [ a = a ]; THEN
echo aaa
ENDIF
511:デフォルトの名無しさん
20/01/31 11:40:54 aEgzRTpo.net
>>490
一応変数使ってもいけね?
loop='while true; do'
eval "$loop echo aaa; sleep 0.1; done"
てかeval使えばなんでもありだから,
evalを使わずにって条件だと,挙げてくれた例みたいなことが
実現できるのかな。
512:デフォルトの名無しさん
20/01/31 11:42:09 XoEdclD3.net
× 一応変数使ってもいけね?
○ eval使ってもいけね?
だろ
513:デフォルトの名無しさん
20/01/31 11:42:25 XoEdclD3.net
そして、evalを使わないと実現できない
514:デフォルトの名無しさん
20/01/31 14:09:19.88 y3M2GGQ2.net
>>492
loop() { while true; do "$@"; done }
f() { echo aaa; sleep 0.1; }
loop f
515:デフォルトの名無しさん
20/01/31 15:35:28 aEgzRTpo.net
>>495
関数でもいけんじゃん
516:デフォルトの名無しさん
20/01/31 19:02:07.40 drX8qvaW.net
>>496
趣旨を理解してないなら黙ってて
517:デフォルトの名無しさん
20/01/31 19:33:30.56 dOfy+zuH.net
shebangにさ、#!/bin/sh -eu って書いたらちゃんと動くのに、
#!/bin/sh -e -u って書いたら動かない
オプションは一つしか受け付けない?
これってどこに仕様ありますか?
518:デフォルトの名無しさん
20/01/31 19:37:01 dOfy+zuH.net
一つしか受け付けないと言うか
#!/bin/sh -e -u
って書いたら
/bin/sh "-e -u"
って解釈されるのか
全体が一つの引数
519:デフォルトの名無しさん
20/01/31 20:39:38.35 NEnVm4zd.net
実はshebangの決まった仕様はないからOS依存
520:デフォルトの名無しさん
20/01/31 21:40:42.29 O7+QvGXX.net
>>500
仕様上はOS依存として、
実際にこれ以外の挙動をする場合ってあるの?
521:デフォルトの名無しさん
20/01/31 21:53:14.63 ppIZAX+V.net
>>488
\ でalias をキャンセルできる機能
関数とか変数では、例えば ls を定義したときに
簡単にキャンセルできない。alias なら
$ \ls
で一発O.K.
522:デフォルトの名無しさん
20/01/31 22:07:06 EhZkCGRB.net
この前会見したマスごみが感染元で
523:デフォルトの名無しさん
20/01/31 22:09:28 MHZeJgmL.net
>>502
command なら alias も function も OK
$ command ls
524:デフォルトの名無しさん
20/01/31 22:17:23.02 NEnVm4zd.net
>>501
a) 1つ目のスペースの前がコマンド名、その後はスペースも含めて1つの引数 (Linux等)
b) 1つ目のスペースの前がコマンド名、その後はスペース区切りの複数の引数 (昔のBSDやOSX等)
c) スペースも含めて全部コマンド名 (実在するか不明)
d) shebang非対応 (昔はあったがほぼ絶滅)
あとは、最大長とかにも注意
525:デフォルトの名無しさん
20/01/31 22:38:43 O7+QvGXX.net
macは違うのかよ。相変わらず独自文化だな。
526:デフォルトの名無しさん
20/01/31 23:54:24.78 9zbnwalP.net
>>505
#!の次は本来スペースだって知ってた?
527:デフォルトの名無しさん
20/02/01 00:09:21 4wtj5811.net
>>478
Windows10, WSL, Ubuntu 18.04 では、
中国の「深圳」みたいな、サロゲートペアも、1文字になる!
echo -n '深圳' | wc -m
2
528:デフォルトの名無しさん
20/02/01 01:59:55 Kd/XXZch.net
>>507
URLリンク(www.in-ulm.de)
によるとその話が正しい証拠はない模様
529:デフォルトの名無しさん
20/02/01 02:50:01 SC0qANHR.net
>>507
逆にスペースを入れてはいけないというふうに教わったけど、
入れたからといって動かないというのはないな。
530:デフォルトの名無しさん
20/02/01 18:54:16 izL/3CDz.net
>>510
オライリーのシェルスクリプトの本には
一部のBSD系OSで#! の後にスペースが要るみたいなこと書いてあった。
でも、これは又聞きで全部試した訳じゃないけど
そんな挙動のBSD実装はなくて、
実はGNUプロジェクトのソースコードに誰かが勘違いして書き込んだコメントが元らしい。
531:デフォルトの名無しさん
20/02/01 19:00:18 S6J9WFvX.net
>>505
> b) 1つ目のスペースの前がコマンド名、その後はスペース区切りの複数の引数 (昔のBSDやOSX等)
macOSが今もこれなんだな。複数の実装があるのはめんどくさいな
532:デフォルトの名無しさん
20/02/01 19:16:51 rbhAio8f.net
>>512
ソースチラ見した限りでは元々は a) ぽい。# の後ろはコメントとして切り捨ててるみたいだが
FreeBSDをガシガシ取り入れた時にFreeBSDが b) だからに変えたぽいかな。その後FreeBSDが a) に変わったが追従せずな
533:デフォルトの名無しさん
20/02/01 19:25:08 rbhAio8f.net
>>513
># の後ろはコメントとして切り捨ててるみたいだが
元々はこれもなく、まんま a) 。その後に #の後ろ切り捨て。その後 b) だった
534:デフォルトの名無しさん
20/02/01 19:29:08 7bhnkH1k.net
macOSでshebangにダブルクォートが入っていた場合どうなるんだろうなぁ
すぐそこにマシンあるから調べればわかるけどさw
535:デフォルトの名無しさん
20/02/01 19:56:33.67 rbhAio8f.net
一番古い10.0から公開されてる最新の10.4までで、そこでダブルクォート文字は現れない、'\n'、'#'、' '、'\t' ぐらいしか文字としてナニかを判断してない
単なる文字だね。そのまま引数としての単なる文字として
536:デフォルトの名無しさん
20/02/01 20:38:02.21 7bhnkH1k.net
日本語が不自由だぞw
537:デフォルトの名無しさん
20/02/01 20:50:05.02 izL/3CDz.net
shebangは悪い文化
538:デフォルトの名無しさん
20/02/01 20:54:33.24 7bhnkH1k.net
shebangよりも拡張子の方が良かったのかな?
539:デフォルトの名無しさん
20/02/01 20:57:55 rbhAio8f.net
なんか説明しようとしたんだがな
ダブルクォートが入っていても関係ないよ。なぜかは調べてね
540:デフォルトの名無しさん
20/02/01 20:59:45 rbhAio8f.net
>>518
悪い文化というより、POSIXで規定しろというだけかな
悪い文化のががっつりカーネルで実装されてるんだけど
541:デフォルトの名無しさん
20/02/01 21:13:13.94 izL/3CDz.net
>>521
単なる表現だから気にしないでほしいけど
悪い←実装ごとに挙動がバラバラ・標準仕様が規定を諦めている
文化←にもかかわらずほとんどの実装がこれを取り入れていて、利用者もしょうがなく使っている
という状況を言ったつもりだった。
542:デフォルトの名無しさん
20/02/01 21:19:14.91 rbhAio8f.net
>>522
なるほど
まあ、誰も(大多数が)困ってないんじゃなのかな、統一されてなくても
もしくはそれぞれがそれぞれが良いと思って譲らないとかかwそれは確かに悪い文化だな
誰も困ってないって方だと思うけど
543:デフォルトの名無しさん
20/02/01 21:48:34 7bhnkH1k.net
shebangが悪い所の一つは絶対パス指定ってところなんだよね
content-typeみたいなのだったら良かったのに
shebangのオプションに関しては使わないっていうのが正解なんだと思う
なぜならファイルを直接指定して実行すると変わっちゃうから
544:デフォルトの名無しさん
20/02/02 14:26:51.03 xQhhTPSe.net
てかshebang使わなくてもシェルから起動したらそのまま動かない?
と思って、念の為Bashから起動したらまさかのaliasが効かなかった……。
こういうのを避ける為に#!/bin/shとせざる得ないのか。残念。
545:デフォルトの名無しさん
20/02/02 16:53:40 XLs1Cb+c.net
>>524
絶対パスかどうかは、シェルというか、インタープリタに依存するんじゃないの?
Pythonなんかだと、パスさえ通っていれば、#!python とか #!python3 で使い分けできるし。
546:デフォルトの名無しさん
20/02/02 17:45:00 Cva1xhgA.net
>>526
(少なくとも現在は)shebangを解釈しているのはOSであって、絶対パス必須
#!pythonと書いたスクリプトをexecveした場合、普通は動かない
547:デフォルトの名無しさん
20/02/03 06:12:52 UlsnX0ii.net
みんな
#!/bin/env python
じゃないの?
環境変数使ってくれるよ
548:デフォルトの名無しさん
20/02/03 08:04:03 24GdBe+7.net
envがあるところは/usr/bin/envな
あとそれ使うと
#!/usr/bin/env bash -e
とかできなくなるからな
Linuxで
549:デフォルトの名無しさん
20/02/03 09:05:47 gnFHl5C0.net
>>529
/bin/envの環境と/usr/bin/envの環境がある
550:デフォルトの名無しさん
20/02/03 10:00:30 24GdBe+7.net
>>530
envってコマンドを使うと、環境の違いを吸収してくれるから便利だぞ
551:デフォルトの名無しさん
20/02/03 11:22:27 8ufJ91gq.net
>envがあるところは/usr/bin/env
に対しての
/bin/envにある環境もあるって話だろ。「それってなに?」だろ言うなら
552:デフォルトの名無しさん
20/02/03 11:28:54 sGoeeXwW.net
>>531
そのenvコマンドとやらのパスが環境ごとに違うんだよなぁ…。
553:デフォルトの名無しさん
20/02/03 11:40:34.98 8ufJ91gq.net
KCディフェンス覚醒したか?するか?
554:デフォルトの名無しさん
20/02/03 11:41:11 8ufJ91gq.net
やったな、KCディフェンスっ
555:デフォルトの名無しさん
20/02/03 11:41:39 YoBHNt10.net
Mac の香具師は、env をよく使う
556:デフォルトの名無しさん
20/02/03 11:41:40 8ufJ91gq.net
すまん、誤爆もいいとこ。ちょっと興奮してたw
557:デフォルトの名無しさん
20/02/03 11:57:54.57 MUEM5Vrv.net
env env env ...
558:デフォルトの名無しさん
20/02/03 12:09:00.93 sGoeeXwW.net
なんかこの前々スレあたりで標準出力と標準エラー出力に別々の処理を施した上で
どちらも標準出力に流す方法を見た覚えがあるんだけど
今それっぽい語句で検索しても引っ掛からない。
覚えてる人いない?
559:デフォルトの名無しさん
20/02/03 12:58:07.85 24GdBe+7.net
>>539
もっと前だったと思うが
まあこれとかだな
URLリンク(stackoverflow.com)
応用でこれとかな
URLリンク(unix.stackexchange.com)
560:417
20/02/04 21:40:22 M0ahQJ78.net
>>446
ありがとうございます。
コードを参考にさせていただいて、
sed -e 's/\("[^"]*"\)*,\("[^"]*"\)*/\1 \2/g'
という手法にしました。
今のところ
<<. cat |
aa,"dd,dd","aa,bb",cc,"ab c"
.
sed -e 's/\("[^"]*"\)*,\("[^"]*"\)*/\1 \2/g'
がうまいこといくので満足してます。
どうもお手数おかけしました。
561:デフォルトの名無しさん
20/02/04 22:00:02 zwthX76y.net
case $value in
ここ)
esac
ここって何ていうの?globじゃないよね?
562:デフォルトの名無しさん
20/02/04 22:01:37 /eeo/zhy.net
bash(1) だと pattern って書いてある
563:デフォルトの名無しさん
20/02/04 22:11:53 zwthX76y.net
パターンかぁ。汎用的すぎるなぁ。
564:デフォルトの名無しさん
20/02/05 07:03:40 TkSDhbEE.net
(unofficial) Bash Strict Modeって知ってる?
URLリンク(redsymbol.net)
これが何って話があるわけじゃないんだけど有名なのかな?と思って
外国だとそれなりに情報出てくるけど日本はあまり見つからない
名前が知られてないだけでsetで-eu -o pipefailしましょうというのは聞くけどね
ただIFS=$'\n\t'は知らなかったな。これやったほうがいいんかな?
スペースが削られてるから問題起きそうだけど
565:デフォルトの名無しさん
20/02/05 08:00:23 ER23be8Q.net
>>545
IFS=$'\n\t'
↑これはどういう事態を防げるの?
寧ろ
for file in *; do
echo $file
done
こういうのが動かんくなる気がするけど。
566:デフォルトの名無しさん
20/02/05 08:25:41 TkSDhbEE.net
>>546
それは変数使ってるわけじゃないから問題なく動くよ
567:デフォルトの名無しさん
20/02/07 21:49:29 fFz2F73L.net
URLリンク(github.com)
↑おもしろい。シェルも使える文芸的プログラミング
568:デフォルトの名無しさん
20/02/07 22:25:08.40 LLO+pCZY.net
めんどくさいので3行にまとめてくれ
569:デフォルトの名無しさん
20/02/07 22:46:56 LLO+pCZY.net
なるほど。文芸的プログラミングという
ドキュメントを書くときにコードを埋め込んで
(動作確認のために?)実行できるようにするための
マークアップ言語みたいなものがあるんだな
コードの中にコメントを埋め込むのとは逆の発想か
570:デフォルトの名無しさん
20/02/07 22:58:24 YkBBCjCg.net
bashのsourceって英語としては意味なんだろう?
includeとかimportだったら読み込むってわかるけど、
なんでsourceって単語にしたんだろうか
571:デフォルトの名無しさん
20/02/08 00:06:22.51 Ld8bPHII.net
なんのことかと思ったらMarkdown文書をソースとするshellがありますぞというだけかという感じ
572:デフォルトの名無しさん
20/02/08 08:03:47 EnngxFza.net
なんでそんなに偉そうなんだよw
573:デフォルトの名無しさん
20/02/08 12:05:42 vyHTTWz1.net
>>551
元々は設定ファイルを読み込む
$ source .bashrc
あたりで使っていたようなので、「基にする」あたりが
英語の意味かと思う
574:デフォルトの名無しさん
20/02/08 14:06:09 EnngxFza.net
今から考えるとimportコマンドとかの方がいいね。
575:デフォルトの名無しさん
20/02/08 14:51:42 0wE1WgKD.net
importは他のファイル等で定義済みの関数やクラスを今の名前空間に持ってくるイメージ
sourceは他のファイルに書いてるコードを実行するイメージ
言語によってはやってること同じだったりするけど主たる目的が違う気がする
576:デフォルトの名無しさん
20/02/08 15:15:58 rR7NyU2B.net
だな
577:デフォルトの名無しさん
20/02/08 15:41:05 WgESEu8I.net
> sourceは他のファイルに書いてるコードを実行するイメージ
動作としてはそうなんだけど、
気になってるのは英単語としてどうかなんだよね
変なことを気にしてると思うけど
そもそもsourceって動詞?ああ、動詞としての意味もあるのか?
URLリンク(talking-english.net)
> sourceは動詞でも使い方があり「仕入れる」といった意味になりますが、
>
> 例文
> We source our coffee beans from Venezuela.
> 私たちはコーヒー豆をベネズエラから仕入れている。
578:デフォルトの名無しさん
20/02/08 22:01:26 EnngxFza.net
importに名前空間を移動する印象があるのは同意だけど
sourceの「他のファイルに書いてるコードを実行する」ような印象はないな。
つーかsourceってシェル以外でみかけない。
名前空間とか高級な概念を無視する、単なる対象ファイルの実行・読み込みは
includeが一番「それっぽい」な。
C言語みたいなコンパイル方式でもm4・Xresourceみたいなインタプリタ・設定ファイル形式でも。
579:デフォルトの名無しさん
20/02/08 23:17:01.30 WgESEu8I.net
sourceの本来の名前が . だとして、
/etc/profileとかに . /etc/bash.bashrc とか書いてあるでしょ?
これは関数定義等を読み込んでると言うより、
ただそこにあるスクリプトを実行してるという感じがしない?
580:デフォルトの名無しさん
20/02/08 23:17:36.95 WgESEu8I.net
そもそもなんで . (ドット)だったのかっていう疑問もあるけどw
581:デフォルトの名無しさん
20/02/09 07:56:47 u8D56ofC.net
>>560
ああ、いや、たしかにそうなんだけど、
sourceっていう名前の(または.(ドット)って名前の)コマンドや指令が
シェルスクリプト以外で
582:見掛けないなと思ってさ。 じゃあシェルスクリプト以外の言語でsourceに最も近いはたらきをするのは なにかって言えば、includeかなぁ。と。
583:デフォルトの名無しさん
20/02/09 08:09:38.60 WtBEbY+3.net
includeで言えばC言語かなぁ
でもC言語のincludeはヘッダファイルの読み込みで
(今のC++はそうとは言えないが)
実行するものはなにもないものだったよね
.やsourceを他の言語で見たことがないのは同意
なんでこの単語を選んだのか。まあ当時はそういうことをするときの
標準的な単語はなく、includeやimportの方がたまたま有名になったってだけな気もするけど
includeってC/C++以外あったっけ?
584:デフォルトの名無しさん
20/02/09 08:12:52 WtBEbY+3.net
include, import, load, require, source
他に何があるかな?
585:デフォルトの名無しさん
20/02/09 08:15:45 WtBEbY+3.net
とういうか、その話をするためにきたんじゃなかったw
makeってどういう亜種があるの?
それぞれのOSでどこまで互換性があるの?
どこかにそういう情報まとまってないかな
586:デフォルトの名無しさん
20/02/09 08:19:42 WtBEbY+3.net
URLリンク(pubs.opengroup.org)
ここにPOSIXに関しては書いてあるけど、現実としてはどこまで互換性があるのかなと
つまり便利ないろんな機能(?が使いたいけど、ここには書いて無いようで
使っていいものなのかわからない
587:デフォルトの名無しさん
20/02/09 08:26:03 WtBEbY+3.net
オライリーのGNU Make、無料で公開されてたヽ(=´▽`=)ノ
URLリンク(www.yokoweb.net)
588:デフォルトの名無しさん
20/02/09 08:40:31 WtBEbY+3.net
Makeについて調べていたら上のシバンの話、!の後にスペース入れれっていうのが見つかったでw
URLリンク(web.sfc.wide.ad.jp)
> また,以 下のように,インタプリタ仕様として,感嘆符の後にスペースを含めてください.
>
> #! /usr/bin/perl
589:デフォルトの名無しさん
20/02/09 08:41:08 WtBEbY+3.net
ここまでコピペするべきだった
> パスの前のスペースを省略する場合,(DYNIXのような)4.2BSDを基本 とするシステムは,
> `#! /'は4バイトのマジックナンバーとして解釈される ので,その行を無視します.
> 古いシステムでは,`#!'行の長さにも小さな 制限があり,例えばSunOS 4では,(改行を含めず)32バイトになります.
590:デフォルトの名無しさん
20/02/09 09:07:13 nPaz0f5T.net
>>563
VBScript
591:デフォルトの名無しさん
20/02/09 10:20:28 gml78nRc.net
>>569
それ間違っている
URLリンク(www.in-ulm.de)
>You may also read, that (allegedly) such a kernel parses "#! /" as a 32-bit (long) magic.
>4.2BSD in fact doesn't require it, although previous versions of the GNU autoconf tutorial wrongly claimed this ("10. Portable Shell Programming", corrected with release 2.64, 2009-07-26).
>But instead, see 4.2BSD, /usr/src/sys/sys/kern_exec.c (the first regular occurence). A blank is accepted but not required.
592:デフォルトの名無しさん
20/02/09 12:28:36 mw6BsSoR.net
pgrepには検索文字数の制限があるのか?
593:デフォルトの名無しさん
20/02/09 12:29:59 3rHefPWY.net
そんなのあるのか? pgr
594:デフォルトの名無しさん
20/02/09 13:26:52 u8D56ofC.net
>>572
どこ情報?
595:デフォルトの名無しさん
20/02/09 14:04:29.38 Fnglc4p2.net
>>563
あなたはC言語がUNIXを作るために作られた言語だと知らないの?
596:デフォルトの名無しさん
20/02/09 14:07:08 Fnglc4p2.net
>>569
そもそもどのUNIX、Linuxの話をしているのか?
597:デフォルトの名無しさん
20/02/09 14:20:04 QqkdphAP.net
>>575
それがどう話につながるのか説明してくれ
598:デフォルトの名無しさん
20/02/09 14:57:41 RDxzsaY4.net
shellはUNIX上でのいちプログラム、UNIXはCで作られてる。shellだってCで(途中から?)作られていただろう。故に、
>当時はそういうことをするときの標準的な単語はなく、includeやimportの方がたまたま有名になった
ということはなく、同じならinclude使うんじゃねってとこかな?なんか違うから違うのにしたという方が読みやすいかなあ
shell scriptはPrologの構文が元じゃなかったっけ。ちょっとググったとこでは、
:-
か。なんかこれに似てるといえば似てるな . は