シェルスクリプト総合 その32

■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
2020/02/16(日) 00:06:52.88ID:0ownCpNF
誤 そしたらならなんか616があったりしたが
正 そしたらならなんか612があったりしたが
626デフォルトの名無しさん
垢版 |
2020/02/16(日) 09:10:15.42ID:xg4O4sK0
sort -kについて正しく分かり易いサイトはないですか?
2020/02/16(日) 12:16:49.32ID:O89bDljg
>>626
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html
2020/02/16(日) 12:17:20.39ID:k2/UeE1A
えいごなのでわかりやすくないです
2020/02/16(日) 12:50:45.03ID:tUbalZD+
https://github.com/coreutils/coreutils/blob/master/src/sort.c
2020/02/16(日) 13:15:28.05ID:U5VJnWmt
>>627
中国語の解説をご所望だそうだ
2020/02/16(日) 14:38:33.35ID:O89bDljg
おめーらイジワルだなw
2020/02/16(日) 15:33:45.11ID:iNVxJNOu
分かりやすい
http://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x6993.htm
2020/02/17(月) 08:01:59.15ID:ZjAffcZp
与えられた数字のファイルの行番号になにかを書き込むスクリプトってどう書くのが一番いいですかね。
一応 今 思い付いてるのは
与数をNNN,書き込む文字列をXXXとして
sed -n -e 'NNNs/.*/XXX/p'
↑こういうのかなと思ったんだけど
これだと新規ファイルを作成する目的には使えない…
2020/02/17(月) 10:14:55.01ID:LO6gJc6j
nl使えばいいだろ。POSIX標準の基本コマンド一覧見ろや
2020/02/17(月) 10:37:47.88ID:ZjAffcZp
>>634
nlにそんな機能あるの?
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nl.html
↑ここ見る限り
指定した行になにかを書き込むなんていう機能なさそうなんだけど。
2020/02/17(月) 10:47:12.51ID:8g99SQEJ
こういう事?

seq 10 | sed '5s/.*/& Here/'
2020/02/17(月) 11:12:00.77ID:ZjAffcZp
>>636
そうそう、そんな感じ。
行番号自体は出力に要らないけどね。
ただ、それだと >>633 でも言った通り、
元のファイルがない状態から生成できないんだよ。

示してくれたスクリプトでも「10行出力する」
っていう前提があって始めて機能するよね。
やりたいのは全部で何行必要か分からない状態で
次々に指定した行に文字列を書き込むってこと。
638デフォルトの名無しさん
垢版 |
2020/02/17(月) 14:40:41.78ID:xPbhxlpI
配列に書いて要素番号と共に出力すれば
2020/02/17(月) 14:53:39.21ID:qj5C8HtX
おまえらよく

与えられた数字のファイルの行番号になにかを書き込むスクリプト
で何がいいたいのかわかるな

与えられた 数字のファイル の行番号なのか
与えられた数字 のファイルの行番号なのか
与えられた数字のファイル の行番号なのか
与えられた数字のファイルの行番号 なのか
さっぱりなんだがw

入力と出力の例を出せば、すぐに解決する問題だろうに
2020/02/17(月) 14:56:06.69ID:qj5C8HtX
> やりたいのは全部で何行必要か分からない状態で
> 次々に指定した行に文字列を書き込むってこと。
これもさっぱり

何行必要かわからないって、何の行数なのか
次々に指定した行って、どうやって指定するつもりなのか

示したスクリプトは別に10行という前提じゃなくても機能するし
元のファイルがないって、元のファイルってどのファイルだよ?
なければ作ればいいだけだろ?
2020/02/17(月) 15:06:30.32ID:y136Nw0W
行ごとに何か処理したいならawkの出番なのでは?
2020/02/17(月) 15:42:52.76ID:ZjAffcZp
>>639
入力
linenumber=78
value='hoge huga'
linenumber=805
value='foo bar'
...

