シェルスクリプト総合 その33 at TECH
[2ch|▼Menu]
[前50を表示]
500:癖が付いたら困るもんな 機能は盛るけど極力使うなって実に杓子定規というか



501:デフォルトの名無しさん
20/06/19 17:24:24.21 gQU/M+Sr.net
UNIX哲学に反したGNU拡張ってなに?
オプション名は1文字なんていうのがUNIX哲学とは思えないな

502:デフォルトの名無しさん
20/06/19 22:49:12 zEq7EJiO.net
広義では哲学と言えなくもないな
XBD Utility Syntax Guidelines
URLリンク(pubs.opengroup.org)

XBD : Single UNIX Specification's Base Definitions

503:デフォルトの名無しさん
20/06/20 02:57:37 n0lXBS13.net
ガイドラインなら哲学じゃないな

504:デフォルトの名無しさん
20/06/20 11:04:41.29 n5C6ULNh.net
単純馬鹿にはそうなんだろな

505:デフォルトの名無しさん
20/06/20 20:15:36.78 y/L3Z2RW.net
systemdとかいう反UNX哲学の旗頭

506:デフォルトの名無しさん
20/06/21 09:35:40.38 IKNG1Fdo.net
言うほど反UNIXか?
一連の騒動を見ていて,
なんかsystemdの製作者を嫌う一部の人たちが
「UNIX哲学」を錦の御旗にしてsystemdに反発して,
それにUNIXをよく分かってない沢山の人々が
盲目的に加勢してる,っていう印象を受けたけどな。

507:デフォルトの名無しさん
20/06/21 09:42:27.13 IvBo3j6N.net
気持ちは分からんでもないけどね

508:デフォルトの名無しさん
20/06/22 08:36:37.15 sDTlcsla.net
systemdは開発者が問題児だから批判されたって読んだ希ガス
わざわざsvchostを持ち込んだ責任は重いけどそれだけじゃないのよね

509:デフォルトの名無しさん
20/06/22 09:33:16 tLwRlm9z.net
そんなんあったんとググったら
2014-04-03
URLリンク(cpplover.blogspot.com)
なんてな、なるほどな。でも、
2014-09-22
URLリンク(japan.zdnet.com)
とか、Linus御大はちょっとは寛容になったのか?
だが、
2016年10月5日
URLリンク(gihyo.jp)
まだ続いていたのね。そして現在もまだ続いているのかというw

510:デフォルトの名無しさん
20/06/22 09:36:00 tLwRlm9z.net
ああ、注目されているののは、UNIX哲学というより、手前勝手にやってんじゃねえ&品質悪いだろが主だな上記のは

511:デフォルトの名無しさん
20/06/22 21:15:42 83oEFw3E.net
作者が嫌いならそう言えばいいのに
UNIX哲学とかなんとか持ちだすのが卑怯というか嫌らしいなと思った(小並感)

512:デフォルトの名無しさん
20/06/23 09:57:12 giQS7MtY.net
でもその粗末なものを不本意でも導入したってことはそういうことだよね
対抗したのはdebianくらいでしょ

513:デフォルトの名無しさん
20/06/23 13:34:53.18 4ygLxlxX.net
Debianもsystemdなんですが。

514:デフォルトの名無しさん
20/06/23 23:09:30.34 LfK68hWg.net
それもどちらかというと早く取り入れた方じゃんw

515:デフォルトの名無しさん
20/06/24 08:21:39.73 fB1/4/mN.net
POSIXの次のissue (issue 8?) が出るのっていつ,とか分かる?
さっさと$'\n'表記を臆面なく使いたい

516:デフォルトの名無しさん
20/06/24 16:45:25.56 evfa9tXu.net
どうせシェルが対応してないだろ

517:デフォルトの名無しさん
20/06/25 20:11:27 9YSX2wtH.net
指定した変数を復旧可能な形でダンプする方法(ようするにシリアライズ)は
bashとかだとdeclare -p abcとかでできますが
dashで同じような事をする方法はりますか?
setとかだと特定の変数だけはできないと思います。

518:デフォルトの名無しさん
20/06/25 23:23:44.84 gX/RvIRg.net
>>498
復旧っていうのが出力を


519:再度shに読み込ませて代入できる、 っていうことだとすれば、env。 ただし $ VAR='***' と代入していた場合はenvの出力で引用符が外されて 対話環境だとマズいことになる。



520:デフォルトの名無しさん
20/06/25 23:41:04.14 9YSX2wtH.net
>>499
envでどうやればできるんです?

521:デフォルトの名無しさん
20/06/26 08:57:30.48 Sc0VO8uZ.net
>>500
それくらい自分で…とも思うけど
$ env | grep -e '^USER='

522:デフォルトの名無しさん
20/06/26 08:57:35.06 yEClztmT.net
選ばれなかった西村カワイソス
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)

523:デフォルトの名無しさん
20/06/26 09:36:17.92 50iMo9Ym.net
>>501
それじゃだめですね
1. でません
$ abc=123
$ env | grep abc
$
2. 誤爆します
$ export abc='USER=1
USER=2
USER=3
USER=4'
$ env | grep -e '^USER='
USER=name
USER=2
USER=3
USER=4

524:デフォルトの名無しさん
20/06/26 09:39:15.48 50iMo9Ym.net
3. 復旧できません
$ export abc='USER=1
aaa
bbb
ccc'
$ env | grep -e '^USER='
USER=name

525:デフォルトの名無しさん
20/06/26 11:24:38.83 Sc0VO8uZ.net
多機能を望むならBash使っとけば,って思っちゃうw
マジレスするとsedでエスケープとかすりゃいいんじゃないっすかね。
(なんかPOSIXシェルでXMLパーサー実装した!みたいな人思い出した。
「自分のやりたいこと」と「それを実現する環境」が明らかに釣り合ってない)

526:デフォルトの名無しさん
20/06/26 14:58:30.56 di73h+MO.net
sed(とか)使っていいんだったら、
値は ' で囲む、値中の ' は '\'' に変換する
だけでいいような

527:デフォルトの名無しさん
20/06/26 15:05:44.69 50iMo9Ym.net
>>506
例えば、この場合は?
aaa="'abc' 'def'"

528:デフォルトの名無しさん
20/06/26 15:18:09.38 di73h+MO.net
aaa=''\''abc'\'' '\''def'\'''

