シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
シェルスクリプト総合 その32
■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
256デフォルトの名無しさん
2019/12/22(日) 11:21:06.45ID:JDtuJK73 むしろそうじゃない方が例外的な動作で奇妙に見えるけど
""の内側で$@は引数に展開されるし
"str$var"←こういう引用符だったら文字列と引数はくっ付いて表示される。
""の内側で$@は引数に展開されるし
"str$var"←こういう引用符だったら文字列と引数はくっ付いて表示される。
257デフォルトの名無しさん
2019/12/22(日) 11:45:14.20ID:JDtuJK73 sedでC言語中の#includeディレクティブを無効化したいんだけど
sed \
-e ':a' -e '/^#[[:blank:]]*include.*\\$/N;/\\\n/d;ta' \
-e '/^#[[:blank:]]*include.*/d'
↑これで対処できるかな。
sed \
-e ':a' -e '/^#[[:blank:]]*include.*\\$/N;/\\\n/d;ta' \
-e '/^#[[:blank:]]*include.*/d'
↑これで対処できるかな。
258デフォルトの名無しさん
2019/12/22(日) 12:51:34.17ID:O05uH48x259デフォルトの名無しさん
2019/12/22(日) 15:12:02.64ID:JDtuJK73 >>258
なるほど。
ただ、$@って配列変数じゃない気がするわ。
単に引数が空白区切りで格納されてるだけで。
↑じゃあ配列と何が違うんだと言われると難しいけどw
配列だとおこりえない挙動を示せるいい例が思い付かないので。
なるほど。
ただ、$@って配列変数じゃない気がするわ。
単に引数が空白区切りで格納されてるだけで。
↑じゃあ配列と何が違うんだと言われると難しいけどw
配列だとおこりえない挙動を示せるいい例が思い付かないので。
260デフォルトの名無しさん
2019/12/22(日) 15:49:52.02ID:9GUBQyj0 >>257
t は s の結果に依存するのでそこで使うのは適切ではないと思われる。
sed でやるならこんな感じか。
#!/bin/sed -f
/^#[[:blank:]]*include/!b
:L0
/\\$/{N;b L0}
d
t は s の結果に依存するのでそこで使うのは適切ではないと思われる。
sed でやるならこんな感じか。
#!/bin/sed -f
/^#[[:blank:]]*include/!b
:L0
/\\$/{N;b L0}
d
261デフォルトの名無しさん
2019/12/22(日) 16:03:17.69ID:XO28QfbO 削除じゃなくてコメントにしちゃうとか
sed -e '/^#[[:blank:]]*include.*\\$/,/[^\\]$/s:^://:' \
-e 's:^#[[:blank:]]*include://&:'
sed -e '/^#[[:blank:]]*include.*\\$/,/[^\\]$/s:^://:' \
-e 's:^#[[:blank:]]*include://&:'
262デフォルトの名無しさん
2019/12/22(日) 17:46:01.65ID:O05uH48x263デフォルトの名無しさん
2019/12/22(日) 18:25:06.92ID:M+q9E136 >>255
必要な仕様というよりシンプルな文字列展開としてはそうなるというだけでは
その例はたまたまそういうように使えるというだけのような
あえて賢い対応してるなと言うなら "v""$@" とか書く必要がないとこかな
必要な仕様というよりシンプルな文字列展開としてはそうなるというだけでは
その例はたまたまそういうように使えるというだけのような
あえて賢い対応してるなと言うなら "v""$@" とか書く必要がないとこかな
264デフォルトの名無しさん
2019/12/23(月) 15:40:09.98ID:YJsAIsu8 シェル組み込みのgetoptsを同一処理内で二回以上用いるときに
$OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
dashみたいにgetoptsを内蔵していないシェルでは
外部コマンドとしてgetopts(1)を起動した瞬間に$OPTIND変数が初期化されるみたい。
BashやらKshみたく組込みgetoptsを内蔵してるシェルの、
それも関数を跨がない処理
(getoptsを使ってる関数から一度も抜けることなく再度使用)
の時だけ$OPTIND変数が初期化されないみたいで、
そのせいで不本意な挙動の原因が掴めず半時間ほど無駄にしたw
(dashだと問題ないし、Bashでも特定の箇所でだけ不具合が生じるから)
$OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
dashみたいにgetoptsを内蔵していないシェルでは
外部コマンドとしてgetopts(1)を起動した瞬間に$OPTIND変数が初期化されるみたい。
BashやらKshみたく組込みgetoptsを内蔵してるシェルの、
それも関数を跨がない処理
(getoptsを使ってる関数から一度も抜けることなく再度使用)
の時だけ$OPTIND変数が初期化されないみたいで、
そのせいで不本意な挙動の原因が掴めず半時間ほど無駄にしたw
(dashだと問題ないし、Bashでも特定の箇所でだけ不具合が生じるから)
265デフォルトの名無しさん
2019/12/23(月) 15:55:18.14ID:YJsAIsu8 >>262
どういう要件を見たせば
ある変数が配列変数だって言えるのか知ってる?
(俺は知らん。でもプログラミング言語論とかで定義されてそう)
$@がその要件を満たしてれば配列に違いないね。
でもそういう明確な定義が無いなら
もう個人の勝手なんじゃないかな。
どういう要件を見たせば
ある変数が配列変数だって言えるのか知ってる?
(俺は知らん。でもプログラミング言語論とかで定義されてそう)
$@がその要件を満たしてれば配列に違いないね。
でもそういう明確な定義が無いなら
もう個人の勝手なんじゃないかな。
266デフォルトの名無しさん
2019/12/23(月) 16:20:51.38ID:CGg4xw4r >>264
> $OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
当たり前だな。どこに状態を保存してるのかと
> dashみたいにgetoptsを内蔵していないシェルでは
は?内蔵してるが?おそらく初期版から。
getoptsを内蔵してないのはbusyboxで
意図的に外してビルドした場合ぐらいだろ
> $OPTIND変数を初期化してないと、前の結果が引き継がれてるせいでおかしな挙動になる
当たり前だな。どこに状態を保存してるのかと
> dashみたいにgetoptsを内蔵していないシェルでは
は?内蔵してるが?おそらく初期版から。
getoptsを内蔵してないのはbusyboxで
意図的に外してビルドした場合ぐらいだろ
267デフォルトの名無しさん
2019/12/23(月) 16:22:45.93ID:CGg4xw4r >>264
何を言ってるのかわからんが、検証が間違ってる
何を言ってるのかわからんが、検証が間違ってる
268デフォルトの名無しさん
2019/12/23(月) 16:36:13.95ID:YJsAIsu8 >>267
あ、そうなの。
じゃあdashの組み込みgetoptsが何らかの
形でBashやKshのそれと$OPTIND変数に対する処理が違うんだな。
ともあれ単純に初期化すればいいだけなんで、
事もないよ。
あ、そうなの。
じゃあdashの組み込みgetoptsが何らかの
形でBashやKshのそれと$OPTIND変数に対する処理が違うんだな。
ともあれ単純に初期化すればいいだけなんで、
事もないよ。
269デフォルトの名無しさん
2019/12/23(月) 16:37:34.35ID:CGg4xw4r だいたい$OPTINDはシェル変数なんだから、
getoptsは外部コマンドとして実装するのは不可能なんだよ
どうやってシェルスクリプトから実行された外部コマンドから
呼び出し元シェルスクリプトの
プロセス内のメモリを書き換えるんだよw
getoptsは外部コマンドとして実装するのは不可能なんだよ
どうやってシェルスクリプトから実行された外部コマンドから
呼び出し元シェルスクリプトの
プロセス内のメモリを書き換えるんだよw
270デフォルトの名無しさん
2019/12/23(月) 16:40:45.68ID:CGg4xw4r >>268
geoptsを何回も呼び出したいなら、OPTINDを1にして初期化しろ仕様で決まってる
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html
> 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.
geoptsを何回も呼び出したいなら、OPTINDを1にして初期化しろ仕様で決まってる
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html
> 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.
271デフォルトの名無しさん
2019/12/23(月) 16:43:06.84ID:CGg4xw4r bashやkshはローカル変数にでもなってるんだろ
272デフォルトの名無しさん
2019/12/23(月) 20:47:02.60ID:sS1JWXeN ぷぷぷ、ぷろぐらみんぐ言語論wwwww
273デフォルトの名無しさん
2019/12/23(月) 20:50:03.01ID:YJsAIsu8 >>269
え、そうなん?
じゃあ
https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
↑getoptsはここには載ってるけれども
実質としては組み込みコマンドとして実装するしかないのか。
ありがとう!勉強になったわ。
え、そうなん?
じゃあ
https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
↑getoptsはここには載ってるけれども
実質としては組み込みコマンドとして実装するしかないのか。
ありがとう!勉強になったわ。
274デフォルトの名無しさん
2019/12/23(月) 22:11:39.28ID:gENEPh5i >>273
そこに乗ってるのは確かに気持ち悪さがあるけどね。alias、cd、readあたりも。
まあプロセス間通信などを使えば、外部コマンドとして作るのは
絶対に不可能というわけじゃないがまずやらんだろうなw
そこに乗ってるのは確かに気持ち悪さがあるけどね。alias、cd、readあたりも。
まあプロセス間通信などを使えば、外部コマンドとして作るのは
絶対に不可能というわけじゃないがまずやらんだろうなw
275デフォルトの名無しさん
2019/12/23(月) 22:26:33.99ID:EXKdfS/F 大昔は cd が外部コマンドだったと知って吃驚仰天
276デフォルトの名無しさん
2019/12/24(火) 11:07:35.47ID:mQqeuoCV そんなバナナ
277デフォルトの名無しさん
2019/12/24(火) 11:10:44.79ID:8h2rOUkn https://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32549&forum=6
Cシェル(csh)上に、/usr/bin/cdと書くと、チェンジディレクトリがうまくいかず、普通にcd〜〜と書くと正しくチェンジディレクトリされます。
shellのカレントディレクトリを変更したいのなら、組み込みコマンドを使わないとダメです。
# にもかかわらず外部コマンドのcdを持っているUnixがあるのは何故だろう?
# joke ?
Cシェル(csh)上に、/usr/bin/cdと書くと、チェンジディレクトリがうまくいかず、普通にcd〜〜と書くと正しくチェンジディレクトリされます。
shellのカレントディレクトリを変更したいのなら、組み込みコマンドを使わないとダメです。
# にもかかわらず外部コマンドのcdを持っているUnixがあるのは何故だろう?
# joke ?
278デフォルトの名無しさん
2019/12/24(火) 11:11:40.76ID:8h2rOUkn https://tutorialmore.com/questions-292990.htm
この素晴らしい回答で参照されているように、POSIXシステムには外部バイナリ cd があります
シェル組み込みに加えて。 OS X 10.8では /usr/bin/cd です 。組み込みの cd のように
使用することはできません 独自の作業ディレクトリを変更するとすぐに終了するためです。どんな目的に役立つのですか?
解決した方法 # 1
主に、シェルの
この素晴らしい回答で参照されているように、POSIXシステムには外部バイナリ cd があります
シェル組み込みに加えて。 OS X 10.8では /usr/bin/cd です 。組み込みの cd のように
使用することはできません 独自の作業ディレクトリを変更するとすぐに終了するためです。どんな目的に役立つのですか?
解決した方法 # 1
主に、シェルの
279デフォルトの名無しさん
2019/12/24(火) 13:50:24.53ID:lTGNfo7C POSIXシステムには外部バイナリ cd があります
ないけど…?
ないけど…?
280デフォルトの名無しさん
2019/12/24(火) 17:56:12.00ID:O0jTO9nR WSLのUbuntuにもない。
281デフォルトの名無しさん
2019/12/24(火) 18:31:17.89ID:mQqeuoCV というか、あったとしてどうやって使うのか?
282デフォルトの名無しさん
2019/12/24(火) 18:35:06.35ID:mQqeuoCV カレントディレクトリを移動してから何か実行させたいならそのcdコマンドからexecしない限りできんよな?
とするとそのcdコマンドはディレクトリだけでなく実行するコマンドを引数として受け取るのか?
とするとそのcdコマンドはディレクトリだけでなく実行するコマンドを引数として受け取るのか?
283デフォルトの名無しさん
2019/12/24(火) 20:48:55.98ID:uCBqTgFr >>278 が出ているのに。あまり使い道がない例だけどな
284デフォルトの名無しさん
2019/12/24(火) 21:07:13.05ID:uCBqTgFr https://pubs.opengroup.org/onlinepubs/009695399/utilities/cd.html
APPLICATION USAGE
最初にビルトインに決まってるという説明の後で、ほぼ同じこと書いてあるやん
例が実行できるようにするには必要で、これはできないとは書いてないからあるのが仕様内だろう、たぶん
こんな使い方しねーよで無いんじゃないの、Ubuntu(Debian?)などは
APPLICATION USAGE
最初にビルトインに決まってるという説明の後で、ほぼ同じこと書いてあるやん
例が実行できるようにするには必要で、これはできないとは書いてないからあるのが仕様内だろう、たぶん
こんな使い方しねーよで無いんじゃないの、Ubuntu(Debian?)などは
285デフォルトの名無しさん
2019/12/25(水) 17:49:11.61ID:DcKuxkE0 なるほど
286デフォルトの名無しさん
2019/12/25(水) 18:50:00.73ID:N+K1pmuB シェルのバックグラウンドジョブと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と表示)に
させるにはどうすればいいでしょうか。
どうかご教示ください。
手許の環境は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と表示)に
させるにはどうすればいいでしょうか。
どうかご教示ください。
287デフォルトの名無しさん
2019/12/25(水) 19:25:32.89ID:GfHtMQ6w シグナルハンドラはデフォルトの動作があらかじめ決まってる
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 $!
とか
シグナル実行抑止遅延とかあったかなあ
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 $!
とか
シグナル実行抑止遅延とかあったかなあ
288デフォルトの名無しさん
2019/12/25(水) 19:36:59.98ID:N+K1pmuB >>287
ありがとうございます!
無事解決しました。
ところで (すでに問題は解決できたので)単なる興味本位なのですが、
trap -- 'kill -s QUIT $!' USR1; { trap -- 'echo trapped; exit' QUIT; kill -s USR1 $$; echo start; sleep 5& wait $!; echo end;
}&
↑これだと問題ありますか。
素人目線では上手くいくような気がしますが、子プロセスを殺すtrapを親プロセスの前に仕掛けてるあたりが
マズい気がします……。
(ちなみに手許では>>287様が示してくださったものと同様上手くいきました)
ありがとうございます!
無事解決しました。
ところで (すでに問題は解決できたので)単なる興味本位なのですが、
trap -- 'kill -s QUIT $!' USR1; { trap -- 'echo trapped; exit' QUIT; kill -s USR1 $$; echo start; sleep 5& wait $!; echo end;
}&
↑これだと問題ありますか。
素人目線では上手くいくような気がしますが、子プロセスを殺すtrapを親プロセスの前に仕掛けてるあたりが
マズい気がします……。
(ちなみに手許では>>287様が示してくださったものと同様上手くいきました)
289デフォルトの名無しさん
2019/12/25(水) 19:39:42.14ID:N+K1pmuB290デフォルトの名無しさん
2019/12/25(水) 19:59:14.64ID:GfHtMQ6w 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使って、ループが無くなってちょっとスッキリ版
通知はFIFO使って、ループが無くなってちょっとスッキリ版
291デフォルトの名無しさん
2019/12/25(水) 20:09:25.33ID:v8ePSHs/ >>286
> { trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
> 何も出力されなくなります。
コアダンプって出力されるよな?
> { trap -- 'echo trapped; exit' QUIT; echo start; sleep 5& wait $!; echo end; }& kill -s QUIT $!
> 何も出力されなくなります。
コアダンプって出力されるよな?
292デフォルトの名無しさん
2019/12/25(水) 21:22:56.22ID:rkHGbRnb 一行で書くから見づらいったらありゃしない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 $!
そんなごちゃごちゃやらなくても、これでいいやろ?
#!/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 $!
293デフォルトの名無しさん
2019/12/25(水) 22:03:53.28ID:N+K1pmuB294デフォルトの名無しさん
2019/12/25(水) 22:28:14.59ID:iUDS0c82 ulimit -c unlimited
295デフォルトの名無しさん
2019/12/25(水) 22:29:25.06ID:ixBqsT77 このスレにtrapでソフトタイマを作ったのが載ってるよ。
296デフォルトの名無しさん
2019/12/25(水) 22:40:18.77ID:rkHGbRnb >>295
もうやめたれwww
もうやめたれwww
297デフォルトの名無しさん
2019/12/26(木) 00:40:43.87ID:uF/G2OAQ いちゃもんつけながらでないと自己表現できない自分が確認できない、いつものやつ
298デフォルトの名無しさん
2019/12/26(木) 00:57:23.99ID:0kHOyMkL >>297
わかるように結構工夫して書いてるんだぜw
わかるように結構工夫して書いてるんだぜw
299デフォルトの名無しさん
2019/12/26(木) 00:58:24.91ID:uF/G2OAQ 質問主も応えてるのもわかってるけどな
300デフォルトの名無しさん
2019/12/26(木) 00:58:56.93ID:0kHOyMkL301デフォルトの名無しさん
2019/12/26(木) 01:01:09.61ID:uF/G2OAQ 自己満wキモいわ自分で言うか
すげえな。これ以上何を言っても通じないな
すげえな。これ以上何を言っても通じないな
302デフォルトの名無しさん
2019/12/26(木) 01:03:25.32ID:0kHOyMkL そうそう俺を叩いた所で無駄やで。煽り耐性レベルMAXだからな
そんなくだらないことよりレス(シェルスクリプト)の話をしようや
そんなくだらないことよりレス(シェルスクリプト)の話をしようや
303デフォルトの名無しさん
2019/12/26(木) 10:54:33.00ID:zbYMFUyq304デフォルトの名無しさん
2019/12/26(木) 12:41:29.91ID:MI1/ojN2305デフォルトの名無しさん
2019/12/26(木) 12:47:29.21ID:zbYMFUyq306デフォルトの名無しさん
2019/12/26(木) 12:51:43.96ID:zbYMFUyq 仮にwaitする前にsleepが(一瞬で)killされたとしても
wait ${すでにいないPID} を実行してもエラーにならないんだよね
wait ${すでにいないPID} を実行してもエラーにならないんだよね
307デフォルトの名無しさん
2019/12/26(木) 13:26:19.54ID:zbYMFUyq >>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 $!
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 $!
308デフォルトの名無しさん
2019/12/26(木) 14:16:08.46ID:MI1/ojN2309デフォルトの名無しさん
2019/12/26(木) 15:10:05.95ID:W7puUhWv 自演w連投ぶりからいつもの
310デフォルトの名無しさん
2019/12/26(木) 17:04:03.21ID:uIk/XshQ 自称神様の降臨か
311デフォルトの名無しさん
2019/12/26(木) 17:46:42.36ID:W7puUhWv ずっと居ついているだろ
312デフォルトの名無しさん
2019/12/26(木) 20:40:26.24ID:VT4/hGaE ただいま。ってかお前ら何やってんの?w
また俺じゃない人に絡んでるようだが
また俺じゃない人に絡んでるようだが
313デフォルトの名無しさん
2019/12/26(木) 20:57:57.00ID:GKWkZChC わざとらしすぎてわろた
314デフォルトの名無しさん
2019/12/26(木) 20:59:56.60ID:VT4/hGaE 違うから違うって言ってるんだけどなw
315デフォルトの名無しさん
2019/12/26(木) 21:06:21.96ID:GKWkZChC はいはい
同じ反応速度、普通のスクリプトでわいわいなレスに対していきなりな同じ態度レスで絡む
同一人物でいいだろ。そんな辺なやつはそう居ないと思うけど
同じ反応速度、普通のスクリプトでわいわいなレスに対していきなりな同じ態度レスで絡む
同一人物でいいだろ。そんな辺なやつはそう居ないと思うけど
316デフォルトの名無しさん
2019/12/26(木) 21:08:13.76ID:VT4/hGaE 意訳 俺以外はみんなあいつ
317デフォルトの名無しさん
2019/12/26(木) 21:08:43.19ID:VT4/hGaE 俺の敵はみんなあいつ
の方が良いか
の方が良いか
318デフォルトの名無しさん
2019/12/26(木) 21:12:56.47ID:GKWkZChC 連投wその連投ぶりのレスの内容といい
特徴的な共通点が多すぎ
特徴的な共通点が多すぎ
319デフォルトの名無しさん
2019/12/26(木) 21:35:49.17ID:VT4/hGaE >>307
俺もやってみたけどQUITじゃたしかにdashで動かないね
確かめたつもりだったけど
> sleep 0.1に変えたのと大差なくなってる。
実際のところ、この例だとsleep 0でも問題なかったりする
sleepという外部プロセスを呼び出す時間があれば、その間にtrapできてるから
と思ってkshでやったら動かんかったわw
kshではsleepはシェルビルトインなんだな
俺もやってみたけどQUITじゃたしかにdashで動かないね
確かめたつもりだったけど
> sleep 0.1に変えたのと大差なくなってる。
実際のところ、この例だとsleep 0でも問題なかったりする
sleepという外部プロセスを呼び出す時間があれば、その間にtrapできてるから
と思ってkshでやったら動かんかったわw
kshではsleepはシェルビルトインなんだな
320デフォルトの名無しさん
2019/12/27(金) 09:20:57.82ID:NrzsOb0y 横だけどQUITって使うことってある?
OSとかデバッガ系なら使うことあるだろうけど
アプリでは使わないほうが良いんじゃいかな?
OSとかデバッガ系なら使うことあるだろうけど
アプリでは使わないほうが良いんじゃいかな?
321デフォルトの名無しさん
2019/12/27(金) 13:14:28.69ID:GMT90LLU >>320
それはなにか理由ある?
それはなにか理由ある?
322デフォルトの名無しさん
2019/12/27(金) 21:58:46.84ID:jjhZE+Ou QUITってコアダンプさせるためのものでしょ?
323デフォルトの名無しさん
2019/12/28(土) 12:47:18.40ID:/Zzxwqbk POSIXでは基本的にTERMとほぼ同じだけど
XSI拡張では「なにか他の動作を追加的に行ってもよい」とあるな。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
XSI拡張では「なにか他の動作を追加的に行ってもよい」とあるな。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
324デフォルトの名無しさん
2019/12/28(土) 23:26:23.77ID:lWCFWx/Q QUITをトラップするとコアダンプ機能が使えなくなるというデメリットがあるね
普通はQUITでコアダンプするわけだから、あれ?コアダンプできない?ってなるかもしれない
コアダンプを明示的に生成する方法あるのかな?
あと、もしかしてdash、ksh、yashだとQUITってtrapできない?
trapしても何も動作しない
普通はQUITでコアダンプするわけだから、あれ?コアダンプできない?ってなるかもしれない
コアダンプを明示的に生成する方法あるのかな?
あと、もしかしてdash、ksh、yashだとQUITってtrapできない?
trapしても何も動作しない
325デフォルトの名無しさん
2019/12/29(日) 01:40:48.31ID:FmabBrht dash,kshはQUITでtrapで動いてるけど。yashは試してない
326デフォルトの名無しさん
2019/12/29(日) 01:53:56.90ID:MrCxy9bb #!/bin/sh
trap 'echo trapped; exit' QUIT
echo $$
sleep 60
これを、sh test.sh & ってやって
表示されたプロセスIDに対してkill -q QUIT プロセスIDって
やっても何も表示されないんだけど、どうやって確認した?
trap 'echo trapped; exit' QUIT
echo $$
sleep 60
これを、sh test.sh & ってやって
表示されたプロセスIDに対してkill -q QUIT プロセスIDって
やっても何も表示されないんだけど、どうやって確認した?
327デフォルトの名無しさん
2019/12/29(日) 02:02:29.22ID:FmabBrht sleepというかコマンドが実行が終わるまでtrapで設定したのは動かないよ
328デフォルトの名無しさん
2019/12/29(日) 02:10:00.25ID:FmabBrht なんか言い方が変だな。POSIXでそのような文が書いてあったと思うそのまま書いた
コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行
for i in $(seq 60); do sleep 1; done
とかで動くでしょ
コマンドが実行中はシグナル受け取っても実行されない、コマンドが終わってから実行
for i in $(seq 60); do sleep 1; done
とかで動くでしょ
329デフォルトの名無しさん
2019/12/29(日) 02:13:23.19ID:MrCxy9bb あれ?なんかおかしいね。
じゃあ>>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 $!
じゃあ>>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 $!
330デフォルトの名無しさん
2019/12/29(日) 02:14:47.34ID:MrCxy9bb331デフォルトの名無しさん
2019/12/29(日) 02:17:11.43ID:FmabBrht 無視ではなくて保留だな。受け取っていることは受け取っている
332デフォルトの名無しさん
2019/12/29(日) 02:19:29.79ID:MrCxy9bb 保留だとしたらkill -s QUITした時点で終了するのはおかしいはずだが?
333デフォルトの名無しさん
2019/12/29(日) 02:25:16.44ID:FmabBrht334デフォルトの名無しさん
2019/12/29(日) 02:31:00.58ID:MrCxy9bb335デフォルトの名無しさん
2019/12/29(日) 02:46:04.76ID:FmabBrht336デフォルトの名無しさん
2019/12/29(日) 03:24:42.26ID:QzTL60WW https://community.progress.com/community_groups/openedge_general/f/26/t/34654
Posted by ske on 8 Aug 2017 13:59
らしいよ。6. とか確かに
コマンドラインでの違いとかはわからんけど
Posted by ske on 8 Aug 2017 13:59
らしいよ。6. とか確かに
コマンドラインでの違いとかはわからんけど
337デフォルトの名無しさん
2019/12/31(火) 07:15:28.46ID:xfr0s5Fj PowerShell最強説
338デフォルトの名無しさん
2019/12/31(火) 08:44:50.09ID:qHnQy48w 諸説あります
339デフォルトの名無しさん
2019/12/31(火) 15:40:24.49ID:F82oxaIy ※個人の感想です
340デフォルトの名無しさん
2019/12/31(火) 23:33:05.25ID:vVhGTaaB 僕もPowerShell愛用しています。
これを使い始めてから人生茨色です!
これを使い始めてから人生茨色です!
341デフォルトの名無しさん
2019/12/31(火) 23:43:55.86ID:tLgKzi5A 人生の道が茨で埋め尽くされております!
342デフォルトの名無しさん
2019/12/31(火) 23:48:11.73ID:9cUyZ2YF ※ 来世にご期待下さい!
343デフォルトの名無しさん
2020/01/01(水) 08:19:52.80ID:6zSEt3Eo >>337
使用されることが最強に少ない感
使用されることが最強に少ない感
344デフォルトの名無しさん
2020/01/02(木) 13:42:39.95ID:ZoBKtk8g 例えば/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
という表示が出てくるのですがこれを表示させない方法ってありますか?
#!/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
という表示が出てくるのですがこれを表示させない方法ってありますか?
345デフォルトの名無しさん
2020/01/02(木) 13:59:42.22ID:Ifo0PTAe Bugzilla に登録されてるね。
Gecko_IOThread] WARNING: pipe error: Broken pipe: ... ipc_channel_posix.cc
https://bugzilla.mozilla.org/show_bug.cgi?id=1550919
Gecko_IOThread] WARNING: pipe error: Broken pipe: ... ipc_channel_posix.cc
https://bugzilla.mozilla.org/show_bug.cgi?id=1550919
346デフォルトの名無しさん
2020/01/02(木) 14:17:59.62ID:ZoBKtk8g >>345
つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m
つまり標準ブラウザ変えるかchromeとかにすれば良い感じですね。pipe errorとか connection reset の方で検索してました、ありがとうございますm(_ _)m
347デフォルトの名無しさん
2020/01/02(木) 18:23:50.86ID:8+JZKzet348デフォルトの名無しさん
2020/01/10(金) 15:59:20.38ID:pZwemz/Y GNU sedって一応POSIXに準拠してるけど、色々拡張機能もあるじゃん
こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある?
こういう拡張機能がほとんど無い、純粋にPOSIX標準に準じたようなsedやらawk、bcなんかの実装ってある?
349デフォルトの名無しさん
2020/01/10(金) 16:05:57.94ID:c8NDboJX GNU sed, GNU awk には --posix オプション、GNU bc には --standard
っていうオプションが用意されている
っていうオプションが用意されている
350デフォルトの名無しさん
2020/01/11(土) 08:05:41.49ID:IVNUyUW+ 知らんかった。ありがとう
351デフォルトの名無しさん
2020/01/11(土) 21:29:54.53ID:9SPVzhvj やっぱzshクソ。pathとかstatusが特殊変数なのやめてくれ。
しかも大文字と小文字区別しねーし
path=hogehogeってやったら、環境変数PATHから検索しなくなる。
command not found!
しかも大文字と小文字区別しねーし
path=hogehogeってやったら、環境変数PATHから検索しなくなる。
command not found!
352デフォルトの名無しさん
2020/01/11(土) 23:34:38.48ID:NBzz9dXo 単にいままでのに慣れて違いを受け入れないってだけだな
353デフォルトの名無しさん
2020/01/11(土) 23:39:31.73ID:NBzz9dXo なんだ、単に zsh = ksh + tcsh ってのを理解してなくて的外れな文句言っているだけじゃん
アホらしい。文字通り
アホらしい。文字通り
354デフォルトの名無しさん
2020/01/12(日) 08:42:02.61ID:QbL/hexX なんでそんなに攻撃的なんだよw
355デフォルトの名無しさん
2020/01/12(日) 09:36:05.07ID:FpBV3Lt5356デフォルトの名無しさん
2020/01/12(日) 09:39:05.21ID:u1ffAIxu あと、環境変数の大文字と小文字は区別されてるのに
PATHに関してだけ区別されないのはどう考えてもクソだと思いますよ
pathに代入してもPATHが変わるってどう考えても
存在理由がない機能でしょw
PATHに関してだけ区別されないのはどう考えてもクソだと思いますよ
pathに代入してもPATHが変わるってどう考えても
存在理由がない機能でしょw
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… ★2 [BFU★]
- 【ネット民のツッコミ】立憲・野田代表の「事実上の撤回」発言がトレンド、「高市さんそんな事は言ってない」「流石に無理あるだろw」 [1ゲットロボ★]
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★3 [ごまカンパチ★]
- 生クリームだけの真っ白なクリスマスケーキ 大手メーカーが販売、その理由は…フルーツなしで価格は半額以下に ★3 [おっさん友の会★]
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★5 [Ailuropoda melanoleuca★]
- 首相答弁「スパイ防止法、外国代理人登録法、ロビー活動公開法などについて速やかに法案を策定する」 [1ゲットロボ★]
- まったりまったりおじゃる丸待機スレ🏡
- 中国外務省「全く不十分だ。ごまかすような手口を使うべきではない」高市答弁を批判 [834922174]
- くっそさすがにこのおっぱいはエロすぎてズルい
- 香港マンションやばくね?1000人くらい死んでそう [546716239]
- ✋🏿( ・᷄ὢ・᷅ )用便願います
- 死ね [769050516]