出力
(空行)...
(78行目)hoge huga
(空行)...
(80行目)foo bar

こんな感じっすね。
入力は(この例では)変数に格納するような形式にしましたが
別にこれと決まった訳じゃないです。
2020/02/17(月) 15:45:24.56ID:ZjAffcZp
>>641
うーん。それはまあ,sedでもawkでも同じことが言えますけど
どちらも既存のファイル(またはパイプ越しの既存の出力)に対しての行処理
が得意なんですよね。

一方いまやりたいことはファイルの新規作成であって
しかも最後まで行の総数が分からないという……

これはawkでどうにかするのは難しいのではと思います。
2020/02/17(月) 15:49:37.43ID:qj5C8HtX
行番号と文字列のペアが入ったデータ(ファイル)があって、
それに従って別のファイルの指定された行の頭に文字列を入れるってことね

ん?別のファイルの行の頭に文字列を入れるのか?
それとも単に、その出力通りに出すだけなのか?
その出力を作るだけなら簡単だろうけど・・・あーいやどちらも大差ないかw
2020/02/17(月) 15:50:05.60ID:P9Oy3OK5
先に行指定の最大値を取得すればええやろ?
2020/02/17(月) 15:54:20.48ID:y136Nw0W
それならもう無理せずperl,ruby,pythonあたりで書いたらいいんでないの?
2020/02/17(月) 16:01:09.81ID:qj5C8HtX
入力ファイル形式を
78 hoge hug
805 foo bar
とする。行番号は小さい順に並んでいるものとする。
並んでいないならsortコマンドで並び替えられるのでどうでもいい

あとは、こんな感じのスクリプトを書いて

i=1
while read -r num string; do
 while [ $i -lt "$num" ]; do
  echo
  i=$((i+1))
 done
 echo $string
 i=$((i+1))
done

cat data.txt | script.sh とかすればいい
echoで空行出す所は、seqとかprintf '%s' "$@"とか使えば短くできるだろうな。
2020/02/17(月) 16:15:26.16ID:qj5C8HtX
>>646
ロジックはどの言語でも変わらないので
シェルスクリプトでそれを書けばいいだけ
2020/02/17(月) 16:25:32.91ID:qj5C8HtX
短くしてみた。バグとかはしらん

i=1 num=0
while [ "$i" -le "$num" ] || read -r num string; do
[ "$i" -eq "$num" ] && echo "$string" || echo " "
i=$((i+1))
done
2020/02/17(月) 16:31:22.20ID:2IQo7lRr
>>637
どういうことをしたいのかよくわからんが、とりあえずtouchしておけばファイルは作れるんでないの?
2020/02/17(月) 18:55:51.30ID:P9Oy3OK5
一旦配列に入れてからjoin風に出力
入力はsortされてなくても可

#! /usr/bin/env bash
while read -r num string; do
array[num]="$string"
done

index=( "${!array[@]}" )
for (( i=1; i<=${index[-1]}; i++)); do
if [ -v array["$i"] ];then
echo "${array[$i]}"
else
echo
fi
done
2020/02/17(月) 21:12:48.06ID:ZjAffcZp
>>650
いや,ただたんに新規作成したい訳じゃない…
2020/02/18(火) 03:26:33.92ID:enVFBik2
Ruby で作った

以下のコードを、script.rb に保存して、
「ruby script.rb 行番号指定ファイル 入力ファイル」と実行する

ARGV[ 0 ] は、行番号指定ファイル
ARGV[ 1 ] は、入力ファイル

結果は、標準出力に出したので、ファイルへリダイレクトして下さい。
ただし、入力ファイルへはリダイレクトしないように!

行番号指定ファイルは「数字・半角空白・文字列」の順番です。
ただし、行は数字でソートされていること

3 あ い
7 ab