529:デフォルトの名無しさん
20/06/26 17:26:15.56 50iMo9Ym.net
>>508
シングルクォートなくなってるぞw

530:デフォルトの名無しさん
20/06/26 18:59:02 Sc0VO8uZ.net
ちなみにそれでも
VAR='a
b=c
d'
みたいなのには対処できない。
いや〜果てしないっすね,POSIX原理主義を貫くとw

531:デフォルトの名無しさん
20/06/26 19:38:40.29 SG/+b/+N.net
世の中bashオンリーになってくれれば楽なんだけどね。
dashが使われてる現実がある。現実主義者は辛いよ。

532:デフォルトの名無しさん
20/06/26 20:42:38 Sc0VO8uZ.net
現実にはBashが使える環境が大半だと思われ。
AIXみたいな極一部の環境を想定することを「現実主義」と言うのは間違ってると思うよ。

まあ,多分「現実主義」と本気で考えてる訳じゃなくて,
俺の書き込みにカッとなって「自分の方が現実見てますアピール」をしてるんだろうが。

533:デフォルトの名無しさん
20/06/26 20:47:57 0CWC8I0Q.net
debian/ubuntuの/bin/shがdashなのを知らないの?

534:デフォルトの名無しさん
20/06/26 20:49:25 0CWC8I0Q.net
URLリンク(news.mynavi.jp)

UbuntuとDebianをあわせてLinuxの57.1%なんだが

535:デフォルトの名無しさん
20/06/26 20:52:00 0CWC8I0Q.net
dashという名前がでてるのにAIXを思い浮かべるあたり現実を知らんとしか思えんな
AIXのデフォルトシェルはBourne shellかkshだろうに

536:デフォルトの名無しさん
20/06/26 21:44:27.05 WqCeXtR5.net
>>509
無くなってないだろ

537:デフォルトの名無しさん
20/06/26 22:04:15.47 WqCeXtR5.net
>>510
foo () {
echo "$1='$(eval echo "\"\$$1\"" | sed -e "s/'/'"'\\'"''/g")'"
}
VAR='a
b=c
d'
echo "$VAR"
bar="$(foo VAR)"
echo "$bar"
VAR=''
echo "before: $VAR"
eval "$bar"
echo "after: $VAR"
一応dashで動いているようだけど?対処できないって?

538:デフォルトの名無しさん
20/06/26 22:33:00 WqCeXtR5.net
とりあえず、三つの環境で試してみたが動いているかな
こんな簡単でいいのかというのは拭えないが

しかし、
コード書けないのか書かないのか、
ちゃんと考えず検証もせずに、
自分の頭の中もしくはおま環だけで、
解決にも繋がらないのをよく続けてたな、どっちも
って感じ

539:デフォルトの名無しさん
20/06/26 22:55:36.19 Sc0VO8uZ.net
出、出〜両成敗言奴〜

540:デフォルトの名無しさん
20/06/26 23:06:55.36 WqCeXtR5.net
レスはするがそんなレスしかしないのは、
対処できないってことはないってことでいいいのね

541:デフォルトの名無しさん
20/06/27 09:22:36.01 VhavnPnf.net
最近はpwshが便利でお気に入り
bashは何をやるにもめんどくさくてだめだ
未だに引数の解析をloopとcaseでやるとか原始時代かよ

542:デフォルトの名無しさん
20/06/27 09:40:10.35 gS37C1rZ.net
その程度の問題ならライブラリを作るだけで解決するんだがな

543:デフォルトの名無しさん
20/06/27 22:42:10.04 712NPp+Q.net
getopts知らない可能性が微レ存

544:デフォルトの名無しさん
20/06/27 22:53:58.90 vaH0ijdP.net
getoptsもループだろ

545:デフォルトの名無しさん
20/06/27 23:10:59.70 gS37C1rZ.net
getoptsは文字列操作が苦手なC言語のためのもので
それをそのままシェルスクリプトに移植しても
あまり意味がないんだよな
しかも設計がUnixの歴史の初期の頃のものだから
最近の言語のものに比べて使いやすくもない

546:デフォルトの名無しさん
20/06/28 18:17:34.25 AbPoRZT9.net
rust製のコマンドが流行って来てるね
shft-jis対応が微妙なのが多いけど

547:デフォルトの名無しさん
20/06/29 11:20:40.30 rI2xXdg9.net
今時Shift-JISなんて使ってるとこがおかしいw

548:デフォルトの名無しさん
20/06/29 15:44:22.24 6OaJq9UQ.net
Windowsでbashやpythonのスクリプトを書いてると
表立っては目に見えなくはなってるけど
未だにcp932の呪縛から逃れられない
エラーが出て改めて気付かされる

549:デフォルトの名無しさん
20/06/29 17:28:25.05 KH0T80po.net
WSLでええんちゃうの

550:デフォルトの名無しさん
20/06/29 19:53:16.74 tYVp58Ca.net
cp932を使う必要ないよ

551:デフォルトの名無しさん
20/06/29 19:55:39.65 tYVp58Ca.net
そもそもファイルはUTF-8で書く
各コマンドはWindowsネイティブのUTF-16で出力する
(UTF-16はWSLにわたすとUTF-8に変換される)
とまあUnicodeで完結するわけで
cp932とかいらないし、でてこない。

552:デフォルトの名無しさん
20/06/29 22:49:57.66 P14Kkthl.net
WSLのウリの一つであるLinuxとWindowsのシームレスな運用という点を活かそうと、
WSLからWindowsのプログラム(cp932対応)を呼び出し、応答を受けたりしようとする場合には、
cp932に全く触れないで済む、とは必ずしも言えないでしょう。
これに加えて、python 2だった頃は、もうユニコード地獄とともに、cp932を常に意識しないとならなかったけど、
python 3になって、ずいぶん楽になったわ。
いずれにしても、対応するプログラム次第だな。

553:デフォルトの名無しさん
20/06/29 23:21:10 cNuHuLWV.net
>>532
> WSLからWindowsのプログラム(cp932対応)を呼び出し
なんのことでしょうか?

まずWindowsのコマンドは全てUnicode対応です。
chcp 65001でUTF-8に変更してちゃんと表示されるのがその


