!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。
スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 3efb-m2E0)
2018/09/22(土) 11:53:21.38ID:BBiLRgnj032デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 01:04:05.84ID:IvXdDnc9033デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 01:04:07.40ID:cRG95Xcq0 まず勘違いしてるのは
オレが賢いとかいってるところ
オレが賢いのではなく
当事者が日常生活に支障をきたすであろうと考えられるぐらい頭悪いこと問題だからな
そういう問題だ
軽度の知的障害があると推認できる
オレが賢いとかいってるところ
オレが賢いのではなく
当事者が日常生活に支障をきたすであろうと考えられるぐらい頭悪いこと問題だからな
そういう問題だ
軽度の知的障害があると推認できる
34デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 01:05:09.76ID:IvXdDnc90 よく言うよ。不特定に向けてもそういうフレーズ使ってるくせに。ほんと自称賢いだな
35デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/23(日) 01:34:23.77ID:D4/zD5nR0 淫夢語録を使うな
36デフォルトの名無しさん (ワッチョイ 6ee9-4aAB)
2018/09/23(日) 02:37:03.28ID:Te/My51X0 別人なんですアピール終わった?
ほんとうざいわコイツ
ほんとうざいわコイツ
37デフォルトの名無しさん (ワッチョイ b181-Lcjh)
2018/09/23(日) 08:59:25.73ID:a7uxw1Gj0 前スレのPOSIX荒らしの頃から、雰囲気悪いなぁ
38デフォルトの名無しさん (ワッチョイ 618a-LQBg)
2018/09/23(日) 09:03:53.53ID:4WDm+Clw0 そんなに悔しかったんだ...
39デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/23(日) 12:00:26.57ID:MAME2I+ya 大学生が課題貼り始めたあたりから何かがおかしくなっていったな
極めつけはCSVだったが
極めつけはCSVだったが
40デフォルトの名無しさん (ワッチョイ bd03-qdKu)
2018/09/23(日) 12:30:25.47ID:0vXeudiz0 >>39
おまえが出入りしだしたあたりからだいぶおかしいでwおまえのせいとは言わんけどw
おまえが出入りしだしたあたりからだいぶおかしいでwおまえのせいとは言わんけどw
41デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/23(日) 12:51:24.23ID:MAME2I+ya42デフォルトの名無しさん (ワッチョイ 6da7-p1FO)
2018/09/23(日) 13:51:05.35ID:VGMMYKH/0 なんでそうすぐにムキになるんだか。>>39なんて俯瞰してもの言えないんじゃねと
43デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/23(日) 15:46:02.02ID:D4/zD5nR0 でもASCII区切り文字を使ったいいアイデアが出たので俺は嬉しいよ
44デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 18:04:09.53ID:cRG95Xcq0 エクセルの出力結果みればわかるとおり
もともとなにも問題ない
低学歴知恵遅れがその出力より劣化したアイデア()を
ドヤ顔してだしてるだけだからな
それはな世間一般ではアイデアとはいわない
それは頭悪い寝言という
わかった?
もともとなにも問題ない
低学歴知恵遅れがその出力より劣化したアイデア()を
ドヤ顔してだしてるだけだからな
それはな世間一般ではアイデアとはいわない
それは頭悪い寝言という
わかった?
45デフォルトの名無しさん (ワッチョイ 42b3-Y16u)
2018/09/23(日) 20:05:39.90ID:i9SY9vW90 とお前は言う
46デフォルトの名無しさん (ワッチョイ bd03-qdKu)
2018/09/23(日) 21:39:22.13ID:0vXeudiz0 >>41
ムキになっとるのは何か自覚でもあったんか?w
ムキになっとるのは何か自覚でもあったんか?w
47デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/24(月) 07:30:26.77ID:csv6kfNU0 CSV、CSVうるせーんだよ、このCSV野郎が!
48デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/25(火) 00:49:55.83ID:lmrEE7TE0 Shell Scriptって国際化はできないの?
調べるとBashは$"text"→$"文"みたいなことができたらしいけどこれも今では使えないし(Bash 3.xで削除?)。
需要がないのかな やっぱり
調べるとBashは$"text"→$"文"みたいなことができたらしいけどこれも今では使えないし(Bash 3.xで削除?)。
需要がないのかな やっぱり
49デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 01:56:25.59ID:BMMTvniR0 >>48
できるよ。gettext.shってのが用意されてる。
ライブラリになっていて、おそらくパスも通ってるはずだから
. gettext.shで読み込めるはず。
そしてeval_gettext関数を使って翻訳するわけだが、
http://www.nofuture.tv/diary/20130329.html の記事を見ると
> echo "$(eval_gettext "hello world")"
と書いてあるな?
eval_gettext "hello world"
だけじゃだめなんだろうか?
一般的には等価だし、これだけでもメッセージの抜き出しはできるはず
なにより"$(・・・)"を使うとforkが行われるから
WSLで遅くなることが懸念される
そのうち使うことになるとは思ってるが、まだ試してないのでよろしくw
できるよ。gettext.shってのが用意されてる。
ライブラリになっていて、おそらくパスも通ってるはずだから
. gettext.shで読み込めるはず。
そしてeval_gettext関数を使って翻訳するわけだが、
http://www.nofuture.tv/diary/20130329.html の記事を見ると
> echo "$(eval_gettext "hello world")"
と書いてあるな?
eval_gettext "hello world"
だけじゃだめなんだろうか?
一般的には等価だし、これだけでもメッセージの抜き出しはできるはず
なにより"$(・・・)"を使うとforkが行われるから
WSLで遅くなることが懸念される
そのうち使うことになるとは思ってるが、まだ試してないのでよろしくw
50デフォルトの名無しさん (ワッチョイ 469f-coYL)
2018/09/25(火) 02:52:25.49ID:VjhU4mZC0 >>48
え?これできないの?
http://www.unixuser.org/~ysjj/bash_script_i18n.html
しかし Linux の bash の man ページには $"string" あるなあ。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
え?これできないの?
http://www.unixuser.org/~ysjj/bash_script_i18n.html
しかし Linux の bash の man ページには $"string" あるなあ。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
51デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 05:08:08.34ID:BMMTvniR0 だからセキュリティの理由により非推奨になったって書いてあるやん
一つ上のレスぐらい読もうよ
一つ上のレスぐらい読もうよ
52デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/25(火) 05:09:28.74ID:S/r6pG9La 長いから読んでもらえないんじゃね
53デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/25(火) 05:18:05.28ID:lmrEE7TE0 え,俺?
54デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/25(火) 05:20:16.93ID:S/r6pG9La なんか俺は勘違いしたかもしれん、
>>52は無視してくれ
>>52は無視してくれ
55デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 07:05:22.02ID:BMMTvniR056デフォルトの名無しさん (ワッチョイ 469f-3QZN)
2018/09/25(火) 08:29:51.94ID:VjhU4mZC0 >>51
今見た。元々リロード忘れて一つ上が見えない状態で書いてたのと、見えた後でリンク先見てなかったのでセキュリティの都合で非推奨になった事に気づかなかった。
でも非推奨ってことは使えないこともないのかな?だからmanページには残ってるとか?使わん方が良いことには変わりはないだろうが。
今見た。元々リロード忘れて一つ上が見えない状態で書いてたのと、見えた後でリンク先見てなかったのでセキュリティの都合で非推奨になった事に気づかなかった。
でも非推奨ってことは使えないこともないのかな?だからmanページには残ってるとか?使わん方が良いことには変わりはないだろうが。
57デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 09:03:56.75ID:BMMTvniR0 > この方法はセキュリティ上の問題(シフトJISや中国語のエンコーディングではダブルクォーテーションを無効にできてしまうなど。
というような、ASCIIと互換性がない文字コードによる問題だから
そういう文字コード自体を非推奨として対応から外せたら良いのに
Unicode以外の文字コードが絶滅するのはいつになるんだろうな
というような、ASCIIと互換性がない文字コードによる問題だから
そういう文字コード自体を非推奨として対応から外せたら良いのに
Unicode以外の文字コードが絶滅するのはいつになるんだろうな
58デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/25(火) 22:39:41.88ID:lmrEE7TE0 shebangって書かないほうがいいのかもな。
> If the first line of a file of shell commands starts with the characters "#!",
> the results are unspecified
---http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
だそうだし
> One common historical implementation is that
> the execl(), execv(), execle(), and execve() functions
> return an [ENOEXEC] error for any file not recognizable as executable, including a shell script.
> When the execlp() and execvp() functions encounter such a file,
> they assume the file to be a shell script
> and invoke a known command interpreter to interpret such files.
> This is now required by POSIX.1-2017.
---http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html#tag_16_111_08
だし。
> If the first line of a file of shell commands starts with the characters "#!",
> the results are unspecified
---http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
だそうだし
> One common historical implementation is that
> the execl(), execv(), execle(), and execve() functions
> return an [ENOEXEC] error for any file not recognizable as executable, including a shell script.
> When the execlp() and execvp() functions encounter such a file,
> they assume the file to be a shell script
> and invoke a known command interpreter to interpret such files.
> This is now required by POSIX.1-2017.
---http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html#tag_16_111_08
だし。
59デフォルトの名無しさん (ブーイモ MM62-e5An)
2018/09/26(水) 00:23:55.64ID:+a+RcOTAM それは誤読だろ。
execveとかにシェルスクリプト渡したらどうなるか知らん、
execlpとか使えってことでしょ。
実装としてどっちで#!を解釈するかはOSに任せられている。
execveとかにシェルスクリプト渡したらどうなるか知らん、
execlpとか使えってことでしょ。
実装としてどっちで#!を解釈するかはOSに任せられている。
60デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 01:08:43.37ID:yzZF1GUc0 shebangって書かないほうがいいんじゃないかって話は
どこかの誰かがまとめてただろ
書かなくて良いんじゃないかと思うが
書かないとshellcheckが警告出すんだよな。
パラメータじゃない方法でシェルを指定する方法があれば良いんだが
どこかの誰かがまとめてただろ
書かなくて良いんじゃないかと思うが
書かないとshellcheckが警告出すんだよな。
パラメータじゃない方法でシェルを指定する方法があれば良いんだが
61デフォルトの名無しさん (ワッチョイ 5dc3-zlPI)
2018/09/26(水) 06:41:40.90ID:aDQj+U85062デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 07:00:32.41ID:p8TYnMT5063デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 07:43:20.75ID:yzZF1GUc0 ったく、そっちじゃねーよ
https://togetter.com/li/1077808
簡単にまとめるとだな。Androidでは sh は /bin/sh に存在しない
/system/bin/sh だから、どちらでも通じるシバンは書けない
なら書かなくて良いのでは?
→ そのとおり。POSIXではシバンがなければshで起動されると明記されてる
(注意 ログインシェルとしてcshを使用してる場合、先頭一文字目が#
つまりコメント行だったらcshで起動されるので:コマンドなどで無効化する
cshはファイルの先頭が#でなければPOSIX shで起動する)
https://togetter.com/li/1077808
簡単にまとめるとだな。Androidでは sh は /bin/sh に存在しない
/system/bin/sh だから、どちらでも通じるシバンは書けない
なら書かなくて良いのでは?
→ そのとおり。POSIXではシバンがなければshで起動されると明記されてる
(注意 ログインシェルとしてcshを使用してる場合、先頭一文字目が#
つまりコメント行だったらcshで起動されるので:コマンドなどで無効化する
cshはファイルの先頭が#でなければPOSIX shで起動する)
64デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 08:05:31.15ID:p8TYnMT50 ちなみに
bash$ cat ./sbtest.sh
ps -o comm= $$
bash$ ./sbtest.sh
bash
↑↑ Bashじゃねーか
っていう罠もある。
bash$ cat ./sbtest.sh
ps -o comm= $$
bash$ ./sbtest.sh
bash
↑↑ Bashじゃねーか
っていう罠もある。
65デフォルトの名無しさん (ワッチョイ 46e7-Om/S)
2018/09/26(水) 09:25:36.26ID:pB5sfbMh0 ちょっと質問です。
プログラムが終了していたら再起動し、20秒以上動いていたら強制終了させて再起動したい。
どう書けばいいですか?
プログラムが終了していたら再起動し、20秒以上動いていたら強制終了させて再起動したい。
どう書けばいいですか?
66デフォルトの名無しさん (アウアウカー Sae9-rLjT)
2018/09/26(水) 09:56:06.94ID:QtvShas/a >>65
そうだなあ。Linuxとかならkillでシグナル番号0を送ると指定のプロセスの生死を確認できるのでそれ利用して作るかな。
しかしその場合は動いているプロセスのPIDがわからないとダメだ。これがわからない状態でやらねばならない場合はpsの出力にgrepして探すかな。
そうだなあ。Linuxとかならkillでシグナル番号0を送ると指定のプロセスの生死を確認できるのでそれ利用して作るかな。
しかしその場合は動いているプロセスのPIDがわからないとダメだ。これがわからない状態でやらねばならない場合はpsの出力にgrepして探すかな。
67デフォルトの名無しさん (オッペケ Sr71-/xLO)
2018/09/26(水) 10:01:22.38ID:FJCeOZRMr > プログラムが終了していたら再起動し、
親シェルスクリプト(プログラム)作ってループ起動
例えばcronの5分間隔とかにすると隙間が開く可能性がある
> 20秒以上動いていたら強制終了させて再起動したい。
監視シェルスクリプト(プログラム)作る
起動させた時間はpsコマンドで分かる
今の時刻はdateコマンドで分かる
強制終了はkillコマンドでできる
監視の間隔(チェックを何分おきにやるか)は自分で決める
例えば1分間隔で監視したら最悪60秒以上動く場合がある
waitしないループは結構CPUに負荷をかけるから注意
親シェルスクリプト(プログラム)作ってループ起動
例えばcronの5分間隔とかにすると隙間が開く可能性がある
> 20秒以上動いていたら強制終了させて再起動したい。
監視シェルスクリプト(プログラム)作る
起動させた時間はpsコマンドで分かる
今の時刻はdateコマンドで分かる
強制終了はkillコマンドでできる
監視の間隔(チェックを何分おきにやるか)は自分で決める
例えば1分間隔で監視したら最悪60秒以上動く場合がある
waitしないループは結構CPUに負荷をかけるから注意
68デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 11:15:01.91ID:yzZF1GUc0 こんな感じかねぇ
プログラム名からプロセスIDを取得して変数に入れる
while :; do
psコマンドでプロセスID変数の起動時間取得
if 取得できたら; then
if 20秒以上経過していたら; then
kill プロセスID
fi
else # 取得できなかったら
プログラム起動 &
新たなプロセスIDを変数に入れる
fi
sleep 1
done
プログラム名からプロセスIDを取得して変数に入れる
while :; do
psコマンドでプロセスID変数の起動時間取得
if 取得できたら; then
if 20秒以上経過していたら; then
kill プロセスID
fi
else # 取得できなかったら
プログラム起動 &
新たなプロセスIDを変数に入れる
fi
sleep 1
done
69デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 15:07:59.55ID:yzZF1GUc0 setコマンドで変数一覧が見れる機能の使い道にやっと気づいた
man bashにはこうある
> オプションなしの場合は、シェル変数全ての名前と値の組が表示されます。
> 表示は、現在設定されている変数を設定や再設定をする入力 として
> 再利用できるフォーマットで行われます。
ようは変数のシリアライズとデシリアライズだよなーと思ってた
でもそうだとすると普通は特定の変数のみシリアライズ&デシリアライズしたいわけで
全部だされても困る。指定された変数だけ表示できないのか?
変数の中には改行が含まれることもあるから、絞り込むのも大変だぞ
ちなみになんのために俺がsetを調べていたかと言うと、サブシェルの中から
変数の値を返す方法はないものかと(再度)調べていた。
いわゆるwhile read の中で行数数えても、変数は元に戻る問題な
i=0
cat /etc/hosts | while read line; do
i=$((i+1))
done
echo $i # whileがサブシェルで実行されるからもとに戻る
この解決方法として、echoでevalできる形の文字列を返してサブシェルの外で
evalするやり方。このテクニックは最近俺の中で常識となっていた。
でもな、setでevalできる文字を返せるのはわかる。だが欲しいのは変数 i だけなんだよ!
set使えねーなって思ってた。
頭が硬かった。setで表示されたものすべてをevalすりゃいいんや。
サブシェルの中の変数は、サブシェルの外を引き継いてるんだから変えない限り同じ。
evalしても変わらない。いちいち必要なものだけechoする必要なかったんや
man bashにはこうある
> オプションなしの場合は、シェル変数全ての名前と値の組が表示されます。
> 表示は、現在設定されている変数を設定や再設定をする入力 として
> 再利用できるフォーマットで行われます。
ようは変数のシリアライズとデシリアライズだよなーと思ってた
でもそうだとすると普通は特定の変数のみシリアライズ&デシリアライズしたいわけで
全部だされても困る。指定された変数だけ表示できないのか?
変数の中には改行が含まれることもあるから、絞り込むのも大変だぞ
ちなみになんのために俺がsetを調べていたかと言うと、サブシェルの中から
変数の値を返す方法はないものかと(再度)調べていた。
いわゆるwhile read の中で行数数えても、変数は元に戻る問題な
i=0
cat /etc/hosts | while read line; do
i=$((i+1))
done
echo $i # whileがサブシェルで実行されるからもとに戻る
この解決方法として、echoでevalできる形の文字列を返してサブシェルの外で
evalするやり方。このテクニックは最近俺の中で常識となっていた。
でもな、setでevalできる文字を返せるのはわかる。だが欲しいのは変数 i だけなんだよ!
set使えねーなって思ってた。
頭が硬かった。setで表示されたものすべてをevalすりゃいいんや。
サブシェルの中の変数は、サブシェルの外を引き継いてるんだから変えない限り同じ。
evalしても変わらない。いちいち必要なものだけechoする必要なかったんや
70デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 15:10:23.80ID:yzZF1GUc0 長文乙w つーわけで、サブシェルの中から変数を返す方法 汎用版
i=0
eval "$(cat /etc/hosts | { while read line; do
i=$((i+1))
done
set
})"
echo $i # 俺の環境では11だった
set呼ぶだけで、簡単に変数返せるぞ
i=0
eval "$(cat /etc/hosts | { while read line; do
i=$((i+1))
done
set
})"
echo $i # 俺の環境では11だった
set呼ぶだけで、簡単に変数返せるぞ
71デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 15:11:28.48ID:yzZF1GUc0 ちなみにbashとかだとデフォルトでは関数まで返しちゃうので注意な
72デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 22:48:58.32ID:p8TYnMT50 シェルスクリプトじゃないんだけど
Makefileのファイル名(例えばGNUMakefileだったりmakefileだったりするよね)
を取得したりってできる?
つまり
$ cat ./Makefile
all:
>---echo $0
$ make
Makefile
みたいな。もちろんMakefileはshが解釈しないんで, $0を使うことはできないけど。
Makefileのファイル名(例えばGNUMakefileだったりmakefileだったりするよね)
を取得したりってできる?
つまり
$ cat ./Makefile
all:
>---echo $0
$ make
Makefile
みたいな。もちろんMakefileはshが解釈しないんで, $0を使うことはできないけど。
73デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 23:44:41.88ID:p8TYnMT50 追記
GNU makeなら$(MAKEFILE_LIST)が使えるらしいがFreeBSDでも使いたいんだよね……
GNU makeなら$(MAKEFILE_LIST)が使えるらしいがFreeBSDでも使いたいんだよね……
74デフォルトの名無しさん (ワッチョイ 77a7-c77k)
2018/09/27(木) 00:12:48.73ID:indBRC1Z0 MAKEFILE_LIST
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+6.2-RELEASE&format=html
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+6.2-RELEASE&format=html
75デフォルトの名無しさん (ワッチョイ 9fb3-zW/9)
2018/09/27(木) 00:23:32.14ID:IUmy3t5S0 all:
@echo $(lastword $(MAKEFILE_LIST))
とか。
@echo $(lastword $(MAKEFILE_LIST))
とか。
76デフォルトの名無しさん (ワッチョイ 9fb3-zW/9)
2018/09/27(木) 00:24:08.12ID:IUmy3t5S0 おっと、TAB が使えないんだったな
77デフォルトの名無しさん (ワッチョイ 77a7-c77k)
2018/09/27(木) 00:36:01.18ID:indBRC1Z0 ああ、>>74はめっちゃ古いのか
.MAKE.MAKEFILES
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+11.2-RELEASE&arch=default&format=html
今度は試してみたが確かにっぽい
.MAKE.MAKEFILES
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+11.2-RELEASE&arch=default&format=html
今度は試してみたが確かにっぽい
78デフォルトの名無しさん (ワッチョイ 178a-VlcY)
2018/09/27(木) 02:38:06.19ID:RGPgoULv079デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 02:48:37.10ID:Fk1HpByz080デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 03:09:09.89ID:Fk1HpByz0 もう少し見やすく、汎用的な書き方をするとこんな感じかな
サブシェル(change_vars)内で追加や変更した変数を
すべてサブシェルの親に返す方法
# もちろん例
change_vars() { i=123; }
eval "$(somecommand | { change_vars; set; })"
echo $i
実際には変更してないものすべてを再代入してるわけだが
それを行った所で問題はない。
ただしreadonlyを使ってると代入できなくてエラーになる。
これはなにかいい回避策はないだろうか
サブシェル(change_vars)内で追加や変更した変数を
すべてサブシェルの親に返す方法
# もちろん例
change_vars() { i=123; }
eval "$(somecommand | { change_vars; set; })"
echo $i
実際には変更してないものすべてを再代入してるわけだが
それを行った所で問題はない。
ただしreadonlyを使ってると代入できなくてエラーになる。
これはなにかいい回避策はないだろうか
81デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 03:23:00.68ID:Fk1HpByz0 readonlyになってる変数一覧はreadonly -pで取得できる
その結果をパースしてごにゃごにゃやればできるんだろうけど、
readonly -pの結果が、
bashだと declare -r a="1"
dashだと readonly a='1'
と異なるのでパースが面倒くさい上に、
変数名がわかったからといってどうするのだ?問題がある
サブシェル内でもreadonlyだからunsetできない。
setをパースして消すのは改行文字とかの対応で面倒
エラーを無視しようにもうまくいかない
詰んだw
その結果をパースしてごにゃごにゃやればできるんだろうけど、
readonly -pの結果が、
bashだと declare -r a="1"
dashだと readonly a='1'
と異なるのでパースが面倒くさい上に、
変数名がわかったからといってどうするのだ?問題がある
サブシェル内でもreadonlyだからunsetできない。
setをパースして消すのは改行文字とかの対応で面倒
エラーを無視しようにもうまくいかない
詰んだw
82デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 03:37:41.74ID:GWQb325r0 "Field with Space" "Second Field" ...
みたいなフィールの連続に対して一番初めのフィールドを取得したいんだけど
なんかいい方法ない? ただしフィールドのなかに特殊な文字は含まれないし、「"」記号もフィールを区別する目的以外には使われてない。
これコマンドに渡す引数の形と似てるから$1とか上手く利用したらいい感じの処理ができそうなんだけど
思い付かん……。
みたいなフィールの連続に対して一番初めのフィールドを取得したいんだけど
なんかいい方法ない? ただしフィールドのなかに特殊な文字は含まれないし、「"」記号もフィールを区別する目的以外には使われてない。
これコマンドに渡す引数の形と似てるから$1とか上手く利用したらいい感じの処理ができそうなんだけど
思い付かん……。
83デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 03:38:09.61ID:GWQb325r0 なぜかフィールドが二箇所でフィールになってるww
84デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 03:50:48.26ID:Fk1HpByz0 ちゃんとフールって書けよw
こんな感じだな
line='"Field with Space" "Second Field"'
echo $line
# 関数呼び出し
foo() {
echo "foo1: $1"
echo "foo2: $2"
}
eval fool $line
# または
eval set -- $line
echo "set1: $1"
echo "set2: $2"
もちろんeval使ってるので、入力データが安全であることが前提
あとは1文字ずつパースして処理するとか
こんな感じだな
line='"Field with Space" "Second Field"'
echo $line
# 関数呼び出し
foo() {
echo "foo1: $1"
echo "foo2: $2"
}
eval fool $line
# または
eval set -- $line
echo "set1: $1"
echo "set2: $2"
もちろんeval使ってるので、入力データが安全であることが前提
あとは1文字ずつパースして処理するとか
85デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 04:38:59.49ID:GWQb325r0 あーやっぱり変数に代入する感じか。
(データが安全なのは保証されてるんだけど 長いんだよね)
でもありがとう。とりあえずそれで行く。
(データが安全なのは保証されてるんだけど 長いんだよね)
でもありがとう。とりあえずそれで行く。
86デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 04:43:30.53ID:Fk1HpByz0 変数というか、$1, $2, ... だけど
変数($1等含む)に入れないでどうやれとw
標準入力?
変数($1等含む)に入れないでどうやれとw
標準入力?
87デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 05:30:19.44ID:GWQb325r0 いや 結局変数に入れることと一緒なんだけど
$ echo '"Field with Space" "Second Field"' | { eval set -- "$(cat -)"; echo $1; }
みたいにしてみた。というのは実際のデータは標準出力から流れてくるから
できるだけパイプで処理したいなというのがあった。
いずれにせよeval setなんて思い付きもしなかったんで むちゃくちゃ感謝してる。
難癖を付けてる訳ではないよ。いやマジで。
$ echo '"Field with Space" "Second Field"' | { eval set -- "$(cat -)"; echo $1; }
みたいにしてみた。というのは実際のデータは標準出力から流れてくるから
できるだけパイプで処理したいなというのがあった。
いずれにせよeval setなんて思い付きもしなかったんで むちゃくちゃ感謝してる。
難癖を付けてる訳ではないよ。いやマジで。
88デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 07:41:11.09ID:wRik+4En0 >>87
別に気分悪くしたとかじゃなくて、
なにか処理するなら結局変数に入れるよなーってだけだよ
標準入力からでもreadで変数に入れるわけだし
最近eval多用してる。もちろんそれがどうしても必要だからだけど
特に速度が遅くなるわけでもないし色々と便利
別に気分悪くしたとかじゃなくて、
なにか処理するなら結局変数に入れるよなーってだけだよ
標準入力からでもreadで変数に入れるわけだし
最近eval多用してる。もちろんそれがどうしても必要だからだけど
特に速度が遅くなるわけでもないし色々と便利
89デフォルトの名無しさん (ワッチョイ 377f-2rmu)
2018/09/27(木) 09:31:12.30ID:0Kr1SoI20 丁寧な回答をもらっておいて「でも」「とりあえず」は失礼だろう
「お前の回答はイマイチだが時間もないし採用してやるか」という感じかな?
「お前の回答はイマイチだが時間もないし採用してやるか」という感じかな?
90デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 09:36:53.29ID:wRik+4En0 今日の荒らしは>>89
91デフォルトの名無しさん (アウアウカー Saab-HGqR)
2018/09/27(木) 10:20:00.38ID:pwwRK9qRa 荒らし認定兄貴今日もお疲れ様です
92デフォルトの名無しさん (ワッチョイ 178a-VlcY)
2018/09/27(木) 11:06:37.78ID:RGPgoULv0 正論を書くとあらし認定されるんですね
93デフォルトの名無しさん (オッペケ Sr4b-+FqY)
2018/09/27(木) 12:20:46.63ID:99b9Jx0Mr 大体失礼なのはこの手の答えたがりw
94デフォルトの名無しさん (アウアウカー Saab-XaUO)
2018/09/27(木) 13:17:03.86ID:U92lHhY6a >>70
それ set じゃなくて最後に echo i=$i だけで良いのでは?
それ set じゃなくて最後に echo i=$i だけで良いのでは?
95デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 14:01:53.41ID:wRik+4En096デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 14:05:58.33ID:wRik+4En0 こういう問題について考えていると、bashの拡張ってよく考えられてるなって思うよ
ちゃんと足りなくて必要な機能を追加してくれてる
https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51#prefix-%E5%A4%89%E6%95%B0%E5%90%8D%E4%B8%80%E8%A6%A7
ちゃんと足りなくて必要な機能を追加してくれてる
https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51#prefix-%E5%A4%89%E6%95%B0%E5%90%8D%E4%B8%80%E8%A6%A7
97デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 17:43:23.75ID:GWQb325r0 https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#compact
こういうのとかもすっげえ便利だよね。
$ VAR=val; echo ${VAR@A}
VAR='val'
でも新しい機能なのか,日本語版のマニュアルに掲載されてない。
(まあ俺はPOSIXに準拠したほうがいいと思ってるので,こういう機能は
それこそ一時的な使い捨てスクリプトにしか使わんけど)
こういうのとかもすっげえ便利だよね。
$ VAR=val; echo ${VAR@A}
VAR='val'
でも新しい機能なのか,日本語版のマニュアルに掲載されてない。
(まあ俺はPOSIXに準拠したほうがいいと思ってるので,こういう機能は
それこそ一時的な使い捨てスクリプトにしか使わんけど)
98デフォルトの名無しさん (ワッチョイ bf9f-MYrK)
2018/09/28(金) 02:21:47.32ID:5yuIehG0099デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/28(金) 10:45:59.06ID:TLhVFQk50 ファイルのメディアタイプを取得する汎用な方法ってあるかな。
自作してもいいんだけどできれば既存のものを利用したい。
file(1)コマンドの-iオプションがまず思い付いたんだけど,これは
GNU/Linux(http://man7.org/linux/man-pages/man1/file.1.html)
FreeBSD(https://www.freebsd.org/cgi/man.cgi?query=file&sektion=1)
ではメディアタイプで出力するとあるのに対し
本家POSIX(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/file.html)
Solaris(https://docs.oracle.com/cd/E26502_01/html/E29030/file-1.html)
AIX(https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/file.htm)
なんかでは特になんの指定もなし……。
メディアタイプなんてド標準なんだから,しっかり規定しておいてほしかったなぁ。
POSIX 2017あたりでさ。
自作してもいいんだけどできれば既存のものを利用したい。
file(1)コマンドの-iオプションがまず思い付いたんだけど,これは
GNU/Linux(http://man7.org/linux/man-pages/man1/file.1.html)
FreeBSD(https://www.freebsd.org/cgi/man.cgi?query=file&sektion=1)
ではメディアタイプで出力するとあるのに対し
本家POSIX(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/file.html)
Solaris(https://docs.oracle.com/cd/E26502_01/html/E29030/file-1.html)
AIX(https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/file.htm)
なんかでは特になんの指定もなし……。
メディアタイプなんてド標準なんだから,しっかり規定しておいてほしかったなぁ。
POSIX 2017あたりでさ。
100デフォルトの名無しさん (ワッチョイ 9f98-aemA)
2018/09/28(金) 13:07:01.59ID:bPXaydqo0 >>99
メディアタイプの種類自体は標準化されていたとしても、
あるファイルがどのメディアタイプかってのは決まらないでしょ?
拡張子cgiのスクリプトファイルだって、ソースコード配布サイトなら
テキストファイル扱いにしたいだろうし
メディアタイプの種類自体は標準化されていたとしても、
あるファイルがどのメディアタイプかってのは決まらないでしょ?
拡張子cgiのスクリプトファイルだって、ソースコード配布サイトなら
テキストファイル扱いにしたいだろうし
101デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 13:10:10.20ID:d3Gl2lPg0 特別な意味をもたせた終了コードをなんにしようかな?って考えてるんだけど
既存で使われてる終了コードとなるべくかぶらせたくない。
どんなのがあるか知らない?
1, 2, 126, 127, 255(bashの予約)
0〜63(fsckで使用)
64〜78(sysexits ユーザー用のうち定義済みのもの)
128〜192(シグナルコードの範囲?)
参考
https://ja.wikipedia.org/wiki/%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
http://kaworu.jpn.org/doc/FreeBSD/jman/man3/sysexits.3.php
http://tldp.org/LDP/abs/html/exitcodes.html
一番最後のリンクでsysexitsの作者は64〜113をユーザー用に使うことを提案してるみたいだけど
定義済みを除けば残りは79〜113かな
既存で使われてる終了コードとなるべくかぶらせたくない。
どんなのがあるか知らない?
1, 2, 126, 127, 255(bashの予約)
0〜63(fsckで使用)
64〜78(sysexits ユーザー用のうち定義済みのもの)
128〜192(シグナルコードの範囲?)
参考
https://ja.wikipedia.org/wiki/%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
http://kaworu.jpn.org/doc/FreeBSD/jman/man3/sysexits.3.php
http://tldp.org/LDP/abs/html/exitcodes.html
一番最後のリンクでsysexitsの作者は64〜113をユーザー用に使うことを提案してるみたいだけど
定義済みを除けば残りは79〜113かな
102デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/29(土) 13:18:50.90ID:IuTgmxg/0 オツムに欠陥があるヤツでなければ
普通に別の環境変数にいれる
普通に別の環境変数にいれる
103デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 14:08:42.53ID:PPHj/b7C0104デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 15:12:55.62ID:d3Gl2lPg0 >>103
そう言われるかなとは思ったw
「俺の作ったプログラム」 ==> 「俺の作ったフィルタ」 ==> 「任意のプログラム」
という呼び出しの流れで
「俺の作ったプログラム」 で「任意のプログラム」 の終了コードを知りたいが、
「俺の作ったフィルタ」 独自の終了コードだけは特別扱いしたいということ
「任意のプログラム」のエラーは想定外のエラーで
「俺の作ったフィルタ」のエラーは想定されたエラーで
どちらもエラーではあるんだけど「俺の作ったプログラム」で表示するメッセージが違う
それぐらいなので、かぶってしまっても大きな問題は発生しないんだけどね
そう言われるかなとは思ったw
「俺の作ったプログラム」 ==> 「俺の作ったフィルタ」 ==> 「任意のプログラム」
という呼び出しの流れで
「俺の作ったプログラム」 で「任意のプログラム」 の終了コードを知りたいが、
「俺の作ったフィルタ」 独自の終了コードだけは特別扱いしたいということ
「任意のプログラム」のエラーは想定外のエラーで
「俺の作ったフィルタ」のエラーは想定されたエラーで
どちらもエラーではあるんだけど「俺の作ったプログラム」で表示するメッセージが違う
それぐらいなので、かぶってしまっても大きな問題は発生しないんだけどね
105デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 17:52:02.97ID:PPHj/b7C0 >>104
なるほど。
たしかにそういう目的ならば,終了コードが混ざる≠フはよくないな。
しかし例えばapt(1)は非root権限でシステム操作しようとすると
exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
せっかくsysexitに権限異常を示す77があるのにどうして100番を使ってしまったのか……。
[Debian 2015]: https://manpages.debian.org/stretch/apt/apt.8.ja.html#%E8%A8%BA%E6%96%AD%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8
なるほど。
たしかにそういう目的ならば,終了コードが混ざる≠フはよくないな。
しかし例えばapt(1)は非root権限でシステム操作しようとすると
exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
せっかくsysexitに権限異常を示す77があるのにどうして100番を使ってしまったのか……。
[Debian 2015]: https://manpages.debian.org/stretch/apt/apt.8.ja.html#%E8%A8%BA%E6%96%AD%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8
106デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 17:54:32.38ID:PPHj/b7C0 ああ,なんか説明不足で投稿しちゃった。
つまりさ,一応標準で定められたエラー番号はあるものの,
各種アプリケーションが従っている訳でもなく
Debian系のaptコマンドのような超大手のアプリケーションでさえ標準を無視してるんだから,
> 定義済みを除けば残りは79〜113かな
↑こういうのは考えないほうがいいんじゃない? ってこと。
つまりさ,一応標準で定められたエラー番号はあるものの,
各種アプリケーションが従っている訳でもなく
Debian系のaptコマンドのような超大手のアプリケーションでさえ標準を無視してるんだから,
> 定義済みを除けば残りは79〜113かな
↑こういうのは考えないほうがいいんじゃない? ってこと。
107デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:22:23.04ID:d3Gl2lPg0 >>105-106
どこかのなにかにかぶってしまうのは防ぎようがないけど
よく使われるコマンドがこんな終了コードを使っていたっていう事例を知りたいのよ
fsckとかどう見てもエラーじゃねーだろコレっていうのが
エラーあつかいになってて以前はハマったことあるしw
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
> 1 - ファイルシステムのエラーが修正された
どこかのなにかにかぶってしまうのは防ぎようがないけど
よく使われるコマンドがこんな終了コードを使っていたっていう事例を知りたいのよ
fsckとかどう見てもエラーじゃねーだろコレっていうのが
エラーあつかいになってて以前はハマったことあるしw
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
> 1 - ファイルシステムのエラーが修正された
108デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:23:25.37ID:d3Gl2lPg0 標準に準拠したいとかそういう話ではなく
単にぶつかりたくないだけ
単にぶつかりたくないだけ
109デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:24:45.45ID:d3Gl2lPg0 > exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
実を言うと今100を使おうとしていたw
やはり裏の裏の裏の裏ぐらいを読まないとダメだなw
実を言うと今100を使おうとしていたw
やはり裏の裏の裏の裏ぐらいを読まないとダメだなw
110デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 18:40:55.97ID:PPHj/b7C0 非0の返り値だけどコマンドは成功しているっていう例として有名なのはdiff(1)とかかな。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/diff.html#tag_20_34_14
>1
> Differences were found.
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/diff.html#tag_20_34_14
>1
> Differences were found.
111デフォルトの名無しさん (ワッチョイ 9f5d-+h8b)
2018/09/29(土) 18:46:56.62ID:8M0IW2fy0 シグナルでも使ってみたらどうだろうか。
あるいは別にパイプを用意するとか。
あるいは別にパイプを用意するとか。
112デフォルトの名無しさん (ワッチョイ bf9f-MYrK)
2018/09/30(日) 02:44:50.58ID:KPqVv5wd0 絶対にぶつからないようにするには別の方法でエラーを伝えるようにするぐらいしか方法ないんじゃないか?
同じ値になる可能性のあるものをどちらから発生したかわからない状態で同じ所から得るなんてやはり無理があるだろう。
同じ値になる可能性のあるものをどちらから発生したかわからない状態で同じ所から得るなんてやはり無理があるだろう。
113デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/01(月) 01:15:09.47ID:2Ehpmx/A0 こんな書き方できたのか
a=1
case $a in
( 1 ) echo ok
esac
a=1
case $a in
( 1 ) echo ok
esac
114デフォルトの名無しさん (ワッチョイ bf9f-aemA)
2018/10/01(月) 02:02:45.71ID:IEGoOL+v0 お、おう
115デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/02(火) 19:23:29.52ID:6qOrAQgQ0 お題
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、外部コマンド、拡張POSIX機能、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、外部コマンド、拡張POSIX機能、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
116デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/02(火) 21:27:13.63ID:yoF3UpeG0117デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/02(火) 21:45:46.37ID:yoF3UpeG0 おいこら答えてやったんだからなんとか言えよコラ
エレガントすぎて腰が抜けたか?wwwww
まあ実際,自分で言うのもなんだけどかなり最良に近い方法じゃないかしら。
・POSIX.1-2017準拠
・空白などを含む引数も直感的に指定可能("word with space")
・単純 構造が簡単
・数値の増加にexpr(1)ではなく算術式を利用している為速い
エレガントすぎて腰が抜けたか?wwwww
まあ実際,自分で言うのもなんだけどかなり最良に近い方法じゃないかしら。
・POSIX.1-2017準拠
・空白などを含む引数も直感的に指定可能("word with space")
・単純 構造が簡単
・数値の増加にexpr(1)ではなく算術式を利用している為速い
118デフォルトの名無しさん (ワッチョイ 1723-sl6K)
2018/10/02(火) 22:03:54.77ID:kkfm+1S90 変数禁止だから不正解じゃない?
119デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/02(火) 22:15:20.79ID:xDUI5Isc0120デフォルトの名無しさん (アウアウカー Saab-HGqR)
2018/10/02(火) 23:00:16.05ID:xTxFBCr4a 最初の一個だけならスマートだったのに
褒められたがりが
褒められたがりが
121デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 00:30:44.79ID:ej0n10jM0 煽りだよ だって明らかに学校の課題かなにかでしょ。
そんなのに真面目に付き合うほど俺は素直じゃない。
そんなのに真面目に付き合うほど俺は素直じゃない。
122デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 00:44:57.49ID:m57KKa9e0 苦しすぎな言い訳w
123デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 01:48:10.18ID:ej0n10jM0 まあそう思っとけw
124デフォルトの名無しさん (ワッチョイ bf9f-aemA)
2018/10/03(水) 01:59:13.13ID:jikKostS0 >>115
echo は使っては駄目? 拡張されていない sh だと echo はビルトインではなく /usr/bin/echo だと思うが。
echo は使っては駄目? 拡張されていない sh だと echo はビルトインではなく /usr/bin/echo だと思うが。
125デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:01:17.96ID:NkO7phbc0126デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:03:27.25ID:NkO7phbc0127デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:14:54.02ID:NkO7phbc0 そうか。evalとか外部コマンドは実装不可能なものを除いて
ビルトインで実装することなんて決まりはないのか
では外部コマンドの定義を「現存するシェルでビルトインで実装されたことがないもの」にしよう
オレオレシェル作ってビルトインするのは問題の意図から外れるので、
現存する(誰もが容易に入手可能な)いずれかのシェルで
ビルトインされているならば使って良いものとする
ビルトインで実装することなんて決まりはないのか
では外部コマンドの定義を「現存するシェルでビルトインで実装されたことがないもの」にしよう
オレオレシェル作ってビルトインするのは問題の意図から外れるので、
現存する(誰もが容易に入手可能な)いずれかのシェルで
ビルトインされているならば使って良いものとする
128デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:18:56.23ID:NkO7phbc0 あと拡張POSIX機能も使用してOKにしよう。
それを実現する裏技みたいなのがあったら嫌だなと思って入れたが、
もしそれでできるなら俺も勉強になるし。
ようするにPATH環境変数を空にして、どれかのシェルで動けばOKってことだな
条件がグダグダになってしまったw
それを実現する裏技みたいなのがあったら嫌だなと思って入れたが、
もしそれでできるなら俺も勉強になるし。
ようするにPATH環境変数を空にして、どれかのシェルで動けばOKってことだな
条件がグダグダになってしまったw
129デフォルトの名無しさん (アウアウカー Saab-XaUO)
2018/10/03(水) 12:27:47.15ID:61GCF4dla if や while を外部コマンド動かさずに使うには [ がビルトインのシェルでないとダメだな。
昔の sh は [ が test コマンドへのシンボリックリンクで外部コマンドだったし。
今でもその名残で /bin または /usr/bin に [ が入ってるよな。
昔の sh は [ が test コマンドへのシンボリックリンクで外部コマンドだったし。
今でもその名残で /bin または /usr/bin に [ が入ってるよな。
130デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 13:43:00.79ID:NkO7phbc0 別件で現在主要のシェルで何がビルトインか調べたことがあるよ
. : [ break cd command continue echo eval exec exit export false kill pwd
read readonly return set shift test times trap true umask unset wait
これらは全てのシェルで使えると言っていいだろう
poshはログインシェルとしては使わないもの扱いなのか
alias bg fg type ulimitが削除されている。(typeないとか地味につらい)
busyboxはgetoptsがないみたい
意外だったのはprintfがビルトインでないシェルがmkshとposhの2つもあったこと。
しかも両方共echoでエスケープシーケンスを解釈してくれるから文字をそのまま出力できない。
mkshの方はset -o posixでエスケープシーケンスを無効にできるしビルトインのprintで代用できるんだが
poshは調べた限りビルトインコマンドでそのまま出力する方法がない
. : [ break cd command continue echo eval exec exit export false kill pwd
read readonly return set shift test times trap true umask unset wait
これらは全てのシェルで使えると言っていいだろう
poshはログインシェルとしては使わないもの扱いなのか
alias bg fg type ulimitが削除されている。(typeないとか地味につらい)
busyboxはgetoptsがないみたい
意外だったのはprintfがビルトインでないシェルがmkshとposhの2つもあったこと。
しかも両方共echoでエスケープシーケンスを解釈してくれるから文字をそのまま出力できない。
mkshの方はset -o posixでエスケープシーケンスを無効にできるしビルトインのprintで代用できるんだが
poshは調べた限りビルトインコマンドでそのまま出力する方法がない
131デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 13:47:38.74ID:m57KKa9e0 いいから、お題の参考答えを出しなさいw
オレオレ定義が曖昧すぎでお題になってないから、もういいでしょ
オレオレ定義が曖昧すぎでお題になってないから、もういいでしょ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【調査】クレジットカード、1人何枚持つのが「平均的」?★3 [ひぃぃ★]
- 【作家】高市総理支持の背景に見えるヤンキー的「ケンカ上等!」と「日本人は特別だ」感がとても怖い 北原みのり [少考さん★]
- 宮崎あおい「電子レンジ持ってない」“丁寧な暮らし”を告白「ごはんを温め直すときも蒸し器」に「凄すぎ」の声 [muffin★]
- 【テレビ】池上彰氏 報道の自由度が高い国の特徴「どんどん政府を批判する。政治家は受け入れる」 一方独裁国家は… [冬月記者★]
- 「『ETC』←なんて読んでますか?」 公募で決めたのに全然呼ばれなかった“幻の愛称”とは [七波羅探題★]
- 【サッカー】カズ所属の鈴鹿が実質5部の地域リーグに降格 延長戦の末に敗戦 カズは延長後半6分から出場も反撃かなわず [ゴアマガラ★]
- 【原点】🏡👊👊😅👊👊🏡【回帰】
- 疲れたので死ぬ 言い残すことはない
- トランプ「ホワイトハウスにメディアのデマを載せる!!」ここに高市報道がない件、なぜかネトウヨ完全スルー。 [469534301]
- 古市憲寿「スタジオでも中国批判して気持ち良くなってる人はいるが高市答弁で日本人は損してる。国益を害した」スタジオ凍りつく [931948549]
- たぬかなの目的は弱者男性への復讐だったんじゃね?
- いつか人類が滅ぶなら人生には意味がないのか? [126644339]
