【Bash】Windows Subsystem for Linux【WSL】8

■ このスレッドは過去ログ倉庫に格納されています
2020/05/29(金) 17:58:21.78ID:N31NEDSz
ついにWSL2が登場したぜー。こりゃ完全にLinuxだ。ヒャッハー!WSL最高!開発にLinuxは使わねぇー。Windowsで開発してLinuxは動かすだけや!

WSL2アーキテクチャ
https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html

WSL 2では、仮想マシン環境が起動し、bashがコマンドを受け付けるまで2秒程度という速度で起動できる。
このため、コマンドプロンプトなどからwsl.exeなどを使ってbashコマンドを処理する時間は、
現在のWSL 1とほとんど変わらない。また、本物のLinux実行環境であるため、
これまで正しく動作できなかったアプリケーション、例えばコンテナシステム(Dockerなど)や
ユーザーファイルシステム(FUSEなど)も動作させることができる。その上で、現在のWSL 1と同等の機能と使い勝手を実現するという。

WSL 2はWSL 1を置き換えずに併存する
 WSL 2が登場したからといって、WSL 1は廃止になるわけではなく、引き続き利用可能である。

ファイル共有プロトコル「9P」でWSL 1との互換性を確保
 このように、WSL 2とWin32環境の間のファイル共有は、どちらも9Pを使うことになる。
 また、WSLからWin32プログラムを起動する「Win32相互運用性」では、最初にWSL側で、
実行ファイルを判別する必要がある。具体的には、実行ファイル先頭のマジックナンバー
(Win32ではMZ)を見て、LinuxのELF64か、Win32の実行ファイルなのかを判断する。

【Bash】Windows Subsystem for Linux【WSL】7
https://mao.5ch.net/test/read.cgi/linux/1579395785/
2020/07/07(火) 20:36:13.77ID:re05twJJ
>>225
\ls
2020/07/07(火) 20:40:20.05ID:JVYy2LEm
ctags
2020/07/07(火) 20:41:16.60ID:re05twJJ
>>236
emacs
2020/07/07(火) 22:43:59.55ID:2jBYURUv
>>236
究極的にはWindowsでLinuxと同じ環境ができてしまったら
WSLが必要ないのは当たり前

問題は同じ環境を作る手間
例えばPythonを複数のバージョンインストールして
切り替えたいと思ったらどうするかね?

そういう仕組みを作れば出来る。
その仕組みを作るまでが大変。
WSLは既存のLinuxの仕組みをそのまま使える
2020/07/07(火) 22:45:11.48ID:vKQ2n6hj
てすと
2020/07/07(火) 22:47:02.63ID:8+syWFqb
>>236
僕もemacs

あと、clojureでの開発・キーボードのファームウェアのビルド
pythonの開発も何かとlinuxの方がやりやすかったり
2020/07/08(水) 07:27:50.65ID:jsOqEhM+
>>236
w3m, vim, less, sed, awk, zip, translate-shell, html2text, wget, zsh, tmux, ssh, gsl, gmp, gprof, make, GNU R, Julia, GNU coreutils
2020/07/08(水) 07:30:16.74ID:CBdq2r1b
>>234
わざわざそこまでするなら別のターミナル使えばいいのに
245login:Penguin
垢版 |
2020/07/08(水) 08:53:56.96ID:DJr4ISUL
日本語辞書mecab-ipadic-neologdをMecab用から検索エンジンlucene用に変換するのにWSLを使ってる。
https://github.com/neologd/mecab-ipadic-neologd
2020/07/08(水) 10:48:36.58ID:caZYZiep
おれはlynxをファイルエクスプローラとして使いファイルを書いたり変更したりしてる
lynxにemacsを設定してるから使い易い
2020/07/08(水) 13:12:22.34ID:SDDjbsTE
>>236
漏れは、自分のPC 内のWindows 10, WSL, Ubuntu 18.04 で、
VSCode の拡張機能、Remote WSL を使って、
Linux側に、プロジェクトを作っている

Windows側からのブラウザアクセスは、
VSCodeの拡張機能・open in browser ではローカルファイルアクセスとなるので制限されるが、
VSCodeの拡張機能・Live Server では、サーバーを立ててのアクセスとなるので制限されない