554:リ拠です。 またWSLからWindowsのコマンドを呼び出した場合、それはUnicodeで出力されます。 例えば絵文字などcp932にない文字を含んだファイル名があるディレクトリを表示してみてください 問題なく表示されるはずです。 例 WSL上で実行: $ cmd.exe /c dir c:\\dir 同様にそのコマンドを他のプログラムにリダイレクトしてみてください 例 WSL上で実行: $ cmd.exe /c dir c:\\dir | less この場合chcp 65001されたのと同じように英語モードに切り替わりますが ファイル名は文字化けしません。nkfを使えばUTF-8であることが判明します。 例 WSL上で実行: $ cmd.exe /c dir c:\\dir | nkf --guess UTF-8 (CRLF) WSLからWindowsのコマンドを呼び出す際、cp932に触れることはありません。



555:デフォルトの名無しさん
20/06/30 00:47:57 qHUx6lkJ.net
cp932とかshift-jisとか別に対応しなくてもいい、必要ならユーザ側で変換すればいいだけの話でもある
cp932とかshift-jisとか日本でも今更の方が多いのに、日本/日本人じゃないプロダクトで対応を求めるのはまあない話だな

556:デフォルトの名無しさん
20/06/30 00:54:07 3w3RlvW0.net
>>532
>ユニコード地獄
って何??地獄というほどだからすぐに出せるほどのでしょう
まさか、よくある非難批判自説強めるためにだけのことさらのではないだろうから、具体的にどうか

557:デフォルトの名無しさん
20/06/30 13:29:30.53 4tQoD8Fw.net
言いたい事は伝わるけど日本語が不自由すぎる

558:デフォルトの名無しさん
20/06/30 13:45:57.96 ww2Xd+MO.net
結局文字コードに関しての理解が浅いから
Windowsはcp932なんだよ!だからcp932を使うんだよ!
そしてcp932扱おうとすると難しいんだよ!ってなるんだよ
普通にUTF-8を使っていれば、Windows(Unicodeがネイティブの文字コード)とも
Linuxとも相性がいいのに

559:デフォルトの名無しさん
20/06/30 14:08:10.20 rT4NJ8lb.net
テキストの中身はいいとしてファイル名()

560:デフォルトの名無しさん
20/06/30 16:43:12.21 v6RmXu90.net
ファイル名でも同じだな
結局文字コードに関しての理解が浅いから()

561:デフォルトの名無しさん
20/06/30 17:02:50.63 NeVIM/JQ.net
cp932を使ってる環境が今でもある以上、それに対応する必要はあるだろ
自分で管理できる環境しかいじらないのであれば、utf-8にでも統一すればいいが
そうじゃない場合はそのままではどうしようもない
utf-8が当たり前だと思ってるやつは、euc-jpとかも使ったこともないんだろうな
以前はperlなんかのcp932ダメ文字対策にはこれしかなかった

562:デフォルトの名無しさん
20/06/30 17:11:34.24 2vqY+HLu.net
めんどくさいのを知ってるからUTF-8に統一できるのだからそれにしたそれにするって話なのに
未だにcp932だの言ってるのはめんどくさくないんだろ?文句言うなw

563:デフォルトの名無しさん
20/06/30 18:38:38.55 KNAz+qB3.net
めんどくさいけどそれを避けられないという場合もあるという話だろ
巷にはまだまだ古い環境が残ってるんだよ
自分のせいじゃないんだから文句くらい言わせろw

564:デフォルトの名無しさん
20/06/30 19:14:10.54 XR44DBqi.net
チラ裏にでも書いてろって話だな

565:デフォルトの名無しさん
20/06/30 19:24:16.74 nJuhvFVE.net
cp932 を UTF-8 にマイグレーション:めんどくさいからやりたくない
cp932 <> UTF-8 処理中に逐次相互変換:めんどくさいからやりたくない
cp932 <> UTF-8 フロントエンドで相互変換:めんどくさいからやりたくない
自分で対応できることをやりたくないから、誰かがcp932対応しろ
って話ですね

566:デフォルトの名無しさん
20/06/30 20:52:19.85 tmp+8cJm.net
すでにcp932に対応しているので遠慮しておきます

567:デフォルトの名無しさん
20/06/30 21:00:48.27 ww2Xd+MO.net
>>540
> cp932を使ってる環境が今でもある以上
UTF-8に変換して処理が終わったら戻せばいいだけ

568:デフォルトの名無しさん
20/06/30 21:54:26.59 nHUgkpqk.net
それを世の人は「対応」という

569:デフォルトの名無しさん
20/07/01 00:00:33 nsCEyl21.net
元レスのヤツがその対応してないのに対してのだろ
とんちんかんじゃね

570:デフォルトの名無しさん
20/07/01 00:55:56.18 bhKr/oya.net
日本語でおk

571:デフォルトの名無しさん
20/07/01 01:31:07.01 keO9QSLH.net
Windows を使う


572:フは大変なんだな。 …ああ、それが無理だから Linux しか使わなくなったんだった。



573:デフォルトの名無しさん
20/07/01 06:57:53.27 lozEWamw.net
多分なcp932をUTF-8に変換して戻せばいいって聞いた時
間抜けなやつは、コードの中でいちいち変換してるんだよ
func() {
 str_sjis=$1
 str_utf8=$(sjis_to_utf8 "$1")
 ret_utf8=$(foo "$str_utf8")
 ret_sjis=$(utf8_to_sjis "$ret_utf8")
 echo "$ret_sjis"
}
こんな感じでな。コードのあちこちでこのような変換を行ってる。
あー、あほあほ、ばからしすぎる
コマンド呼び出しの前に外部コマンドで変換してしまうという発想がない

574:デフォルトの名無しさん
20/07/01 07:44:48.00 61AWgfbD.net
cp932からutf8は不可逆変換

575:デフォルトの名無しさん
20/07/01 08:54:24.38 lozEWamw.net
>>552
それがどうかしたの?

576:デフォルトの名無しさん
20/07/02 00:24:14.35 oVzUH9JU.net
自己紹介しなくてもいいのにねぇ

577:デフォルトの名無しさん
20/07/02 00:53:42.38 9cYvmHwP.net
テキストエディタを作る時、内部のデータをUnicodeで持つか
あらゆる文字コードでデータが持てるようにするかの違い
あらゆる文字コードに対応するのは大変だから
ファイル読み書き時に変換し内部データはUnicodeでもつのが普通
シェルスクリプトで言えばiconvやnkfなどのフィルタを使って
文字コードを変換すれば、シェルスクリプトでは全てUTF-8として扱うことができる
シェルスクリプト以外の各言語でも同じことができる
なぜ未だにcp932のことを考える必要があるのかわからない