# 行番号指定ファイルを、[ 行番号, 文字列 ] の、2次元配列に読み込む。
# 1行ずつ処理する。末尾の改行を削除する
line_num_ary = File.foreach( ARGV[ 0 ], chomp: true ).with_object( [ ] ) do |line, ary|
tmp_ary = line.split( nil, 2 ) # 空白で、2つに分割する
tmp_ary[ 0 ] = Integer( tmp_ary[ 0 ], 10 ) # 数値型に変換する
ary.push tmp_ary
end

次へ続く
654653
垢版 |
2020/02/18(火) 03:27:41.15ID:enVFBik2
last_line_num = line_num_ary.last[ 0 ] # 最後の行番号
line_count = nil # ファイルの行数

if FileTest.file? ARGV[ 1 ] # 入力ファイルがあれば
open( ARGV[ 1 ] ) do |f|
while f.gets; end # ファイルを最後まで読む
line_count = f.lineno # ファイルの行数
end
# 最後の行番号の方が、入力ファイルの行数よりも大きい場合は、空行を追加して、同じ行数にする
if last_line_num > line_count
open( ARGV[ 1 ], "a" ) do |f| # 追記
( last_line_num - line_count ).times { f.puts }
end
end
else # 入力ファイルが無ければ、最後の行番号の数だけ、空行を挿入する
open( ARGV[ 1 ], "w" ) do |f| # 書き込み
last_line_num.times { f.puts }
end
end

# 末尾の改行を削除して、配列に読み込む
input_ary = File.readlines( ARGV[ 1 ], chomp: true )

# 行番号で指定された行の、内容を置き換える
line_num_ary.each { |ary| input_ary[ ary[ 0 ] - 1 ] = ary[ 1 ] }
puts input_ary
2020/02/18(火) 03:35:49.66ID:dYxIHNEw
>>649
これが一番だな。短くてbash依存なし。ruby依存なしw
2020/02/18(火) 09:24:28.92ID:2AC9Ct1n
いや、それちょっとした文字列操作したくなった時点で相当めんどくさくなるだろ。。
てきとーなスクリプト言語使う方が正解だわ。
シェルで書くことに意固地になってるだけだろ。
2020/02/18(火) 09:30:40.26ID:HqsHcaRa
別にならんだろ。まああれだ、シェル芸しかできなくて
シェルプログラミングできないやつが
ごまかすために言ってるんだろうなと
2020/02/18(火) 09:53:00.13ID:2AC9Ct1n
あ、普通に馬鹿なんだな。。
もしかしてユニケージの人か?
2020/02/18(火) 10:03:42.59ID:HqsHcaRa
ユニケージを見ればわかるが、あれは使い物にならない
特定業務専用のコマンド集でしか無い
そんなことよりさ、自分でコード書けないの?
2020/02/18(火) 10:04:48.16ID:HqsHcaRa
文字列操作の何が面倒なのか知らんが、文字列操作はC言語よりもずっと楽なんだがね。
コマンド呼び出しだけを見れば他のどの言語よりも優れてるし
2020/02/18(火) 10:42:09.68ID:X2bVDQHa
> てきとーなスクリプト言語
シェルスクリプトとか?w
2020/02/18(火) 14:37:02.43ID:gCN/+gaX
>>660
ていうか実はシェルスクリプトって
PythonでいうC API的なものの嚆矢であり最前線なんだよね。
C言語の標準入出力・ファイル読出/書込をシェルでやって
数値計算とかバイナリ解析とかそういう部分はC言語でコマンド作って任せるっていう。
2020/02/18(火) 15:45:01.04ID:fdBjlYYo
IT系の仕事してるけどアプリ作ってるときはコンパイルは普通だった
でもインフラの仕事をするとシェルスクリプト多数だった
シェルスクリプト作ってる人たちはコンパイルの概念が分からないらしかった
プログラムはビルドしてリリースしてとソースと実行ファイルの管理が面倒だけど
シェルスクリプトって即物的なのがいい
2020/02/18(火) 17:27:39.45ID:X8dqmLc9
1 2
3 4
みたいなhoge.txtがあって
cat hoge.txt | sed "s/\t/,/g" > piyo.csv
ってやってもhogeのままなんですけど
cat hoge.txt | tr " \t" "," > piyo.csv
ってやると上手くいきました、mac環境なんですけど
何が原因なのか分かりません…
sedの置換対象に数字を入れた場合は上手くいきました
2020/02/18(火) 17:30:18.44ID:hjlsDnk2
1 と 2 の間にあるのがスペースなんじゃ…
2020/02/18(火) 20:22:18.38ID:wp4bvOJX
>>664
sed のダブルクォーテーションをシングルクォーテーションにするとどう?
もしくは s/\t/... じゃなくて s/\\t/... とか