Linux側には、日本人が作った、バージョンマネージャーのanyenv で、rbenv, nodenv を使って、
ruby 2.6.6, node 12.16.2 を入れた

yarn は、Windows側に入れて、WSL から、拡張子なしのyarn コマンドを呼べる。
これは、#!/bin/sh で始まるシェルスクリプト

anyenv は多言語向きで、rbenv, nodenv, pyenv, phpenv などを同じ使い方で、統一的に扱える。
同様のツールに、asdf もある
2020/07/08(水) 14:12:08.29ID:/xPQ8brp
>>225
WindowsストアからWindowsターミナルをインストールしてWSL使うといいよ
2020/07/09(木) 04:10:02.79ID:BKjg1Ggo
>>236だけど遅くなったサンクス
個人的には.batを完全にシェルスクリプトで代替できるようになったら楽なんだが無理なのかな
バッチファイルは書き辛い
2020/07/09(木) 07:04:16.77ID:sqQbyxkS
>>249
普通にできると思うが?
2020/07/09(木) 09:08:55.63ID:IBvWLz/0
>>249
簡単に出来るじゃん
252login:Penguin
垢版 |
2020/07/09(木) 11:51:46.30ID:VUYm/kqB
簡単ではないでしょ。
バッチファイルをシェルスクリプトに置き換えるプログラミング技術が必要になる。
バッチとシェルでは引数展開の仕様やシングルクォート・ダブルクォートの解釈も違う。
253login:Penguin
垢版 |
2020/07/09(木) 11:57:09.19ID:VUYm/kqB
bashとzshでさえ引数展開で違うところがあって困ることがある。
シェルスクリプトで頑張るをあきらめてPython使うのが無難だとは思う。
PerlもGit for Windowsに標準で付属されているので悪くない選択肢だけど、
プログラミング言語初心者に保守してもらうのを想定するならPythonかねぇ。
2020/07/09(木) 12:17:15.21ID:57QfF9jh
シェルスクリプトはshで動作するコマンドのみで書くべき、というのは大前提だが
Linuxが蔓延して、shの実体なんてどうせbashなんだからスクリプトなんてもうbash基準でいいじゃん…てなってしまったのが現実ではある
…が、zsh依存とか自前でゴチャゴチャ書くだけなら勝手にすればいいが、外に出したら叩かれるわ。悩む要素ないだろ
2020/07/09(木) 12:31:16.90ID:sqQbyxkS
>>252
シェルスクリプトは引数展開の仕様がバッチファイルよりもわかりやすい

バッチファイルで空白が入るパスを扱おうと思ったら
とんでもないコードが必要になる

>>253
Pythonに限らないがシェルスクリプト以外だと
コマンドの入力を受け取るのが大変
シェルスクリプトだとプロセスを複製して
パイプの入力と出力を並列で動かすことが出来るが
Pythonなどでは難しい