578:デフォルトの名無しさん
20/07/02 00:58:14.59 9cYvmHwP.net
そもそもWindowsはUTF-16がネイティブで
すべてのCLIコマンドはUTF-16で出力するのに
一体誰がcp932を出力するのかわからない
なおWindowsから標準出力にUTF-16で出力したデータは
WSL上のコマンドで受け取ったときには自動的にUTF-8に変換されている
(ファイル読み込み時に勝手にデータが変換されるという意味ではない)

579:デフォルトの名無しさん
20/07/02 04:04:30.63 7rdALa4M.net
>内部データはUnicodeでもつのが普通
厳密にはOS(API)のネイティブな文字コードだな
今時のOSのはUnicodeだから間違ってもいないけど、多分、古いWindowsのはShift-JISなんじゃないかな

580:デフォルトの名無しさん
20/07/02 04:37:48 9cYvmHwP.net
古いWindowsとか適当なことを言うな
Windows 95よりも早く開発していた
Windows NTは最初からUnicodeだ

581:デフォルトの名無しさん
20/07/02 04:57:08.09 mSCtcEnU.net
XPでCygwinでシコシコやってた頃は、
cp932やらeuc-jpやらで大変だったなぁ
対応版が出るまで、utf-8? 何それ美味しいの? 状態で、
まともに使えるように、いろいろおまじないしてたっけ

582:デフォルトの名無しさん
20/07/02 10:38:14.71 6iBChMal.net
>>95
Windows 95よりも早く開発していたなんて嘘言うなよ
内部と表層は違う。Unicodeが表層にもなったのは最近だろ
Windows 95よりも早くとか曖昧なとこで完全な嘘だしな。痴呆で忘れたか?

583:デフォルトの名無しさん
20/07/02 10:39:39.66 6iBChMal.net
>>560
>>59
>>558

584:デフォルトの名無しさん
20/07/02 12:02:46.70 9cYvmHwP.net
>>560
URLリンク(ja.wikipedia.org)
> IBMと共同で開発していたOS/2のバージョン2の次期バージョンをWindows NTとし、
> IBMとは別に製品を開発していくこととなる。最初のバージョンは3.1であり、
> これ以前に発売されていたWindows 3.1と互換性があるため、Windows NTの
> 最初のバージョンも3.0ではなく3.1として発売した。これはWindows3.1と歩調を揃えるという、
> マーケティング上の理由による。
>
> 以下、英語版の発売年を併記する。
>
> Windows NT 3.1(1994


585:年) > > 初期バージョン。コードネームはWNT。デスクトップ シェルとしてWindows 3.1と > 同じユーザインタフェースを採用していた。英語版は1993年7月27日に発売された。



586:デフォルトの名無しさん
20/07/02 12:05:14.83 9cYvmHwP.net
>>560
表層とか曖昧なことを言うなよ
アプリの問題とOSの問題は違う
Windows NTの表層(笑)はUnicodeだ
9x系用アプリの表層が違うだけ

587:デフォルトの名無しさん
20/07/02 13:33:50.59 ACoXsYjy.net
Windows API には システムエンコーディング対応のとUnicode対応のがある
日本語に限っては、システムエンコーディングがUTF-8対応になったのはつい最近、当然それ以前はShift-JIS
てとこかな、ググったとこでは
UTF-8に対応してないのにわざわざUnicodeに対応しようとはしないわな当たり前に
システム内部でUnicode対応していようが、Shift-JIS APIしか「使えない」んだったら内部で対応していようがデベロッパーには見えない部分だし、そんなアプリが普通でもおかしくはないな

588:デフォルトの名無しさん
20/07/02 13:45:58.39 ACoXsYjy.net
>>562
なんの引用かいまいちわからんけど、Windowsが内部的にUnicodeになったのはWindows NTからみたいだけど。普及したというならWindows 2000からか
(それでも内部でUnicodeだろうがShift-JISがデフォのようだけど)
Windows 9x 前(もちろん 3.1も)までは限定的なUnicode文字列操作ライブラリがあったとかかな

589:デフォルトの名無しさん
20/07/02 15:28:28.91 9cYvmHwP.net
>>564
> 日本語に限っては、システムエンコーディングがUTF-8対応になったのはつい最近、当然それ以前はShift-JIS
> てとこかな、ググったとこでは
日本語がおかしい。知らないなら適当なこと書くなよ
> システム内部でUnicode対応していようが、Shift-JIS APIしか「使えない」んだったら
人の問題を持ち出すな。
無能が使えないからってなんなんだ
> (それでも内部でUnicodeだろうがShift-JISがデフォのようだけど)
根拠は?日本語以外の国があるのしらんの?w

590:デフォルトの名無しさん
20/07/02 16:07:07.26 ACoXsYjy.net
Windows UTF-8 ベータ
知らないのはどっちかなとしか思えないw

591:デフォルトの名無しさん
20/07/02 16:13:26.48 ACoXsYjy.net
ああ、
システムエンコーディングがUTF-8対応になったのはつい最近、日本語だとそれ以前はシステムエンコーディングはShift-JIS
だよ。すまんなw

592:デフォルトの名無しさん
20/07/02 21:31:15 9cYvmHwP.net
アホだな。

それはUnicodeに対応してないアプリ用のエンコーディングに
UTF-8が使えるようになったのが最近なだけだろ

システムエンコーディングが9x用アプリのための設定のことだって知らないんだろうな

593:デフォルトの名無しさん
20/07/02 22:29:06.37 SkSFT8E6.net
OSでいくらutf8に対応しようが末尾AのAPI使ったアプリはsjisの入出力前提で書かれてるんだし
対応しようとすれば文字列周りは全部作り直しだよ
VBAやVBScriptとかのWSHも同じ問題を抱えてる
Windowsのutf8完全移行なんて10年後すら怪しい