>>665
tr の場合うまくいく理由の説明ができないんじゃ?
667デフォルトの名無しさん
垢版 |
2020/02/18(火) 20:27:51.93ID:VB0SzzBs
>>664
mac の sed は \t をタブ文字として扱わないらしいね

https://stackoverflow.com/questions/5398395/how-can-i-insert-a-tab-character-with-sed-on-os-x/5398453#5398453

sed "s/$(printf '\t')/,/g" はどうかな
printf も \t 非対応なんてことはさすがに無いと思うけど
2020/02/18(火) 20:33:06.70ID:hjlsDnk2
tr " \t" "," となっていてスペースが含まれているから
上手くいっているんじゃないかと
2020/02/18(火) 21:52:28.55ID:8C0JMYsF
665~668の方まで皆さんありがとうございます
とりあえず痴漢の成功例を○、上手くいかなかったのを×として
× tr " " ","
○ tr "\t" ","
× sed "s/\t/,/g" (\tを\\tに変える、クオーテーションを変えるなどしても同様)
○ sed "s/$(printf '\t')/,/g"
という感じでした。
macとlinuxでオプション違うのは経験で知ってたんですが正規表現にまで
関わってくるんですね…良い事を教えていただいてありがとうございます。
2020/02/18(火) 22:18:45.81ID:ObTpNy6/
macならgnu-sedをインストールしてそっち使ったほうが良い
2020/02/19(水) 11:18:51.97ID:nP6c4IYT
痴漢の成功例っていやだなw
2020/02/19(水) 12:03:18.50ID:pMNWrift
気が付かなかったww
2020/02/21(金) 06:21:58.42ID:A/822pua
$ ed -s <(seq 3) <<< $'3m1\n,p'
1
3
2
$ ed -s <(seq 3) <<< '3m1\n,p'
?

これでコマンドラインからedが使えるけどこの$ってどんな効果が?
付けないとこの通り表示されないし
2020/02/21(金) 07:58:16.90ID:0dzJ+7kH
>>673
Bashの機能でエスケープシーケンスを解釈する
'\n'だと\nに展開されるだけだけど
$'\n'だと改行に展開される。
あと$'\u30A2'みたいにUnicode番号も指定できる。
2020/02/21(金) 14:48:04.29ID:A/822pua
>>674
そういやシングルクォートなのに改行できてるな
$ echo $'foo\nbar'も改行されるし中々便利そうだ
ありがとう
2020/02/22(土) 16:39:03.63ID:C/dFKPoq
kshのリポジトリのmasterが3400ぐらいあったコミットが13に減っていてワロタw
2020/02/25(火) 12:18:34.54ID:S19Y4jrS
grepの-eオプションみたく複数回指定できるオプション引数って
シェルスクリプトでどうやって処理するのが一般的なんかな。

getopts(1)の例
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html#tag_20_54_17
とかに載ってるような引数付き-bオプションに対して変数bflag=1, bval="$OPTARG"にする方法だと
最後に出現した-b XXXしか感知できないよね。
-b XX1 -b XX2 -b XX3
↑こういうコマンドライン引数があったときに-bオプションに対する引数を全部認識するようにしたい。