>>254
> Linuxが蔓延して、shの実体なんてどうせbashなんだから
UbuntuとDebianでLinuxのシェアの半分以上を締めてる
つまりshの実態はbashではない
256login:Penguin
垢版 |
2020/07/09(木) 12:49:35.14ID:M1UcQIHC
釣り大会でもやってんのか
2020/07/09(木) 12:51:18.49ID:HI45RHdB
先生、獲物が絶滅危惧種のようです
2020/07/09(木) 13:04:15.97ID:Za/n0UAl
ここでいうshは、Bourne Shellのことなんだろ。
bashはオープンソースな上位互換シェル
2020/07/09(木) 13:11:53.18ID:VUYm/kqB
釣りなら fish でしょ。
2020/07/09(木) 13:14:35.13ID:0y13rq6p
>>259
うまいねえ〜
2020/07/09(木) 13:21:36.52ID:Za/n0UAl
fish とは上手いけど、本当は dash だろ。
2020/07/09(木) 13:22:21.12ID:y78RNX7h
長いことzsh使ってきたけどfishの素晴らしさを知って完全に乗り換えたわ。
bashはスクリプト用にしか使わない。
2020/07/09(木) 13:48:52.67ID:6K8YgOI6
dashを知らない人がいるのかw
今どき/bin/shがbashって頭わいとんのかw
2020/07/09(木) 13:49:36.59ID:6K8YgOI6
>>258
Bourne Shellなんてもう生き残ってないよ
Solaris8?ぐらいが最後やろ
265login:Penguin
垢版 |
2020/07/09(木) 14:18:05.47ID:FBsc4kM4
dash dash dash
fish and bash
266login:Penguin
垢版 |
2020/07/09(木) 14:18:44.15ID:FBsc4kM4
そんときーおーれがー
Super Heroさ
2020/07/09(木) 14:19:19.60ID:6K8YgOI6
略してSH
H ero
268login:Penguin
垢版 |
2020/07/09(木) 15:02:10.10ID:FBsc4kM4
H x EROS
2020/07/09(木) 17:46:33.54ID:y78RNX7h
オープニングの最後に出てくるドクロみてえな奇怪な物体にいつもビビってたわ
2020/07/10(金) 00:21:32.27ID:HRVLTHUg
Linuxが蔓延して、shの実体はPOSIX準拠に近いdashになってしまったな
bashこれからどうなるの?
2020/07/10(金) 01:50:07.40ID:4LyImNtn
>>255
subprocess使え
シェルスクリプトに比べれば面倒だけど難しいと言う程ではない
2020/07/10(金) 03:23:43.67ID:NmUqS/NF
>>269
俺もミイラの頭蓋骨だと思ってたw
2020/07/10(金) 07:01:21.17ID:2zlh8yTt
シェルスクリプトの代わりは、可読性が高い、Ruby
2020/07/10(金) 08:54:29.50ID:3qY5cuD2
>>271
難しいかどうかの話はしてないよ

シェルスクリプトには「得意なこと」があって
その「得意なこと」は他の言語よりもシンプルに書ける
という事実があるってことだよ

シェルスクリプトは低機能な言語じゃなくて
特定の用途に特化した言語だってこと
その特定の用途を他の言語でやると面倒になる

だからシェルスクリプトの代わりになる言語なんて無いよ
2020/07/10(金) 15:33:12.81ID:IfTnLADh
腰を据えてやりたいときは、今はほとんどpythonだけど、
ちょっとしたことをしたいときに、いちいちモジュールのインポートをしなければならないのは面倒くさい
普段使ってるコマンドをそのまま呼び出せるのは、シェルで解釈する系のスクリプト(バッチファイル含む)のいいところ
ワンライナーの簡単なperlは、呼び出されるコマンドの一つになってる