594:デフォルトの名無しさん
20/07/02 23:58:17.21 9cYvmHwP.net
だからそれはアプリの問題じゃん
Windowsの標準コマンドはUnicode前提(対応)で書かれている。
PowerShell等から利用するUnicode前提
WSLもUnicode(透過的に変換されるUTF-8)
VBAやVBScriptとかのWSHも同じ問題を抱えてるというが
問題があるのはそれとバッチファイルぐらいでしょ。
今は殆ど使われてない

595:デフォルトの名無しさん
20/07/03 10:48:21.18 D1jLBB9V.net
今は殆ど使われてない[要出典]

596:デフォルトの名無しさん
20/07/03 13:31:14.36 adDL+CTN.net
Windowsを使うな(暴論)

597:デフォルトの名無しさん
20/07/03 22:08:43.15 pyXUrnYQ.net
エディタが対応した時点で932とか捨てたわ
変換する必要すらない(更新予定のない)古いメモ以外に残っていない
21世紀も20年目に入ってるというのにまだそんなの使ってる自体遅れいるのか

598:デフォルトの名無しさん
20/07/03 22:26:00 uIgOlo/V.net
俺がcp932を捨てたのいつだっけな?
Windowsになってからlzhを捨ててzipにした。
日本語が含まれる可能性がある個人用のファイル圧縮に
Unicodeを使う7zを使うようになったのは、うーん?2000年頃かなぁ

9x系に見切りをつけて(動かなければソフトの方を諦める)Windows 2000にした頃には
ファイルはどうしても無理な場合を除いてUTF-8を使うようにしていたし

cp932を使っていた時代は、Linuxも


599:EUC-JPだったし大変だったね LinuxでEUC-JPからUTF-8に変わった時には、WindowsもUTF-8を使うようにした



600:デフォルトの名無しさん
20/07/03 23:44:56.51 9C03Lp22.net
文字コードとしてのcp932と
システムロケールとしてのcp932をごっちゃにしてるやつが多すぎる
前者は単なる文字コードだから、個人レベルでどうにでもなる
長いことWindowsでutf-8を使ってると言う場合はこれに当たる
後者は現在のwin10でもバリバリの現役で、utf-8は1803から追加されたものの、未だベータ扱い
一部の古いソフトだと不具合がでるので、そう簡単な話ではない
たとえば、このレスを書くために開いているJane Style

601:デフォルトの名無しさん
20/07/03 23:59:49.05 uIgOlo/V.net
システムロケールはOSではなくてソフトの問題なんだよな
Windows自体はシステムロケールの設定に依存していない
なぜならすべてUnicode(UTF-16)で処理してるから
(もちろん互換性のための処理として一部例外はあるだろうが)

602:デフォルトの名無しさん
20/07/04 00:30:48.50 1qYUKBUR.net
ソフト側でロケールを理解できなかったらダメだからねぇ
そういえば、Linuxもutf-8への移行期(Fedora Core 1が最初だっけ?)に、
それまでのRed Hat 9で問題のなかったeuc-jp前提のソフトがダメダメだった
まぁシェルスクリプトは問題なかったはず

603:デフォルトの名無しさん
20/07/04 05:09:47 ve9MtcL4.net
Windowsの場合Unicodeで作ってれば
システムロケールなんて関係ないよ

システムロケールを理解する必要があるのは
Unicode(UTF-16)非対応アプリの話

システムロケールと使用する言語(表示する言語)は別だからね

604:デフォルトの名無しさん
20/07/05 00:52:27.71 m0wz7oid.net
メモ帳の保存形式にあるUnicodeとかいう多重トラップ嫌い

605:デフォルトの名無しさん
20/07/13 19:16:41.40 Xa4f7njE.net
Austinで大規模なファイル更新があって,
お,何か重要な局面を迎えたのかな?と期待して報告書を読んだら,
全文書に存在する"POSIX.1-201x"を"POSIX.1-202x"に書き換える作業だったていうオチ。

606:デフォルトの名無しさん
20/07/15 10:35:51.78 GO+Zaox3.net
組み込み系のash環境です。
以下のコードは、外部テキストファイル(shift-jis)をwhileで1行ずつ読み込んで、
シリアルポートの/dev/ttyUSB0へ1行の内容をそのまま送信する処理の一部です。
ファイルの中に日本語の0x5cのバックスラッシュがあると、文字化けしてしまいます。
0x5c混在のサンプルとして「表示」の漢字が正常に送れるかの試験コードを作りました。
以下のスクリプトの文字コードはshiftJISで保存し実行しました。
text=ダメ文字表示テスト
filtered_text=`echo $text | sed -e 's/\\/\\\\/g'`
echo -e "ORG text $text"
echo -e "filtered_text $filtered_text"
echo -e "$filtered_text" > /dev/ttyUSB0
結果
sed: unmatched '/'
ORG text ダメ文字侮ヲテスト
filtered_text
やりたいこと
シェルスクリプト内の変数に格納して、/dev/ttyUSB0へ「ダメ文字表示テスト」とそのまま送信したいです。
1行ずつ送信する理由は、たまに行間で制御コードを混ぜる必要があるためです。
sedの行が肝になると思い、作例を1日探しましたが、探し方が下手で見つけられませんでした。
sed以外のコマンドでも使えるコマンドがあれば何でもいいです。
nkfは無しでした。iconvはありましたがShiftjisのコードが含まれていませんでした。
そもそも最終的に送信するデータがshiftjisなので、これらは関係ないと気づきました。
どのような書き方でできるか、お知恵をいただけないでしょうか。

607:デフォルトの名無しさん
20/07/15 11:54:50.30 IqfNcqeZ.net
ダメ文字は、数十年前


608:の話w



609:デフォルトの名無しさん
20/07/15 12:02:36.35 gwK3CNky.net
>>582
> 以下のスクリプトの文字コードはshiftJISで保存し実行しました。
それは絶対ダメ
ASCIIと互換性がない文字コードには対応してないのが普通

610:デフォルトの名無しさん
20/07/15 12:03:29.33 gwK3CNky.net
>>582
> 以下のコードは、外部テキストファイル(shift-jis)をwhileで1行ずつ読み込んで、
同様に対応してないのが普通

611:デフォルトの名無しさん
20/07/15 12:04:14.63 gwK3CNky.net
いい加減文字コードはUTF-8に一括変換してから
処理して戻すってことを覚えたほうがいい

612:デフォルトの名無しさん
20/07/15 12:07:30 gwK3CNky.net
>>582
echoは使うなprintfを使え