そういう処理をしているスクリプトのソースへのリンクとか教えてもらえるとすごく助かる。
2020/02/25(火) 12:53:16.03ID:5KSIeSvf
出現するたびになにかやればいいだけじゃん
2020/02/25(火) 14:13:23.37ID:oSeHo6cg
>>677
一般的かどうか知らないけど配列に入れて要素の数だけループさせてる
別のコマンドに渡すことが大半なのでループ内ではコマンド文字列を生成して実行はループの外でやる

while getopts “e:” opt; do
case "$opt" in
“e”) strings+=("$OPTARG");;
esac
done
shift $(($OPTIND - 1))

for value in "${strings[@]}"; do

done
2020/02/25(火) 15:00:07.73ID:mMwfySZI
bash依存は甘え
2020/02/25(火) 15:30:00.20ID:K+FIgRaj
>>679
ありがとう!
配列が使えるシェルならそれが一番いい方法かな。
2020/02/25(火) 15:45:41.88ID:K+FIgRaj
今更だけど、試しにNetBSDのgrepのソースコードを覗いてみたら、pattern[]配列に格納してたわ。
POSIXシェルみたいな配列に対応してないシェルでも0x1Fユニット区切り文字とか使えばいいかな。
2020/02/25(火) 17:02:15.34ID:eOOTHTW4
全てのシェルに配列はあるだろ? $@を使えばいいんだよ
あとはqiitaででも探せ。答えはそこにある。
2020/02/25(火) 17:24:31.11ID:S19Y4jrS
>>683
コマンドライン引数の処理において
$@を使ってもいいのかな。
普通に上書きしちゃいそうな気がするが。
2020/02/25(火) 17:25:41.11ID:S19Y4jrS
サブシェルで処理すれば$@は引き継がれないから影響ないけど
そうすると今度は肝心要の、現在処理しているコマンドライン引数を全く参照できなくなる。
2020/02/25(火) 17:46:16.45ID:eOOTHTW4
サブシェルなんかいらねーだろ
関数使えよ
2020/02/25(火) 22:33:40.09ID:S19Y4jrS
>>686

頭悪くて恥ずかしい限りだが、
スクリプトの例を書いてもらえないか。

excmd -a XXX -a YYY -a ZZZ
みたいなコマンドライン引数を解釈して、
全部読み切った後に-aオプションに対するオプション引数をそれぞれ取得できるっていう。
全部読み切った後ってのは、getoptやらで最後のオプションまで読み切って、
引数関連のエラーがないことを確かめてからってことね。
「-aオプションの出現を感知するたびに標準出力に出す」みたいなのじゃなく。
2020/02/25(火) 22:48:26.39ID:8Uixj76j
>>687
ヒント
2番目と4番目と6番目を取り出せばいいだけ
2020/02/26(水) 08:09:52.20ID:vrfGqddo
>>688

-aの位置の次にある引数を取得するってこと?
でもそうすると
-bcaXXX
↑こういうときはどう解析するの?(-b,-cは引数を取らないオプション)
この形式のオプションもPOSIXでは許可されてるから
当然解析できなければならないけど。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
2020/02/26(水) 08:25:40.38ID:iwwM4ZEx
>>689
引数処理にこだわり始めるとスクリプト実行して引数解析終わるまで時間がかかるようになって
使い物にならなくなるので複雑な記法は全部捨てたわ
POSIXで許可されているから実装しなきゃならないというならPOSIXを窓から投げ捨てるべき
2020/02/26(水) 08:29:52.36ID:kXv4PxDr
>>690
下手すぎw どうせgrepとかsedとか外部コマンド持ち出してやったからだろ
だから外部コマンドなし縛りをするんだよ