まぁ、おそらくこのスレの住人はだいたい同じように考えてるとは思うけど
276login:Penguin
垢版 |
2020/07/10(金) 15:52:46.98ID:juHBeHXl
>>275
同意。
適当にシェルスクリプトで作って、シェルスクリプトだと面倒な所はperlとかで。パフォーマンスとか考える必要がない場合なら十分だと思ってる。
2020/07/10(金) 16:26:39.41ID:+mRN7Lhh
バイナリー扱うんじゃなければ、awkで十分
2020/07/10(金) 16:33:46.57ID:TH1a5vMX
シェルスクリプトでしのごうとする癖を改めて、最初からPython,Perl,Rubyで書く習慣をつけたほうがいい。
2020/07/10(金) 17:46:23.11ID:MFJxS89C
>>278
何で?
280login:Penguin
垢版 |
2020/07/10(金) 17:55:31.86ID:TH1a5vMX
>>279
シェルスクリプトよりも機能追加しやすい。
シェルスクリプトよりもコンパイル言語(C、Java、C#等)に移植しやすい。
2020/07/10(金) 18:05:32.05ID:+mRN7Lhh
WSH
2020/07/10(金) 18:29:09.52ID:/zgyc019
そんなことするなら、GoとかRustの方がいいんじゃね?
2020/07/10(金) 18:47:19.69ID:3qY5cuD2
>>278
質問に答えよ

シェルスクリプトからPython,Perl,Rubyへ移植するのは簡単か否か


簡単ならシェルスクリプトで書けばいいし
難しいならなんでそんな難しいことするんだよって話になる
2020/07/10(金) 19:15:17.17ID:nsbhQHFP
>>281
JScriptで書いたものがNode.jsでそのまま(ないし少しの修正)動かせるなら、
WSHを使うのも吝かではない
2020/07/10(金) 19:32:29.58ID:MFJxS89C
シェルスクリプトは機能追加しにくいってのは意味不明だけど、何を使って実装するかは、対象によって変えるのが普通で、シェルで作った物をコンパイル言語で書き換えることになったりしないよ
2020/07/10(金) 22:38:51.18ID:Vn3GUL1J
>>280
先人の知恵を使う方が速いし楽だ。先ずはcoreutilsとsed,awkで。それでできなかったら、pythonでもjuliaでも好きなの使えばよろし
2020/07/11(土) 01:11:43.13ID:CJsJjspQ
シェルスクリプトの複雑怪奇なワンライナーとかじゃなくて
2〜3個コマンドつなげただけの単純なワンライナーでも
それを他の言語にするとバグあるんじゃねーかこれ?レベルの
テストが必要なコードになるからね

シェルスクリプトで書くと後で他の言語に書き直したくなるっていうのは
そもそも最初にシェルスクリプトを選んだのが間違いってだけ
2020/07/11(土) 17:27:01.11ID:nH0xaI8V
LLで書くまでもないと思ってシェルスクリプトで書いてもあとからやっぱりLLにしておけばよかったてのはよくある
2020/07/11(土) 17:29:06.03ID:ss8oSOoU
そういうのはそもそもシェルスクリプトで書くべきではなかっただけ
なぜ用途で使う言語を選ぶことができないのか?
2020/07/11(土) 17:38:07.09ID:k15GPxxj
つ「馬鹿の一つ覚え」
2020/07/11(土) 17:38:47.21ID:k15GPxxj
つ「一知半解」
2020/07/11(土) 17:48:25.48ID:vh5QM+xj
結局どっちで書くべきだったのかは実際書いてみないとわからない時もある
一見コマンドの組み合わせで何とかなりそうに見えたからシェルスクリプトで組んでみたものの思いの外処理が複雑でawk,sedでは辛かったり

(以前そういう処理書いてたときは複雑な部分だけpythonで書いて
シェルスクリプト内でpythonをパイプで挟んだ)
2020/07/11(土) 18:32:50.26ID:ss8oSOoU
> の思いの外処理が複雑でawk,sedでは辛かったり



awkは行と列単位の処理
sedは行単位の置換

変にGNUの拡張使うのがいかんのやろ
できるからやるんじゃなくて、それぞれのコマンドに適した問題を
そのコマンドでやればいいだけだよ。適してるかなんてすぐわかるじゃん。
問題が適していないとわかった時点で、別の方法を使えばいい。

それにさ、awkやsedでつらいっていうけど、それシェルスクリプトじゃないから。
awkがつらい、sedがつらい。ならあんたが言うように
awkやsedの部分だけをpythonに置き換えればいいだけ

それはawkやsedを置き換えてるのであって、シェルスクリプトを置き換えてはいない
2020/07/11(土) 18:38:28.69ID:k15GPxxj
<<を使えば良いのに
2020/07/11(土) 20:30:10.89ID:6BqHmbZe
sedが辛ければ、普通はperlを使うだろ
2020/07/11(土) 21:55:52.15ID:R/CfnAdC
素直に最初からperlで組んどけばよかったんじゃ
2020/07/11(土) 22:31:18.49ID:ss8oSOoU
つまりsedじゃなくてperlを使うという話で
シェルスクリプトとは関係ないわけだ
2020/07/11(土) 22:37:00.28ID:R/CfnAdC
perlがこの先生きのこるうえでシェルスクリプトっぽく見えるperlの言語仕様が長所になるかもね。
2020/07/11(土) 22:42:26.16ID:ss8oSOoU
Perlで foo | bar | baz と同じことをするものを作る場合どうするの?
2020/07/11(土) 22:48:27.46ID:Q8Accifd
echo HOGE | perl -pe "s/O/A/"
とやればOをAに置換できる
2020/07/11(土) 23:10:23.61ID:R/CfnAdC
>>299

単に実行するだけなら
system("foo | bar | baz");
ただしsystem()は標準出力される文字列を再利用やリダイレクトできない。

出力結果を変数$hogeに格納するなら
my $hoge = `foo | bar | baz`;


出力を一行ずつ処理したいなどの要求があるなら、素直にパイプ処理のコードを書く必要がある。
302login:Penguin
垢版 |
2020/07/11(土) 23:46:31.52ID:xOIYo2js
>>300
"文字列"ではなく"文字"の一対一の置換、及び削除は tr コマンドを使うか、Perlを使いたいのなら
s 演算子ではなく tr 演算子を使えば、(原理的に)速い。
2020/07/12(日) 00:03:51.97ID:8IVU8OYq
この板に来る奴の多くはシェルスクリプトしか(それも少しだけしか)できなくて他に選択の余地ない奴が多いだろ
2020/07/12(日) 00:05:51.50ID:7U4pPq4C
>>302
それはsedやawkじゃあかんのか?
2020/07/12(日) 00:05:55.44ID:X6+2ZbgQ
>>303
そういうやつがわざわざここに来るとは思えんけどなぁ...
2020/07/12(日) 00:17:51.66ID:s6Bmu8gK
>>304
基本的にはsedではperlで使う(といっても、もう一般的な)正規表現の記法が使えない
\w、\dあたりは使えたほうが便利
2020/07/12(日) 00:29:09.06ID:8IVU8OYq
>>305
この板に来る奴の多くは一般的なプログラムをつくらないだろ
(作るのは簡単なシェルスクリプト)
そんな奴は、Ruby、Python、Perlのような言語を学ぶなんてしない
2020/07/12(日) 00:34:27.31ID:s6Bmu8gK
簡単だからこそ、用途に応じて使い分けるということは理解できないかな?
309login:Penguin
垢版 |
2020/07/12(日) 00:34:34.83ID:5U5bHZ+6
fzf などのインクリメンタルサーチで選択した文字列をそのまま端末の出力バッファに送り込みたい場合、bash環境ではPerlが使われる。
以下に端末の出力バッファに文字列を送る例を示す。0x5412は、bash環境におけるTIOCSTIの実値。

$ perl -e 'ioctl STDOUT, 0x5412, $_ for split //, do{ "echo hello\necho world\necho foobar" };'
310309
垢版 |
2020/07/12(日) 00:41:10.00ID:5U5bHZ+6
訂正。
0x5412は、Linux環境におけるTIOCSTIの実値。
311login:Penguin
垢版 |
2020/07/12(日) 02:29:56.32ID:DN64b1Du
決まった処理させるのにコマンド羅列で済むから最初はbatにするんだけど
扱う対象が増えたりで少し便利にしたいと思ったら途端に面倒になるので
Perlに組み込むなんてことは普通によくある
312login:Penguin
垢版 |
2020/07/12(日) 12:08:18.23ID:b0mOmfy0
Ubuntuの初心者ですが
皆さんはデスクトップは何を使用しているのでしょうか
良かったらお勧めのデスクトップを教えてください
2020/07/12(日) 12:12:35.50ID:lPaBZYh6
Xfce4 というか Xubuntu
インストール後 Japanese team の追加パッケージをインストール
http://ubuntulinux.jp/japanese
2020/07/12(日) 12:14:03.59ID:lPaBZYh6
書き込んでから気づいたがWSLスレだった。すまん
2020/07/12(日) 12:14:32.11ID:I0Hzl5QJ
可読性の高い、Ruby が確実。
漏れは、パッケージの更新も、Ruby スクリプトでやってる

#!/usr/bin/env ruby

# sudo のパスワードを自動入力する
puts `echo パスワード | sudo -S apt-get update`

puts `sudo apt-get upgrade -yV`
316login:Penguin
垢版 |
2020/07/12(日) 13:13:20.26ID:5U5bHZ+6
パスワードをファイルにベタ書きしたらだめでしょ。
visudo でパスワードなし実行するユーザとコマンドを設定したほうがい。
2020/07/12(日) 13:45:35.95ID:IgrSJcin
パッケージの更新とかならMakefileがお手軽じゃない?
2020/07/12(日) 14:16:56.67ID:7I/a/XJM
>>304
AWKには"文字"の置換はない("文字列"の置換はある)。Sedは内部に tr コマンドがない代わりに y コマ
ンドで"文字"の置換を行え、原理的に速いが、trコマンドやPerlの tr 演算子のように、文字の範囲指定
([0-9]で数字を構成する文字全て、等)ができないので、使い勝手で劣る。
2020/07/12(日) 15:27:21.95ID:gM0oNR+O
>>315
パスワードをそのままスクリプトに書くのがまずやばいし
そういう簡単な実行頻度の高いやつは
Ctrl+R で履歴検索からでええのでは、、
2020/07/13(月) 03:50:31.62ID:z3yut/lS
>>301
それperlからシェル呼んでるだけだろ
2020/07/13(月) 05:28:24.03ID:Mfeh6D4T
コマンドを関数と同じように使える言語があってもいいと思うんですけどね
それがシェルなんだろうけど、言語なんでインタラクティブシェル機能ははなくていいw
なぜかみんなPOSIXシェルの代替を目指す。
そんなん無理だろうに
2020/07/13(月) 07:11:54.65ID:6r2RwdRo
シェルを介さずに外部コマンド呼ぶ方法なんてperlにもpythonにも普通にあるだろ
2020/07/13(月) 07:28:25.76ID:Mfeh6D4T
シェルを介さずに外部コマンド呼ぶことはできるが
パイプのように出力側と入力側でブロックせずに並列で処理を実行できる機能がない
2020/07/13(月) 07:31:30.16ID:6r2RwdRo
>>323
>>パイプのように出力側と入力側でブロックせずに並列で処理を実行できる機能がない
どういう意味?
2020/07/13(月) 07:50:17.85ID:Mfeh6D4T
>>324
これを実行してみればわかる

for i in $(seq 100); do sleep 1; echo $i; done | grep -E "3|5|8"
2020/07/13(月) 07:53:44.80ID:6r2RwdRo
>>325
子プロセス作ればいいだけじゃん
2020/07/13(月) 10:22:54.04ID:Mfeh6D4T
>>326
子プロセスを作るだけというのなら
実際に子プロセスを作るだけで動くコードを書いてみましょう。
子プロセスを作るのは難しいという話ではないですよね?w
2020/07/13(月) 11:32:58.52ID:6r2RwdRo
素直に分からないから教えてくださいってお願いできないものかね
プロセス間通信でググってよく調べとけよ

open my $pipe, '|-', 'grep -E "3|4|5"';
for (0..100) {
sleep 1;
print $pipe "$_\n";
}
2020/07/13(月) 11:37:46.70ID:c0s7GQYU
>>328
ドザが喜びそうな言い方だな
2020/07/13(月) 11:52:55.30ID:O359orXv
>>328
バファリングされてんじゃね?
2020/07/13(月) 11:59:06.94ID:6r2RwdRo
ああ、そうだね

open my $pipe, '|-', 'grep -E "3|4|5"';
select $pipe;
$| = 1;
for (0..100) {
sleep 1;
print $pipe "$_\n";
}
2020/07/13(月) 12:13:56.54ID:SYLILHd2
Perlは並列処理とパイプの相性悪い。別スレッドのパイプハンドルをブロックしてしまう。
CPANライブラリの Parallel::ForkManager を使うとかひと工夫が必要。
なんにせよ「Perlがこの先生きのこるには」スレになりつつあるので話題を変えたほうがいい。
2020/07/13(月) 12:26:12.36ID:O359orXv
>>332
なあ
お前意味わかっていってる?
2020/07/13(月) 12:53:17.72ID:Mfeh6D4T
ほらね(笑)
このようにシェルスクリプトならバグの余地がないぐらいなのに
>>328のように長くなった上にバグを混入させている。
335login:Penguin
垢版 |
2020/07/13(月) 13:01:39.44ID:SYLILHd2
>>334
シェルスクリプトはバグをOS固有の仕様として甘受するほかないことが多いので、プログラマにできる改善の余地が少ない。
336login:Penguin
垢版 |
2020/07/13(月) 13:10:22.35ID:SYLILHd2
sleep コマンドが満足に動かないWSL版 Ubuntu 20.04 LTS に依存したシェルスクリプトを書くのは大変だろう。
結局、PerlなりPytonなりの言語で書くことになる。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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