613:デフォルトの名無しさん
20/07/15 12:09:01 gwK3CNky.net
> 1行ずつ送信する理由は、たまに行間で制御コードを混ぜる必要があるためです。
意味がわからん。制御コード1文字が二行に分かれたりでもするんか?

614:デフォルトの名無しさん
20/07/15 13:17:28.61 4eO2mC8f.net
>>582
とりあえずシングルクォートは要るんじゃないの?
text='ダメ文字表示テスト'

615:デフォルトの名無しさん
20/07/17 17:54:07.38 pKRyHByg.net
>>582
>sed: unmatched '/'
SJIS云々の前にsedのコマンドがちゃんと認識されてないじゃん。
とりあえず、バックスラッシュの数を変えたり``じゃなくて$()を使ってみたらどう?

616:デフォルトの名無しさん
20/07/18 06:32:49.36 belUdedc.net
ひょっとしてSJIS完全対応のテキストエディタってLinuxには存在しない?
昔mousepadで盛大に化けた覚えが

617:デフォルトの名無しさん
20/07/18 07:03:52.09 6UJBCs7F.net
Emacs

618:デフォルトの名無しさん
20/07/18 10:26:12 PyiwbgQS.net
Vim

619:デフォルトの名無しさん
20/07/18 10:38:54.42 W7WHirLG.net
vscode

620:デフォルトの名無しさん
20/07/18 11:38:05.10 PyiwbgQS.net
バカな投稿をすると釣られた人間が正しい知識を教えてくれるメソッド
よかったな,>>591

621:デフォルトの名無しさん
20/07/18 11:44:04 fwbEJCvA.net
つまりvscodeが正しいと?

622:デフォルトの名無しさん
20/07/18 12:39:31.97 PyiwbgQS.net
俺のスレ読んでないの?w

623:デフォルトの名無しさん
20/07/18 13:28:14.79 fwbEJCvA.net
お前のレス?釣られた人間が正しい知識を教えてくれるんでしょう?
それ以外になんかあるの?

624:デフォルトの名無しさん
20/07/18 13:48:08.58 W7WHirLG.net
エディタも使いこなせないならwinのメモ帳でも使いなよ。sjis対応だよ

625:デフォルトの名無しさん
20/07/19 08:53:42.63 b8gde26L.net
お前いつも壁と話してんな

626:デフォルトの名無しさん
20/07/19 10:23:03.44 HNDAT4gV.net
壁だと思ってるのはお前だけで、実は人間なんだぜ(ホラー風)

627:デフォルトの名無しさん
20/07/19 11:15:59.84 W3hSYpRn.net
ぬりかべ「かべっ!?」

628:デフォルトの名無しさん
20/07/27 19:01:06.79 prTniRCc.net
manコマンドはPOSIXに取り入れられそうなのに
その表示に関わるroffコマンドは影も形もないって、
なんつーか意味あんのかそれって思う。

629:デフォルトの名無しさん
20/07/27 20:34:03 Sw4i8xv6.net
>>603
roff 使わなくても cat1 とか cat8 に成形済みテキスト置いておくだけで man
は動くんだから、別に roff なくても良いといえばいいとか、そんな理屈なのかも。

630:デフォルトの名無しさん
20/07/27 20:48:14.37 9y96d1KX.net
manをPOSIXに取り入れるぐらいなら
HTMLビューワーをPOSIXに取り入れたほうが良い
JavaScriptとCSSに対応させる必要はないからさ

631:デフォルトの名無しさん
20/07/27 20:50:03.70 9y96d1KX.net
curlをPOSIXに入れればいいのに
フル機能じゃなくていいけどREST API叩けるぐらい

632:デフォルトの名無しさん
20/07/27 21:12:03.12 vTLRE8Va.net
>>603
おお、するどい。
でもmanが入ってないというのはどう言う意味? POSIXとSUSの意味の違いにこだわる?
で実際manの記述を見ると文章の整形とかそれをどう作るとかは書いてないので、
そういうレベルのものは規定しないという態度なのかも。
あと事実上GNU roffが標準だと思うが、さすがにそれを規格には入れられないのかも。
かといって今更大昔のroffに制限するのもなあと。
しかし最近GNUで検索するとKingの方がヒットしやすくてうざいw

633:デフォルトの名無しさん
20/07/27 21:16:04.4


634:5 ID:vTLRE8Va.net



635:デフォルトの名無しさん
20/07/28 08:42:48.22 UlETHBDV.net
こんなのか?
URLリンク(www.e-hon.ne.jp)
まだ役に立ってるよ。俺が持ってるのは 20.3 だけど。

636:デフォルトの名無しさん
20/07/28 13:13:59.11 R16GmJU5.net
質問。
次のような行からいずれかのvalueをきれいに削除するにはどうすれば?
name=value0,value1,value2,value3
たとえば次のコマンドだと、value1を削除できるものの、先頭か末尾か連続かのカンマが残ってしまう。。。
sed 's/^(name=.*)value1(.*)$/¥1¥2/'
残ったカンマを後で処理したらいいんだけど、そもそも一発でうまくやることができるんでは?という気がどうしても。

637:デフォルトの名無しさん
20/07/28 13:23:54.46 Mb4DOiRz.net
^(name=.*)bvalue1,?(.*)$
こうかな

638:デフォルトの名無しさん
20/07/28 13:24:17.04 Mb4DOiRz.net
文字化けてるとこは円記号な

639:デフォルトの名無しさん
20/07/28 13:53:56.25 DVrEteyf.net
King Gnu?
どっかで聞いたことあるようなないような▪▪▪

640:デフォルトの名無しさん
20/07/28 14:07:36.32 R16GmJU5.net
>>611
value3の場合、末尾にカンマが残るよね?
また、value0なら先頭に残る。
どれでも一発できれいに削除できないかな?

641:デフォルトの名無しさん
20/07/28 14:08:46.03 3p32kQjL.net
残らないが?

642:デフォルトの名無しさん
20/07/28 14:25:35.27 R16GmJU5.net
残るが。
value3直前のカンマが¥1に含まれるので。

643:デフォルトの名無しさん
20/07/28 23:58:59.24 2KWkEgO3.net
>>610
>name=value0,value1,value2,value3
頭を柔らかくして、
最初に、この末尾に、カンマを追加すれば、処理しやすい形式になる
name=value0,value1,value2,value3,