>>689
話が変わってる。POSIX対応したいならgetoptsとかでは無理
qiitaに対応してるサンプルコードがあるから探せ
2020/02/26(水) 09:28:16.44ID:9H3dDcdo
bash によるオプション解析 - Qiita
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
getoptsの存在すら知らずに横着して=~を使ってすまんな
オプションの集約ってこうも面倒だったのね
693デフォルトの名無しさん
垢版 |
2020/02/26(水) 09:48:23.19ID:re2OdmIW
timeoutで終了するプログラムの最後の1行だけを表示させたいどうするの?
2020/02/26(水) 09:54:37.39ID:kXv4PxDr
>>692
どの言語にもオプション解析用のライブラリがある理由が分かったろ?
2020/02/26(水) 11:26:08.87ID:vrfGqddo
ちなみにgetoptsコマンドはPOSIXで定義されてるけど,実はPOSIXが定めるオプション書式に対応していないっていう。
まあOpenGroup側も「任意のオプション引数は歴史的な理由以外で使ってはならない」って言ってる訳だし
仕方無い部分もあるけど。
一方で複数回登場する引数付きオプションは,ちゃんと現行のアプリケーションでの使用も許可されているにもかかわらず
getopts自身はそういうオプションに対する便利な機能をなんら提供してない。
2020/02/26(水) 13:10:48.18ID:iFRpldfA
>>695
任意のオプション引数ってどういうもののことを言ってる?
2020/02/26(水) 13:41:46.61ID:vrfGqddo
>>696
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
ここを読め…と突き放すのはあんまりなんで説明すると

“optional option-argument”---任意のオプション引数っていうのは,
当該オプションのあとにそのオプションに対する(一つの)引数が指定されてもされなくてもいいような
オプションのこと。
manページの「書式」節で
somecmd -o[arg]
みたいに書かれている場合が該当する。
これは
somecmd -o
の時は「オプション-oが引数なしで指定された」と解釈し
somecmd -oXXX
の時は「オプション-oが引数XXXで指定された」と解釈,
somecmd -o XXX
のときは「オプション-oと,(それとは直接関係ない)被演算子XXXが指定された」と解釈する
という決まりになってる。

なおPOSIXでは規程されてないけど,長いオプションの場合は
任意のオプション引数を指定したければオプションとオプション引数を=で結ぶのが通例みたい。
--long-opt=XXX
↑こういう感じ。
2020/02/26(水) 13:46:00.81ID:Z7ha8duC
>>697
ああ、OKOK、ちゃんと分かってるね
2020/02/26(水) 15:55:24.01ID:vrfGqddo
>>698
分かってもらえたみたいでよかった。
2020/02/26(水) 23:24:46.41ID:iwwM4ZEx
>>691
使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...

個人的には -help が --help の書き間違いとして拾ってくれずに -h -e -l -p になるのが気に食わんのですよ
701デフォルトの名無しさん
垢版 |
2020/02/27(木) 00:12:01.62ID:nCyLO+2A
Ruby の、OptionParser では、

require 'optparse'

ARGV.replace %w(-e abc -e あ)

opts = { }
ARGV.options do |o|
o.on( "-e パターン", "絞り込む" ) { |x|
( opts[ :pattern ] ||= [ ] ).push x } # 配列に追加する

o.parse!
end

p opts #=> { :pattern=>["abc", "あ"] }
2020/02/27(木) 01:10:41.62ID:WuLbJO/f
>>700
その一文字オプションの連結に対応しなければいいだけじゃん
2020/02/27(木) 10:15:09.64ID:1d0gnp8c
>>702
>>700じゃないけど
彼は実装者としての立場ではなくて
利用者としての立場からの意見では?
つまりオプションパーサーを作ってるんじゃなくて
既存のオプションパーサーが-help記法に対応してないってこと。
704700
垢版 |
2020/02/28(金) 00:12:31.43ID:sbmuwMBZ
>>702
はい。 その通りで連結は未対応なスクリプト書いています。
後は値が連結しているタイプ (--foo=goo) も未対応にしています。
705703
垢版 |
2020/02/28(金) 17:35:34.53ID:+yZJUcOk
>>704
やっぱりね
2020/02/28(金) 21:07:42.16ID:11SJpN8G
> 個人的には -help が --help の書き間違いとして拾ってくれずに
-help が --help の書き間違いとして拾ってくれるものなんてある?
2020/02/28(金) 21:16:46.81ID:9ZnEM/be
>>700
> 使い物にならんから外部コマンドなし縛りにして、その結果複雑な書き方捨てたって事なんですが...