644:デフォルトの名無しさん
20/07/29 00:10:05.86 bLm2KFbe.net
sed縛りなの?
後方参照する必要ないんじゃない?
value[0-2] については冗長だけど、以下の形式なら全部同じようにできるかと。
'?'の正規表現って、sedだとGNU sed とかだとつかえるのかな?
'?'はウチでは使えない。
echo 'name=value0,value1,value2,value3' | sed -e 's/value0,*//' -e 's/,$//'
echo 'name=value0,value1,value2,value3' | sed -e 's/value1,*//' -e 's/,$//'
echo 'name=value0,value1,value2,value3' | sed -e 's/value2,*//' -e 's/,$//'
echo 'name=value0,value1,value2,value3' | sed -e 's/value3,*//' -e 's/,$//'

645:デフォルトの名無しさん
20/07/29 03:25:12 ZD2Ud5DP.net
>>617
Perlとかならそうするが、sedだとなかなか?
sedはあんまり使わないので、そうしたくてもよくわからない。。。

>>618
sed縛りではないけど、Linux最小インストールでも対応したいので、sedくらいしか?
ほかに使えるならそれも可。

後方参照してるのは、「name=」で始まる行だけに限定したいから。
それ以外の行はそのままで。

「?」が使えない正規表現があるの?
POSIXに含まれてなかったっけ?

ちなみに現在はこうしてたっけかな?
細かいところはちょっと違うかも。
sed -r 's/^(name=.*)value1,?(.*)$/¥1¥2/;s/^(name=.*),+$/¥1/' -i file.txt

なんかくどくて、もっとさっぱり書けるやろと。。。

646:デフォルトの名無しさん
20/07/29 05:18:27.85 W2ZwK0DF.net
Ruby で作った
text = <<"EOT"
a
name=value0,value1,value2,value3
x
EOT
word = "value2,"
text.each_line do | line | # 1行ずつ処理する
# 先頭が、name= 以外は処理しない
next unless line.start_with? "name="
line.chomp! # 末尾の改行を削除する
line += "," # 処理しやすいように一旦、末尾にカンマを付ける
line.slice! word # 取り除く
line.slice! -1 # 末尾のカンマを取り除く
puts line #=> name=value0,value1,value3
end

647:デフォルトの名無しさん
20/07/29 06:28:49.20 Fq72t


648:fsf.net



649:デフォルトの名無しさん
20/07/29 07:17:15.52 SoSaYlfN.net
for((aa=-1;aa<4;aa++)); do echo name=value0,value1,value2,value3 |sed -e"/^name=/{s/$/,/; s/value${aa},//; s/,$//;}"; done

650:618
20/07/29 11:42:17.47 bLm2KFbe.net
>>622
完全に同意。個人的には {} 使わないで -e で並べたい派だけど。
*を使うより厳密に置換できてよいと思う。
619には以下の書き方のほうが分かりやすそう。
sed -e '/^name=/{s/$/,/; s/value0,//; s/,$//;}'
>>619
sedの正規表現では '?' 使えないはず。
GNU sed でもオプション使わないと通らないのが確認できた。
できれば -E を使ってほしいかな。個人的には。
-E, -r, --regexp-extended
use extended regular expressions in the script
(for portability use POSIX -E).

651:デフォルトの名無しさん
20/07/29 11:58:07 10XNhQ52.net
そうやって、外部コマンドをあれこれ駆使して
どうにかして簡単に書ける方法はないか?に
無駄な時間使ってるのを見るとアホやなぁって思う
一般的なやり方でできないなら諦めろよ
そのコマンドを使うのが間違ってるんだ

652:デフォルトの名無しさん
20/07/29 12:32:30.11 ZD2Ud5DP.net
>>622
なるほど。
sコマンドで全行置換することしか頭になかった。。。
パターンマッチで行を特定してから、複数の置換を{}でまとめて行えばいいのか。
なんかsedの要領がわかった気がするぞ。
どうもありがとう。
>>620
Rubyなら、split()とjoin()を使ったらもっとさっぱりにできそう。

653:デフォルトの名無しさん
20/07/29 12:44:55.15 ZD2Ud5DP.net
>>623
いや、>>622でちゃんとわかったで?
# ちょっとかんがえたけど。
正規表現の「?」は確認するとたしかにダメだった。
-Eは、「¥bvalue」としたい都合でつけてたから、あんまり意識してなかった。
と思ったら、こっちは-Eがなくてもよかったのか。
なんかもうメチャクチャだなー。w

654:デフォルトの名無しさん
20/07/29 13:19:38.86 E/WNSRes.net
データがカンマを含む場合はどうしますか?
name1=v0,"v,,1",v2,,,vvv,unko,
name2=,sss,"hdj,du,n",,ss,,,,kkkk

655:デフォルトの名無しさん
20/07/29 15:37:47.77 iTLEUVw7.net
特定の行で区切った塊ごとで処理したいんだけどいい方法ない?
例えばこんなのだったら====で区切って
abc
def
==== 1
ghi
jkl
==== 2
mno
pqr

abc〜def、ghi〜jkl、mno〜pqrという3つの塊をそれぞれ処理したい。
それと ghi〜jklという塊を処理している時は1ですよ。という数字も知りたい
(最初の塊の時は数字なし)

656:デフォルトの名無しさん
20/07/30 06:16:08.96 ixil7w/z.net
>>628
cat |sed -ne "/^===/! {H;}; $ b ll; /^=/ {:ll; s/=//g; x; s/\n/ /g; p;}" << EOL
abc
def
==== 1
ghi
jkl
==== 2
mno
pqr
EOL
abc def
1 ghi jkl
2 mno pqr

657:デフォルトの名無しさん
20/07/30 06:42:42.05 oWxKF5YB.net
>>629
条件を忘れましたが、画面に出力するのではなく
任意の処理をしたいのです。
つまり
foo() {
# $1 = 番号
# $2 = 塊
}
のようなことがしたいのです。

658:デフォルトの名無しさん
20/07/30 06:43:43.55 oWxKF5YB.net
あと塊から改行を取り除いてはいけません

659:デフォルトの名無しさん
20/07/30 14:54:43 Ws4Sjpc9.net
$!をリセットす


660:る方法はないですかね? 空とかunsetとか0とか



661:デフォルトの名無しさん
20/07/30 15:15:25.11 l+t/gnGC.net
Perl 使うと楽だが、シェルスクリプトで、か・・・

662:デフォルトの名無しさん
20/07/31 00:34:30.45 h2BvMEZJ.net
Ruby なら、
def f( num, line )
puts num, line
end
# num は、inject の蓄積変数。0 は初期値
File.foreach( "input.txt" ).inject( 0 ) do |num, line|
if line.start_with? "==== " # 先頭が、これなら
line.chomp! # 末尾の改行を削除する
num = line[ 5..-1 ].to_i # 数字の部分を取り出して、整数にする
next num
end
f( num, line )
num
end
出力
0
abc
0
def
1
ghi
1
jkl
2
mno
2
pqr

663:デフォルトの名無しさん
20/07/31 01:26:11.97 1vLgXRtq.net
>>630
Bashなら、プロセス置換(process substitution)でできるのでは。
<(echo;最初のデリミタ行までを抽出するコマンドライン)
<(echo 1;最初から次のデリミタ行までを抽出するコマンドライン)
<(echo 2;最後のデリミタ行からを抽出するコマンドライン)
としたら、先頭行が番号、それ以降がテキスト行として読み込める。
個人的には、さすがここまでのレベルならPerlとかでやったほうが。

664:デフォルトの名無しさん
20/07/31 19:26:43.51 qTuk7lt4.net
bashの#!でのオプションについて質問。
先頭行を次のようにすると、「invalid option name」エラーになります。
#!/usr/bin/bash -o pipefail
...
しかし、コマンドラインに同じように書くとエラーになりません。
/usr/bin/bash -o pipefail -c '...'
どうして?
-eならどっちも問題ないので、#!行のオプションの解釈になにか秘密があるんだろうけど。

665:デフォルトの名無しさん
20/07/31 20:01:20.64 j/9/9lyu.net
>>636
MacOSやFreeBSDだと上手くいく。
原因はLinuxのexecl()関数が
「/usr/bin/bash」と「-o pipefail」という
二つの引数を実行しているせい。
とうぜん「o pipefail」というオプションはないので,怒られる。

666:デフォルトの名無しさん
20/07/31 20:03:04.24 j/9/9lyu.net
さらに言うと,
シバンはPOSIXが「実装ごとに挙動がバラバラなんで俺はこの動作を規定しません」
って公言するくらい,各種OSごとに扱われかたが違う。
今調べられないけど,古いAIXとかだと
「!/usr/bin/bash -o pipefail」とかいうコマンドを探しにいってエラー吐いてた記憶がある。

667:デフォルトの名無しさん
20/07/31 20:39:05.80 k/mzlDiC.net
>>636
/usr/bin/bash -o pipefail ではなく
/usr/bin/bash "-o pipefail" を実行している
まあ素直に
#!/bin/bash
set -o pipefail
って書けってことだな

668:デフォルトの名無しさん
20/07/31 21:40:13 j/9/9lyu.net
もう書いたんだが…

669:デフォルトの名無しさん
20/07/31 21:44:42 qTuk7lt4.net
>>637
>>639
どうもありがとう。
要するにLinuxの不具合みたいなもんだけど、しかし「仕様」ってことか。。。

AIXかは知らないけど、シバンのトラブルはたしかに昔、Perlのドキュメントかなにかで見た気もする。
今でもあるとは。

ちなみに最終的にはこうしといた。
#!/usr/bin/bash -euC
set -o pipefail
...

670:デフォルトの名無しさん
20/07/31 21:56:20.95 k/mzlDiC.net
/usr/bin/bashにbashがあるとは限らない
というか普通無い

671:デフォルトの名無しさん
20/07/31 22:30:39.13 j/9/9lyu.net
>>642
Bashの位置に依存しない為には
#!/usr/bin/env bash
↑こうする。
しかし,envが/usr/bin/envにあるかどうかも分からない(以後無限ループ)

672:デフォルトの名無しさん
20/07/31 22:35:57.38 h2BvMEZJ.net
普通は、/bin/bash
じゃないの?

673:デフォルトの名無しさん
20/07/31 22:55:43.76 qTuk7lt4.net
>>642
ないのは見たことがない。
たとえばどんな環境?
>>644
HFSかRHELのドキュメントかなにかで、/binはシングルユーザー用、/usr/binはマルチユーザー用となってたような。
さらに環境によっては/bin→


674:/usr/binのシンボリックリンクでさえあるようなので、わりきって区別せずに/usr/binだけを使うことに決めた。



675:デフォルトの名無しさん
20/07/31 23:03:07.55 w9lTjcUH.net
$ lsb_release -d
Description: Ubuntu 20.04.1 LTS
$ ls -1 /bin/bash
/bin/bash
$ ls -1 /usr/bin/bash
ls: cannot access '/usr/bin/bash': No such file or directory

676:デフォルトの名無しさん
20/07/31 23:31:35.93 BwwodwaD.net
>>645
Linuxの場合/usr/binにbashがあるのは/bin -> /usr/binになっている環境ぐらい。それ以外はほぼ間違いなく/binにある。元々シングルユーザーモード用の/binになかったら、シングルユーザーモードでシェルが使えないでしょ。
最近は/binと/usr/binを統合する動きが進んでいるから将来はどっちでも良くなるかもしれないし、あるいは/binがなくなるかもしれないけど、今はまだ従来の環境も普通にあるから/bin/bashがいい。その為にシムリンクを張っているわけなので。
UbuntuやDebianは、今インストールすると統合されるけど、従来の環境からアップデートした場合は統合されない。
あとGentooとかは今クリーンインストールしても統合されない。

677:デフォルトの名無しさん
20/08/01 01:21:21.09 6XTg5Iao.net
>>647
シングルユーザー環境はまったく想定外なので。。。
ファイルパスをあわせても、実際の具体的な環境は把握できてないし、どうせ動作確認もしないから、きっぱりわりきることにしたのだ。
binの統合の話は、RHEL8のドキュメントで見た気がするけど、だったらもうとっととのっとこう、と思ったのもある。
うちのメインはCentOSだし、そうなってない環境を使うことになったら自分でシンボリックリンクを追加したらええんやろ、ということで。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

519日前に更新/283 KB
担当:undef