外部コマンドを使うと遅くなって使い物にならないから、
外部コマンドなし縛りで自分でパーサーを実装すればいいだけ。
それができないから「下手すぎw」と言ってるわけです。
まあ自分で作れないなら仕方ないけどw
2020/02/29(土) 08:02:48.75ID:A8pIm3Di
うわぁー
2020/02/29(土) 08:10:25.23ID:wnu08hYu
外部コマンドを使おうが使うまいが、パーサーのアルゴリズムに大差ないだろ?
今まで外部コマンドを使ってパースしてたなら、
それを外部コマンドを使わずにパースするだけじゃん
何が難しいというのか?
710700
垢版 |
2020/02/29(土) 09:04:49.63ID:toFJGN/1
>>706
普通ないんだが、注意力が無い何かなのか、問い合わせしてくるユーザーもいて
対応に苦慮することになるんだわ

>>707,709
引数を前から順番に処理してくれない getopt を使わないと決めた途端に難しくなったんだわ
getopt 使わずに -zxf (ファイル名) を -z -x -f (ファイル名) に分割簡単にできる?
-zfx (ファイル名) にしたときエラー処理/クレーマー処理できる?
2020/02/29(土) 09:27:10.60ID:Z90YN+Q9
>>710
問い合わせくるユーザーが居るだけで対応する必要ないじゃん

> 分割簡単にできる?
俺はできるw
2020/02/29(土) 13:13:04.89ID:IP0SEm6N
なんか、車輪の再発明みたいなことになってるなw
2020/02/29(土) 14:05:54.81ID:MM7sekhX
getoptが使い物にならないんだから
作らないとしょうがない
2020/03/01(日) 11:37:30.39ID:4tQoD8Fw
× getopt
○ getopts
2020/03/01(日) 12:51:34.60ID:4c8klxdl
シェルスクリプト用のオプションパーサーって無いの?getopt/getopts以外で
2020/03/01(日) 12:56:04.13ID:4tQoD8Fw
>>715
https://github.com/docopt/docopts
2020/03/01(日) 13:09:15.84ID:4c8klxdl
>>716
それはgo製じゃん
2020/03/01(日) 13:11:39.38ID:TiMroEot
> docopts : the command line wrapper for bash.
2020/03/01(日) 13:16:40.87ID:4c8klxdl
bashってのもマイナス点だな
2020/03/01(日) 14:02:23.94ID:4tQoD8Fw
>>717
シェルスクリプト用のあれこれはすべてシェルスクリプト製じゃないといけない
なんて思ってないよな?

俺の知っているシェル・OS環境は,
sortやgrepみたいな外部コマンドどころか for文や変数処理みたいなシェルの内部動作も
みんなC言語で書かれてるんだが…
2020/03/01(日) 14:28:49.88ID:4c8klxdl
シェルスクリプト製じゃないと、1つのファイルに出来ないじゃん
2020/03/01(日) 15:29:04.21ID:4tQoD8Fw
× シェルスクリプト用のオプションパーサー
○ シェルスクリプト製のオプションパーサー

質問するときは明確な言葉で。
2020/03/01(日) 16:13:34.61ID:DvIm3g7W
ID:4c8klxdlの無能さ
724デフォルトの名無しさん
垢版 |
2020/03/02(月) 16:01:50.45ID:s5dtAso/
外部コマンド使いなくないならBusyBoxみたいなの使うしかないよな。
2020/03/02(月) 16:35:15.54ID:+7p1D0tE
ビルトインコマンドでいいじゃん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況