シェルスクリプト総合 その33at TECH
シェルスクリプト総合 その33 - 暇つぶし2ch200:デフォルトの名無しさん
20/04/18 17:44:44.40 8o9dGOG1.net
>>195
bash -c 'set -e;foo' && echo $? || echo $?
だった。set -e は別に継承されるわけないと後で気づいた
で、>>192のネタ確認してみたらできそうなのね。$()なんて出力結果求めるのにしか使ったことないのでこれでいいのか??と頭ウニだけど
if $(set -e && foo); then echo $?; else echo $?; fi
なんかbash限定でもなく動いてるな(w)

201:デフォルトの名無しさん
20/04/18 17:58:24.37 8o9dGOG1.net
あぁ、$() は正常時はやっぱりダメか。そりゃそうだな(スッキリしたw)
ret=$(foo) のような、なんか工夫すればできそうな気もしないでもないが。そういうことなのね、失礼>>192

202:デフォルトの名無しさん
20/04/18 18:28:05.36 fB7EV6Kq.net
その方針なら
export -f foo;
ret=$(bash -c 'foo; echo $?');
echo $ret;
で良いんじゃね?

203:デフォルトの名無しさん
20/04/18 19:01:48.64 8o9dGOG1.net
出力結果をスクリプトで扱うために欲しいわけじゃないから
$() だと関数も外部コマンドのように別(のメイン)プロセスとして呼べる=bash固有のでなくて使えそうだなあという、ニコイチではなくどっちかの話

204:デフォルトの名無しさん
20/04/18 19:14:49 fB7EV6Kq.net
ああすまん、fooの出力を忘れてた。

205:デフォルトの名無しさん
20/04/18 23:55:48 L3zGDU5z.net
$ $(echo hoge)
hoge: command not found
まあ、当然そうだわな
$ $(exit 12)
$ echo $?
12
へー、コマンドねえぞとお怒りにはならんのか。空行とみなして無かったこと(?)になるのか
echo ' 'とかスペースタブだけ(?)なら許してくれる、: と違いステータスも変わらない

てことで、標準出力に何も出さなければいいのねで、

exec 9>&1
$(set -e; foo >&9) && echo $? || echo $?

でbash以外でも動くことは動く ($() 内ってCommandsでもいいのね)
$()内での set -e はない方がスッキリだが必要ないシェルもあるもあるが必要とするシェルがある

206:デフォルトの名無しさん
20/04/19 00:14:03 u21QryuH.net
例えば、Ruby のバージョンマネージャー・rbenv の、rbenv-installer の冒頭部分は、

#!/bin/bash

# コマンドの終了コードが、0以外なら強制終了する
set -e

homebrew=

# -p : タイプが「file(実行ファイル)」の時のみ実行ファイルの絶対パスを出力する
# (それ以外のタイプの場合は何も出力しない)

type -p brew >/dev/null && homebrew=1

207:デフォルトの名無しさん
20/04/21 09:06:14 h1bS6DJt.net
コマンドってファイルに書くのと実行形式を~/binに置くのとどっちがいいの
関数とエイリアスの違いは分かったけど使い分けできてないな

208:デフォルトの名無しさん
20/04/21 10:50:42 FcWzzI7X.net
/dev/urandomっていうデバイスファイルが,
ほんとにただのファイルとか実は同じ値ばっかり出力するデバイスファイルとか
じゃないってことを保証する方法ってある?

209:デフォルトの名無しさん
20/04/21 13:16:25.79 bkXsrA+q.net
>>203
いろんなところで使いたいコマンドは ~/bin に置いておいて
パスを通しておく。限定的な使い方をするコマンドはそのディレクトリに
置いておくのかな。私はそうしている。

210:デフォルトの名無しさん
20/04/21 15:24:10 Lx1iEb8v.net
>>204
ないよ。
作ろうと思えば/dev/urandomを独自実装のデバイスファイルに置き換えられるんだから。
それっぽい値を返すデバイスファイルを作ろうと思えば作れる
例えばWSL1はWindowsでLinuxカーネルをエミュレートしてるんだから
/dev/urandom とかMSの独自実装のデバイスでしょ?

211:デフォルトの名無しさん
20/04/21 15:27:13.15 Lx1iEb8v.net
>>203
コマンドをファイルに書くって関数のこと?
CLIから呼び出す汎用的なものは~/binで
スクリプト内部で使うだけなら関数にするだけじゃないの?
そしてエイリアスはインタラクティブシェルで使うもの
bashがデフォルトでスクリプトでは無効になってるのはそういう事

212:デフォルトの名無しさん
20/04/21 16:17:24 fQ5b9H0O.net
>スクリプト内部で使うだけなら関数にするだけ
と思い込んでたら、>>56みたいになるぞw
>bashがデフォルトでスクリプトでは無効になってるのはそういう事
まあ、4からか?そういう方がいいだろうと思い変えたのだろうが、--posixでは有効なんだけどな

213:デフォルトの名無しさん
20/04/21 16:29:23 Lx1iEb8v.net
>>56は、rbenvはインタラクティブシェルで使うために
alias使ってるんでしょ?

> まあ、4からか?
ずっと前からやろ?

214:デフォルトの名無しさん
20/04/21 16:30:27 Lx1iEb8v.net
URLリンク(pubs.opengroup.org)
POSIXでも interactive utilities.って言われてるぐらいだしな

215:デフォルトの名無しさん
20/04/21 16:43:50 fQ5b9H0O.net
>>209
残念ながら、3はそうなってない

216:デフォルトの名無しさん
20/04/21 16:47:30.51 fQ5b9H0O.net
>>210
ちゃんと読めよ

217:デフォルトの名無しさん
20/04/21 16:59:29 fQ5b9H0O.net
>>209
>alias使ってるんでしょ?
ああ...これもか...
色々想像するのは勝手だが、なんか色々勝手な想像ばかりで全く調べてないなって感じだぞ

218:デフォルトの名無しさん
20/04/21 17:43:01.90 fQ5b9H0O.net
>>209,211
ああ、すまん
実行できないのは最初からだし、存在さえもしないのは3以降からだな(2では存在はするが実行時エラー)
>まあ、4からか?そういう方がいいだろうと思い変えたのだろうが
の部分は間違い勘違い、すまん

219:デフォルトの名無しさん
20/04/21 18:23:13 Lx1iEb8v.net
>>213
調べるとか何のこと?
スクリプト内部でだけ使うなら関数って言ってるだけなんだけど?

220:56
20/04/21 20:51:03 HADG6GDb.net
anyenv は多言語向きで、rbenv, nodenv, pyenv, phpenv などを同じ使い方で、統一的に扱える。
~/.bashrc に、下の2行を追加するだけで、各言語ごとに追加しないでも良い

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

結局、この追加した、eval で、rbenv という関数を読み込んでいたという落ちw

221:56
20/04/21 20:57:08 HADG6GDb.net
>>165
に書いてます

シェル関数は、その関数が定義されたファイルを読み込んでいれば使えるけど、
読み込んでいなければ使えない

222:デフォルトの名無しさん
20/04/21 21:30:49.10 fQ5b9H0O.net
>>215
想像でそれも自分の言ったことに都合が良いだけで言うなってことだよ
すぐ下のレスに状態を本人が書いてるだろに

223:デフォルトの名無しさん
20/04/21 21:50:22.71 Lx1iEb8v.net
rbenvはaliasをインタラクティブシェルで使ってない
だからといって、
「aliasはインタラクティブシェルで使うもの」を
否定してることにはならんのだが・

224:デフォルトの名無しさん
20/04/21 22:16:38.40 fQ5b9H0O.net
何言ってるの?
>>スクリプト内部で使うだけなら関数にするだけ
>と思い込んでたら、>>56みたいになるぞw
から、想像だけで「alias使ってるんでしょ?」て間違ったこと「いきなり」言い始めたんんだけど。それが関数なんてすぐ下に書いてあるのに、見も/調べもせずに「いきなり」
「スクリプト内部で使う[だけ]なら[関数]」だから、見も/調べもせずに「alias使ってるんでしょ?」なんて間違いを平気で言ったんでしょ?
aliasはインタラクティブシェルで使うものは別件で、そこは関数のことだろに

aliasはインタラクティブシェルで使うものは特に否定はしてないが、POSIXでそう決めてるわけではない。>>210を自分でちゃんと読めば>>210はなんの補強にもなってないのに誤った抽出ってこと

225:デフォルトの名無しさん
20/04/21 22:19:02.65 Lx1iEb8v.net
「スクリプト内部で使うだけなら関数にするだけ」は
否定しないんだね

226:デフォルトの名無しさん
20/04/21 22:21:12.97 fQ5b9H0O.net
読めなさすぎだろう。なんでそうなる??
スクリプト内部で使う[だけ]じゃない[関数]がって例の話なのに
ダメだな読めなさすぎ、今までのでも

227:デフォルトの名無しさん
20/04/22 05:24:59 6NXdX+6G.net
お前らいつも質問者を置き去りにしてんな

228:デフォルトの名無しさん
20/04/22 05:43:01.59 Beb++bH7.net
こいつもう辞めた方がいいな

229:デフォルトの名無しさん
20/04/22 11:23:37 3RYHR+yq.net
質問箱スレじゃないから

230:デフォルトの名無しさん
20/04/22 16:58:30 UC4McjLk.net
枯れた技術のスレで質問禁止にしたら超絶過疎っちゃうよ

231:デフォルトの名無しさん
20/04/22 18:17:22 hVJ7sunP.net
質問禁止という意味じゃない。質問もありだし質問のをネタにしたのもあり
質問箱スレならQ/A以外は雑音にしかならんという意味

232:デフォルトの名無しさん
20/04/23 02:03:46 SDkT6EOl.net
cronの書式を読み取りたいんですがなぜかファイル名が読み取られてしまいます。なぜでしょうか?

233:デフォルトの名無しさん
20/04/23 22:30:55 LOz3K8jb.net
どうやったらそんな挙動になるんだ?
ちょっとどんなコマンド打ったか書いてみて。

234:デフォルトの名無しさん
20/04/23 23:01:10 UKSnHl0c.net
>>228
クォートしてないからでしょ
$ ls
crontab
$ echo * * * * * user-name command to be executed
crontab crontab crontab crontab crontab user-name command to be executed
$ echo "* * * * * user-name command to be executed"
* * * * * user-name command to be executed

235:デフォルトの名無しさん
20/04/24 00:57:40.18 QUI7MWka.net
>>229
setを使ってスペース区切りで分割したらファイル名になりました
>>230
そこから各フィールド


236:ごとに分割するのはどうしたらいいでしょうか?



237:デフォルトの名無しさん
20/04/24 01:55:29 oLSoKJut.net
awk使っちまうなあ
楽チンで

238:デフォルトの名無しさん
20/04/24 02:13:20 QUI7MWka.net
その後シェルスクリプトで処理をしたいんです。

239:デフォルトの名無しさん
20/04/24 02:56:11 F2FblhOM.net
read

240:デフォルトの名無しさん
20/04/24 03:11:08 F2FblhOM.net
cat /etc/crontab | grep -v '^[ \t]*#' | while read m h D M W u c; do [ "$c" != '' ] && echo "$M/$D $W $h:$m ($u) $c"; done
でいいのかな??

しかし、>>228から * のGLOB展開とわかるなんてすげえなw>>230

241:デフォルトの名無しさん
20/04/25 23:21:25 dkVnBOhV.net
他スレで -z とか見て思い出したんだけどさ
[ -z "$str" ] とか [ -n "$str" ] って必要なの?
[ "$str" ] とか [ ! "$str" ] でいいと思うんだけど?

[ "$op" "$str" ] みたいに演算子を変数に入れられるから
機能そのものが不要だとはは思わないけど
通常は [ "$str" ] や [ ! "$str" ] で良くない?
他の言語だとこっちだからわかりやすいし

242:デフォルトの名無しさん
20/04/25 23:31:42.54 gS2ps0hn.net
他の言語だったらそういうのはBooleanでしか使わないという文化な人々も居る
[ -z "$str" ] や [ -n "$str" ] よりも [ "$str" = "" ] とか [ "$str" != "" ] の方が見る機会が多かったな

243:デフォルトの名無しさん
20/04/25 23:59:47 Ey2ZfVC3.net
>>236
先頭にマイナス記号が入らないことが保証されるのならいいのでは?

244:デフォルトの名無しさん
20/04/26 00:16:24 D7tlSM02.net
>>238
関係ないでしょ? その場合こう展開される
[ "-z" ] または [ "-n" ] これはどちらも文字列があるから0

[ ] で囲まれた中身が1個の場合は決してオペレータとして扱わないのだから
どんな文字が来たとしても問題ない。空文字以外は0となる
ついでにいうと [ ] の中身が0個の場合は常に非0

そもそも [ ] (test)のドキュメントに
STRING は -n STRING と等価と書かれている
仕様通り

245:デフォルトの名無しさん
20/04/26 03:16:05.39 cVjuSaki.net
>>239
他の条件とand/orされる場合は?

246:デフォルトの名無しさん
20/04/26 03:17:32.99 D7tlSM02.net
>>240
-a と -o に関しては、shellcheckさんが禁止しております
[ 略 -a 略 ] は使いません。必要なら [ 略 ] && [ 略 ] こうします

247:デフォルトの名無しさん
20/04/26 03:29:33 cVjuSaki.net
>>241
そういう独自ルールを適用するならそれで良いんじゃねえか?
ただ独自ルールだからそれとセットで説明する必要がある。

248:デフォルトの名無しさん
20/04/26 04:31:48.38 D7tlSM02.net
>>242
ん?でもさ -a とか -o 使っても問題ないんじゃね?
[ str -a ] みたいなのってありえないんだからさ[ -a -a ] もないでしょ?
[ -a -a -a ] だと 最初と最後が文字だって一意に識別できるよね?
訂正する
> 他の条件とand/orされる場合は?
他の条件とand/orされる場合 かつ 混乱するようなパターンってありえるの?

249:デフォルトの名無しさん
20/04/26 04:38:33 cVjuSaki.net
>>243
シェルというかtestコマンドってそんなに賢く自動判別してくれるの?
これからそういうシェルまたはtestコマンド作るって話?
だったら作ればいいんじゃね?そうすればそれはそういうものですって言えるしそれでokだ。

250:デフォルトの名無しさん
20/04/26 04:48:09 D7tlSM02.net
なんでシェルをディスってるの?
これからも


251:何も「testは賢く判断するから問題ないよね」って聞いてるだけなのに



252:デフォルトの名無しさん
20/04/26 04:53:55 D7tlSM02.net
>>244
こういえば良いのか?
POSIXで決まっている仕様どおりの正しい動きです。
これから作る必要など全くありません。

253:デフォルトの名無しさん
20/04/26 04:56:34 cVjuSaki.net
あ、そう。じゃあそれでいいんじゃね?

254:デフォルトの名無しさん
20/04/26 06:08:44.50 D7tlSM02.net
何が気に食わないんだろう(笑)

255:デフォルトの名無しさん
20/04/26 14:42:15 v6fWLjMY.net
>>236と同一人物に見えて俺流儀の押し付けしたいのか何をしたいのかだろな

256:デフォルトの名無しさん
20/04/26 15:26:53 D7tlSM02.net
質問者 (POSIX準拠の仕様)これ問題ある?
回答者 問題あるに決まってるだろ。あれとかこれとかどうなんだ?

質問者 それらは問題ないよね?
回答者 お前の流儀を押し付けるな!

なんだこのながれ

257:デフォルトの名無しさん
20/04/26 15:35:41 UR76YMSe.net
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

258:デフォルトの名無しさん
20/04/26 15:55:10.56 D7tlSM02.net
まともなレスじゃなくて、個人たたきに変わったからな
POSIXの仕様にたいして俺流儀とかアホかと

259:デフォルトの名無しさん
20/04/26 18:41:28 vc5fDz2w.net
それ以上POSIXを唱えるな
奴が来る

260:デフォルトの名無しさん
20/04/28 06:27:22.31 6K6MgdzD.net
ハクション大魔王2020は面白いな。

261:デフォルトの名無しさん
20/04/28 08:02:31 w59d7UdO.net
俺流儀に見えたってことはそういうことでは
虚栄心だけじゃ何も学べないよねぇ

262:デフォルトの名無しさん
20/04/28 08:18:47 +3UriQww.net
詠唱




──POSIX準拠



 

263:デフォルトの名無しさん
20/04/28 13:15:20.29 85h3VPXT.net
宗教みたいだぁ…(直喩)

264:デフォルトの名無しさん
20/04/28 15:22:47 7mVXavmj.net
宗教だろ…(直球)

265:デフォルトの名無しさん
20/04/29 07:41:19.70 kBxqIvnv.net
お前のログインシェルをfishにしてやろうか

266:デフォルトの名無しさん
20/04/29 13:35:45 CfLIzb8G.net
>>259
それはPOSIX準拠?

267:デフォルトの名無しさん
20/04/29 14:00:43.59 /shWL0SW.net
ねたにまじれす

268:デフォルトの名無しさん
20/04/29 18:18:56 i2PPpjMR.net
最近Oil ShellのPOSIX準拠度が高まってきて嬉しい(これはネタじゃない)

269:
20/04/29 18:42:59.47 cpDKktQc.net
メジャーリリースしたら教えてくれ

270:デフォルトの名無しさん
20/04/29 20:13:29 sus1L+2H.net
POSIX準拠度が完全になったら教えてくれ

271:デフォルトの名無しさん
20/04/29 20:20:23 sus1L+2H.net
ち、やっぱり set -uしたときにecho ${A+x} ってしたら
fatal: Undefined variableで落ちるじゃねーか
変数が定義されているかのチェックすら出来ねぇ

272:デフォルトの名無しさん
20/04/29 21:34:42 i2PPpjMR.net
>>265
そこでissueですよ

273:デフォルトの名無しさん
20/04/29 22:37:55 sus1L+2H.net
>>266
立て逃げしていいならするけどさ、やり取りが面倒なんだよ
この程度ででるぐらいなら他にも問題たくさんありそうだしstar多いんだろ?誰かが頑張ってくれ
それかすでにあるんじゃねーの?OilShellがどこまで本気なのか知らんが、
まがりなりにもPOSIX準拠を名乗りたいのなら絶対には対応していないといけない
基本機能だからな。(変数定義確認方法のFAQレベルだぞこれは)
俺にとっては数あるシェルの一つでしかないし別件で忙しい

274:デフォルトの名無しさん
20/04/30 01:05:28 vtgsH/Bs.net
POSIX互換を謳う俺々シェルの利点って何なの
わざわざ作るってことは今のPOSIXは不備あるのか

275:デフォルトの名無しさん
20/04/30 07:55:57 zGlfElvR.net
>>268
今のPOSIXに不満があったらPOSIX準拠シェルなんて面倒なもの態々作らんと思うが

276:デフォルトの名無しさん
20/04/30 08:09:08 04alJDEx.net
作るだろ?不満があったから新しいものを作る
ただし移行パスがなければ移行しないのでその方法を提供する
よくある話だ

277:デフォルトの名無しさん
20/04/30 12:57:36 pg6Bqb9H.net
>>270
たぶん「準拠(互換)」の部分について言及してるんだと思うよ

278:デフォルトの名無しさん
20/04/30 13:50:18 VId2oWrE.net
>>268
URLリンク(www.oilshell.org)

279:デフォルトの名無しさん
20/04/30 14:31:36 gdZAiUWY.net
学術の巨大掲示板群 - アルファ・ラボ
URLリンク(x0000.net)<)

280:デフォルトの名無しさん
20/04/30 14:31:36 gdZAiUWY.net
学術の巨大掲示板群 - アルファ・ラボ
URLリンク(x0000.net)<)

281:【B:82 W:57 H:87 (C cup) 145 cm age:61】
20/04/30 19:17:59 0zEyt4z5.net
POSIX
抽出レス数:28

スレタイに【POSIX】いれとけよ

282:デフォルトの名無しさん
20/04/30 19:21:05 04alJDEx.net
>>275

>>1より
> ・特記なき場合、POSIX準拠シェルが既定です(古きBourneシェルはほぼ絶滅しました)
>  特定のシェルの専用機能に依存する場合は明示しましょう(特にPOSIX準拠シェルではないfish, (t)csh等)

別にPOSIX前提ではない。レス28は多くない。

283:デフォルトの名無しさん
20/04/30 22:12:56 3EPTcWkg.net
posix準拠かどうかを自動判定するプログラムはないのか?

284:デフォルトの名無しさん
20/04/30 23:40:43 02DTS3d8.net
bash、tcsh、zsh などが持つ拡張機能を持たない
POSIX互換を目指す
シェルで -n で

285:デフォルトの名無しさん
20/05/01 12:30:18 xBnPf/RZ.net
>>275
例えば「C言語総合スレ」で
ISO CやJIS Cについての言及が全スレ中10%を占めていたとして,
そのことを以って「スレタイにISO C/JIS Cって明記しろ!」って言う?
いや,言うんだったら,まあ何も言えないけどw

286:デフォルトの名無しさん
20/05/02 20:03:36.40 nkPqW+JC.net
Oil Shellって実装されてない機能、実は多くね?
どこかに一覧でまとめられてるじゃないかと思うんだけど
わかってて未実装なのか、忘れられてるのかどっちなのかわからん
報告すべきなのかどうか

287:デフォルトの名無しさん
20/05/02 20:48:38 SU0LbRTW.net
「実は」っていうか,べつに公式に「POSIXに完全準拠しました!」なんて言ってねーしなw
ただ単に着実に対応していっているっていう,それだけ。
まだ1.0ですらないし,何を期待してるんだか。

288:デフォルトの名無しさん
20/05/02 21:33:14 nkPqW+JC.net
うん。聞いてるのは実装されてる機能されてない機能の一覧ね
いい加減、反論されたクソって!思い込んで突っ走るのはやめようよw

289:デフォルトの名無しさん
20/05/02 23:08:33 DEDgA8fc.net
自己紹介

290:デフォルトの名無しさん
20/05/03 12:41:29 Wpoh2lE+.net
Oilシェルに親でも殺されたのかな?(すっとぼけ)

291:デフォルトの名無しさん
20/05/10 09:42:55.33 6Ru0pW3/.net
fishって、プロセスの生成にposix_spawnを使っていると小耳に挟んだのですが。
macOS等、fork+execよりposix_spawnが速いとされる環境


292:で使ったらbashとかより 性能が上がったりしますかね?



293:デフォルトの名無しさん
20/05/10 14:52:33.76 wRm6C2I1.net
1ミリ秒ぐらいは上がるんじゃね?w

294:デフォルトの名無しさん
20/05/10 18:28:06.52 pQcD5gxy.net
では、赤射プロセスをもう一度見てみよう

295:デフォルトの名無しさん
20/05/10 19:18:19 JqEAqVcs.net
>>285
URLリンク(github.com)

296:デフォルトの名無しさん
20/05/12 11:30:45 yS+J4vmz.net
このシェルスクリプトは面白そう
URLリンク(www.youtube.com)

297:デフォルトの名無しさん
20/05/12 16:59:01 nXypJmVq.net
実装が面白いのかと思ったら発想が面白かった

298:デフォルトの名無しさん
20/05/17 19:47:04 bpPzQdIC.net
URLリンク(qiita.com)

> マジックナンバー
> マジックナンバーとは#!のこと
> シェルスクリプトの先頭には以下のようになんのシェルを使うのか明示する。

ばーかw

299:デフォルトの名無しさん
20/05/17 20:43:06.44 09BYrd1c.net
直接コメントしたれよ。こんなとこで晒すとか、くれえやつだな
マジックナンバー自体も知らないアレだとしても

300:デフォルトの名無しさん
20/05/17 22:09:25 cPnKiUuj.net
URLリンク(en.wikipedia.org)(Unix)#Magic_number

301:デフォルトの名無しさん
20/05/18 02:25:23 JVwpbSde.net
本人登場かという勘違いぶり

302:デフォルトの名無しさん
20/05/18 11:03:25.77 hn05DOX5.net
なんつーか、入門書としては酷いから訂正しなけれいけないレベルだが
初心者が頑張って背伸びして書いていると思うと
それをめためたに指摘しまくるのも大人げないんだよなw
と思ったが、
URLリンク(qiita.com)
> 入門UNIXシェルプログラミングを読んでいく
これ、本当にこの本に書いてあることなのか?
この本有名だし流石にそんなことはないと思うが
> % echo $SHELL #今使ってるシェルの種類を調べる
真っ先から間違いなんだよな。
× 今使ってるシェル
○ ログイン時のシェル。例えばbashでログインしてzshに切り替えてもbashのまま

303:デフォルトの名無しさん
20/05/18 11:05:59.88 vvPis8aR.net
>>291
これがマジックナンバーじゃなかったら何をもって ELF と
シェルスクリプトの違いを判断している?

304:デフォルトの名無しさん
20/05/18 11:28:16 vvPis8aR.net
>>295
ログインシェル zsh にしてログイン後に bash 起動したらSHELL が /bin/bash にならね?
「ログイン時のシェル」は流石に「今使っているシェル」よりなお悪いんじゃねーか?

各シェルの SHELL (と shell) の変数に関する実装によるが比較的今使っているシェル
だろうとみなせる、というほうがまだ正しそう。

文脈を見てみないとわからんが、プログラム側からシェルの種類を気にするのは
ssh-agent みたいに環境変数のセットのためのコードを返すプログラムぐらいだから
csh 系ユーザかどうかだけ拾うって程度で、細かい所までは考えてないでしょ

305:デフォルトの名無しさん
20/05/18 13:55:14 hn05DOX5.net
>>296
マジックナンバーが#!(シバン)のことなのではなく
#!(シバン)がマジックナンバー(の一種)

違いわかる?


「アルコールとは酒のこと」といえば間違ってると理解できる?

あ、これアルコールって書いてある!つまり酒だな!ごくごくって
(消毒用)アルコールを飲むやつはアホだろう

306:デフォルトの名無しさん
20/05/18 13:56:31 hn05DOX5.net
>>297
> bash 起動したらSHELL が /bin/bash にならね?

なぜそこで質問する?
わからないなら自分で調べろよ。

質問じゃないなら「/bin/bash にな�


307:驕vとお前は言うはずだ



308:デフォルトの名無しさん
20/05/18 14:00:45 hn05DOX5.net
ま、お前程度のやつが知らなくても仕方ないな。
有名な某あのツールですら十数年?も前から
間違っててバグ放置されてるんだしなw
(最近報告されてたんで俺は報告しないよ)

309:デフォルトの名無しさん
20/05/18 14:22:20 vvPis8aR.net
>>300
顔真っ赤にして連騰して恥ずかしい奴だなぁ、お前
まずはログイン時のシェルにならない事について謝れよ

310:デフォルトの名無しさん
20/05/18 14:41:09 hn05DOX5.net
>>301
URLリンク(pubs.opengroup.org)

SHELL
This variable shall represent a pathname of the user's preferred command language interpreter.

はい、ばーか確定(笑)

311:デフォルトの名無しさん
20/05/18 16:08:58.16 vvPis8aR.net
>>302
すまん、リンク先は見ていないがその英文で「ログイン時のシェル」と解釈
しているのかな、君は?
恥ずかしい書き込みしたんだから ID ぐらい変えて書き込もうよ。

312:デフォルトの名無しさん
20/05/18 21:10:24.48 hn05DOX5.net
>>303
じゃあ逆にお前は何を持って自分が正しいと思ってんだ?
なにか一つでも証拠を持ってこれるのか?
これないだろ?先に言っておく。俺はあと一つ証拠を持ってこれる。
謝るなら今のうちだぞ?

313:デフォルトの名無しさん
20/05/19 00:50:38 4QqJ5tyy.net
出だしが>>296と無知ぶりを発揮してのでよく頑張るなと思わせるw

314:デフォルトの名無しさん
20/05/19 08:40:51.02 +8IfJNam.net
>>304
その証拠って、ログインシェルを zsh にしてログイン後に bash 起動しても
SHELL 環境変数が zsh になってる件ですかね?w

315:デフォルトの名無しさん
20/05/19 10:14:32 zOKQOBke.net
>>306
反論したいんでしょ?あなたの意見の根拠を聞いてるんですが、そっちはどうしたんですか?
(私が主張していることを証明している)事実だけを言われても困るんですがw

316:デフォルトの名無しさん
20/05/19 11:45:35 +8IfJNam.net
>>307
根拠あげろって最初に挙げたでしょうに。
俺の環境ではログインシェルを zsh にしてログイン後に bash 起動したけど
SHELL 変数は /bin/bash でしたよ?

317:デフォルトの名無しさん
20/05/19 12:42:00 zOKQOBke.net
>>308
それと同じことを言ってる人をググって見つけてこれる?
そういうのが根拠。誰もいないよね。

「俺は○○だ」は根拠じゃなくてお前の主張
その主張の根拠を見つけてきてって言ってるのに
主張を繰り返されても困るw

318:デフォルトの名無しさん
20/05/19 15:11:40 +8IfJNam.net
>>309
お前の環境で実行しろよオイ
ファビョり方に無理が出てるなあとは思ったが流石にもうお前は終わりだ

319:デフォルトの名無しさん
20/05/19 15:14:56 O4jzhFRD.net
むかし北斗の拳というアニメがあったのだが、「お前はもう死んでいる!」と言った瞬間、ケンシロウの頭が「プシャー、ヒデブ!」ってなるような人が、掲示板には居るよね。
ふと思っただけで、特定の誰かを指して言うわけじゃないのだが。

320:デフォルトの名無しさん
20/05/19 16:11:09 41YM3k+D.net
>>310
もう飽きた。トドメさしとくね

SHELL environment variable still points to zsh after using bash
SHELL環境変数は、bashを使用した後もzshを指します
URLリンク(unix.stackexchange.com)

SHELL is an environment variable that is passed from bash to zsh when you call zsh.
SHELL is not one of the Parameters Set By The Shell in zsh, so its value remains intact.

SHELLは、zshを呼び出す


321:ときにbashからzshに渡される環境変数です。 SHELLはzshのシェルによって設定されるパラメーターの1つではないため、その値はそのまま残ります。 man login ユーザ ID とグループの ID は /etc/p@sswd ファイル中に記載されている値に従って設定される。 $HOME, $SHELL, $PATH, $LOGNAME, $MAIL の値は、パスワードエントリのそれぞれの フィールドに従って設定される。 ulimit, umask, nice 値が、 GECOS フィールドの エントリーによって設定されることもある。



322:デフォルトの名無しさん
20/05/19 16:14:39 41YM3k+D.net
URLリンク(unix.stackexchange.com)

You can use the command:

$ echo $SHELL
to find out the shell from within the script.

No. $SHELL is the shell of choice of the user. Initialised from the login shell of the user.
Nothing to do with the currently running shell.

いいえ。$ SHELLはユーザーが選択するシェルです。ユーザーのログインシェルから初期化されます。現在実行中のシェルとは関係ありません

323:デフォルトの名無しさん
20/05/19 16:16:06 41YM3k+D.net
man bash

SHELL この環境変数にシェルのフルパス名が保存されています。
シェルを起動したときに設定されていない場合は、 bash が現在のユーザのログイン
シェルのフルパス名を代入します。

324:デフォルトの名無しさん
20/05/19 17:04:50.75 Yw4hD4hb.net
POSIXシェルの\x80--\xFEあたりのバイト列の取り扱いって,何か規定されてます?
\x00--\x7Fの取り扱いについては
URLリンク(pubs.opengroup.org)
ここに載ってるけど。

325:デフォルトの名無しさん
20/05/19 17:40:08 +8IfJNam.net
ミスリードさせる気まんまんの書き込みばかりして
頑なに自分の環境での実行結果は貼らないのはなんで?w

『「アルコールとは酒のこと」といえば間違ってると理解できる?』
って書き込んだ奴はどこに行った?

326:デフォルトの名無しさん
20/05/19 18:30:30 3kLN/2rB.net
>>316
いい加減傍目からもお前が何をしたいのかわからん
延々となぜか丁寧に説明されているのに、何を言い張ってるんだか。さらにぶり返すとか本当に読めないんだな、色々と

327:デフォルトの名無しさん
20/05/19 19:00:31.56 3kLN/2rB.net
せいぜい、延々と正しい説明してるw方の間違いは「ログイン時のシェル」と言ったことだけだな
自ら挙げた>>302の user's preferred command language interpreter という方向にそれも>>312,313で捕捉されてるし
まあ、後で手動でユーザがSHELLを変える設定することも(ほとんど)ないからログイン時のシェルでも通じるだろうけど
>>297は全くの誤りだけどw

328:デフォルトの名無しさん
20/05/19 19:56:07 8HY/3oGP.net
「慶應卒の学歴なんていらない」10代起業で成功する子の共通点
URLリンク(www.excite.co.jp)
起業で成功するキャリア形成の仕方とは? 元プロサッカー選手で起業家の鈴木啓祐氏に聞いた
URLリンク(sogyotecho.jp)
【アプリ開発で起業】必要な心得とマネタイズ方法のすべて
URLリンク(www.dreamgate.gr.jp)
学生起業家が開発、「人を軸に本を探すアプリ」とは?読書通じて「考える力」養って
URLリンク(newswitch.jp)
島田商高生がアプリ考案、発表 ICT起業家育成プログラム
URLリンク(www.at-s.com)


329:ral/730010.html 医師コンビが「治療用アプリ」で起業、禁煙に続き高血圧治療アプリを開発 https://diamond.jp/articles/-/229375 好きが高じて“カレー起業”、キャッシュレス決済アプリ「TOKYO MIX CURRY」の挑戦 https://diamond.jp/articles/-/215868



330:デフォルトの名無しさん
20/05/19 20:30:16 +8IfJNam.net
>>318
>>302 を示す際に素直に『「Preferred ... 」であってログインシェルじゃなかったわ、すまん』
って書けばそこで終わった話ですよ? なぜこのタイミング?

> まあ、後で手動でユーザがSHELLを変える設定することも(ほとんど)ないからログイン時のシェルでも通じるだろうけど
都合よく解釈しすぎ。 もう一度書くけど
『「アルコールとは酒のこと」といえば間違ってると理解できる?』
って書き込んだ奴はどこに行った?

331:デフォルトの名無しさん
20/05/19 20:45:45 3kLN/2rB.net
俺は違うからな、お前に延々と付き合っていたのとは

お前は全く間違いの反論でだから、お前がどう挙げつらおうがお前の責め手にはならんだろう、何を勝ち誇って(?)いるんだか
お前自身で、その未だに言い出してる自分の間違いを認め誤りの訂正お礼なんぞもしてないくせに
自分の大きな間違いをごまかす消化するために小さな間違いをあげつらってるだけだな、しつこく繰り返してるとこからは

332:デフォルトの名無しさん
20/05/19 21:56:10 41YM3k+D.net
>>318
> の間違いは「ログイン時のシェル」と言ったことだけだな

諦めて読めな?

> man bash
>
> SHELL この環境変数にシェルのフルパス名が保存されています。
> シェルを起動したときに設定されていない場合は、 bash が現在のユーザのログイン
> シェルのフルパス名を代入します。

333:デフォルトの名無しさん
20/05/19 21:58:18 41YM3k+D.net
つまり>>308のこれが嘘だったってこと

> 俺の環境ではログインシェルを zsh にしてログイン後に bash 起動したけど
> SHELL 変数は /bin/bash でしたよ?

334:デフォルトの名無しさん
20/05/19 22:12:04.54 3kLN/2rB.net
>>322
>>318の最後の行でそれを補足してるんだがな
>>302の user's preferred command language interpreter
で間違いないだろう、それ以上でもそれ以下でもない。ログインシェル自体が(ユーザデフォルトの) user's preferred command language interpreter だから&それしか多分設定するとこがないから、ログインシェルが設定されてるだけかな
手動で、今の俺の気分はログインシェルとは違うこのシェルなんだと、
SHELL=なんか
sudo -s
user's preferred command language interpreter が実感できなくね?
で、bashではそう書いてあるらしいが、(ほぼなんもしてない)dashってどうなってるんだろうと、ソースをチラ見した限りはそんな風なとこちょっと見えないな。OSがなのかな?
ああ、もちろん>>323なんてのは嘘(逆にどんな環境やねん)、dashでもSHELLに設定されてるし、そこからbashを起動してもSHELLはbashのパスには変わらない

335:デフォルトの名無しさん
20/05/19 22:15:18.55 41YM3k+D.net
>>324
何をごちゃごちゃ言ってるのか知らんけど、
> 俺の環境ではログインシェルを zsh にしてログイン後に bash 起動したけど
> SHELL 変数は /bin/bash でしたよ?
↑これはman bashからみて絶対にありえないし
SHELL環境変数はログイン時のシェルなんだよ
まさか(自分で変更したら)ログイン時のシェルじゃない!
とか言いたいんか?

336:デフォルトの名無しさん
20/05/19 22:18:59.32 41YM3k+D.net
> dashでもSHELLに設定されてるし、
それはどこに書いてあんの?
ソースコード見たなら書いてある場所ぐらい言えるよね

337:デフォルトの名無しさん
20/05/19 22:20:16.13 41YM3k+D.net
訂正
× まさか(自分で変更したら)ログイン時のシェルじゃない!
○ まさか(ログイン後に自分でSHELL変数の内容を変更したら)ログイン時のシェルじゃない!

338:デフォルトの名無しさん
20/05/19 22:21:16.50 3kLN/2rB.net
>>325
何をムキになってるんだかwお前の読めない読まない病かよ?
ser's preferred command language interpreter
で間違いないだろう、それ以上でもそれ以下でもない。変数の意味だろ、そもそもは
意味としては、ログインシェルじゃないのも設定できる、ser's preferred command language interpreter だって話だよ
誰も、bashで変わるなんて言ってないのに、何を言い出してるんだか

339:デフォルトの名無しさん
20/05/19 22:22:53.62 3kLN/2rB.net
>>326
OpenBSD、FreeBSD、Ubuntu
で、そうなるって話
dashのソース中にはチラ見ではちょっとそういうのを設定しているとこは見えないけどって話。どこでやってんのかなあって話

340:デフォルトの名無しさん
20/05/19 22:24:45.56 3kLN/2rB.net
まさか、こんな展開になるとは思わんかったな。なんでムキになってるんだか

341:デフォルトの名無しさん
20/05/19 22:33:25 Yw4hD4hb.net
>>315
議論中すいません。ageます

342:デフォルトの名無しさん
20/05/19 22:36:50 +8IfJNam.net
man と実装が違っているのは確認してるよ
でも事


343:実複数バージョン(bash 4.2系/4.4系)でこの動きをするんで 「zsh をログインシェルでbash起動したら SHELL が bash に なった」発言を撤回するのは難しいね 特に >>302 の内容が決定的に撤回困難にしている これは君が示した文書で、君を苦しめているのは君自身 ちがうか? 君の手元の環境で発生しているだろう? 小説に出てくるクソ弁護士のような論調はやめたまえ



344:デフォルトの名無しさん
20/05/19 22:45:31 3kLN/2rB.net
>>332
どんな環境やねん
こっちで確認できる複数の環境でそんなのならんから、嘘としか思えんぞ
自分で環境がとかいいだしてるんだから、言えよw
仮にbash4だけの話なら、bash3、bash5ではそうならんから、bash4のバグじゃないの?bash4ってなんでやねん

345:デフォルトの名無しさん
20/05/19 22:46:32 3kLN/2rB.net
>>331
URLリンク(pubs.opengroup.org)
「ここに載っている」のはそういうことらしい。その中でも規定されてるのはって話かな、上記のは
それ以外は特に制御文字としては扱わない。\x00--\x7F内でも言及してないのは
\x80--\xFEなんてロケール/キャラクターセット依存だからそれぞれのキャラクターセット/文字コードでの話だろう。もちろんその中に制御文字なんてないんじゃないかな

346:デフォルトの名無しさん
20/05/19 22:53:45 3kLN/2rB.net
>>332,333
あ、Ubuntu 18.04 TLS のはまだ bash 4.4.20 だった
そんな動きにはならんな。嘘だなww

347:デフォルトの名無しさん
20/05/19 22:54:59 fsFcCZSO.net
>>332 bash_profile あたりに SHELL=/bin/bash とか書いてるんじゃないの?

348:デフォルトの名無しさん
20/05/19 23:04:14.14 3kLN/2rB.net
なるほど....!w

349:デフォルトの名無しさん
20/05/19 23:04:16.77 41YM3k+D.net
>>332
お前が言ってることの根拠は
「"preferred"はログインシェルのことじゃない!」
なんだろうけど、じゃあpreferredはどういう意味なんだよ?

350:デフォルトの名無しさん
20/05/19 23:05:04.34 41YM3k+D.net
>>336
自分で書いといてアホなこと言ってんのかこいつはwww
あーほあーほ

351:デフォルトの名無しさん
20/05/19 23:07:18.47 41YM3k+D.net
>>332
> 特に >>302 の内容が決定的に撤回困難にしている
> これは君が示した文書で、君を苦しめているのは君自身
> ちがうか?
意味不。 >>302の内容は
SHELL
This variable shall represent a pathname of the user's preferred command language interpreter.
この変数は、ユーザーの優先コマンド言語インタープリターのパス名を表します。
と書いてある通り、ユーザーの優先、つまりログインシェルのこと
それ以外のどういう意味があるんだよ?zshでログインしてbash起動したら
bashがユーザーの優先になるんだ!ってお前は言いたいんか?

352:デフォルトの名無しさん
20/05/19 23:09:21.26 41YM3k+D.net
> dashのソース中にはチラ見ではちょっとそういうのを設定しているとこは見えないけどって話。どこでやってんのかなあって話
SHELL環境変数は基本的に外部から渡される環境変数なんだから、そんなものなくても当たり前
bashは空だった場合に自分で設定しているようだが、それは空だった場合の話で
入っていればなにもしないということ

353:デフォルトの名無しさん
20/05/19 23:14:34.20 3kLN/2rB.net
>>341
負けず嫌いというか、誤りを認めたくないのは、アイツと同じだなw
お前がbashがといいだしたんだろうがっ。まあ、だいたい合意形成できてるからもういいや

354:デフォルトの名無しさん
20/05/19 23:16:01.88 41YM3k+D.net
手元の動作と周りの情報が全部違っていたら、自分の手元が間違ってるって考えないもんかねw
なんで俺の手元で再現させる?再現してないからそれは違うって言ってるに決まってるだろ
常識として「自分の手元だけで発生してる」は信用ならんから
ソースとして外部の情報を参照しろって言ってるのに、こいつは手元しか見ていない

355:デフォルトの名無しさん
20/05/19 23:21:55.33 3kLN/2rB.net
>>340
優先の より 好みの の方がしっくりこなくね?w
ログインシェルはもろ好みだから個々そういう設定にできるんだし
>>343
なんかイライラしてんのか?ちょっとイミフだな。まあいいたいことはなんとなくわかるけどw

356:デフォルトの名無しさん
20/05/19 23:22:13.23 41YM3k+D.net
はい。誰でも簡単に再現できます(笑)
bashを起動したところでSHELLは再設定などされません
(dashはSHELLが空の場合は


357:自分で設定などしないんだな) $ docker run -it debian dash # echo $SHELL # export SHELL=abc # echo $SHELL abc # bash root@58fdfabe096c:/# $SHELL abc



358:デフォルトの名無しさん
20/05/19 23:22:42.25 41YM3k+D.net
>>344
> 優先の より 好みの の方がしっくりこなくね?w
google先生に楯突くな!

359:デフォルトの名無しさん
20/05/19 23:24:47.87 3kLN/2rB.net
>>346
ww

360:デフォルトの名無しさん
20/05/19 23:25:40.73 41YM3k+D.net
debian 7がbash 4.2.37だな
docker run -it debian:7 dash でやればいい。結果は同じだが

361:デフォルトの名無しさん
20/05/19 23:29:44.81 41YM3k+D.net
いい加減理解したかね?俺なんか数年前に
「あぁ!?SHELLは現在のシェルじゃねーのかよ!
現在のシェルのパスはどうやって調べればいいんだよ!」
で苦労してんだから間違いなわけねーっつーの

362:デフォルトの名無しさん
20/05/20 00:20:43 91fxSgSA.net
Windows10, WSL, Ubuntu 18.04 で、やったら、

echo $SHELL
/bin/bash

>>336
/etc/@passwd に、デフォルトシェルが設定してある

ユーザー名:x:1000:1000:,,,:/home/ユーザー名:/bin/bash

363:デフォルトの名無しさん
20/05/20 00:24:36 9QbBPRXg.net
こいつは一体誰と戦ってるんだ・・・

364:デフォルトの名無しさん
20/05/20 00:44:53.45 InboTxWs.net
>>350
話の流れが読めてない
そこからzshとか他のシェルに変えても$SHELLは/bin/bashのままだって話をしてる

365:デフォルトの名無しさん
20/05/20 01:16:06.12 2U5TD7Rg.net
WSLは変態だから、bash.exe で(WSLを)起動すると、chsh/passwd直接などでログインシェルを他のにしても無視されて、bashがログインシェル(?)になる。当然、SHELLは/bin/bash
ログインシェルをzshに変えた、bash.exeで起動した、(bashが起動してるしSHELLはすでに/bin/bashだけど、)、コマンドラインでbashを起動した。SHELLが/bin/bashになってる変わった!
とかか?w
WSLでもubuntu.exeで起動したらまともに起動するっぽいし、他の正規のUnix/Linuxと同じ動作にしかならんな

366:デフォルトの名無しさん
20/05/20 10:06:46 9mY3JetI.net
>>334
thx

367:デフォルトの名無しさん
20/05/20 10:09:40 9mY3JetI.net
結局,現在使ってるシェルを確かめる最も可搬で確実な方法って
ps -o comm= -p $$
↑これかな。

368:デフォルトの名無しさん
20/05/20 10:31:11.68 InboTxWs.net
>>355
最も可搬な方法でも完璧ではないよ
それが使えないpsコマンドもたくさんある

369:デフォルトの名無しさん
20/05/20 13:58:16 9mY3JetI.net
そりゃ完璧ではないだろうけど。
でもまぁ,「最も」可搬な方法ではあるのよね。

370:デフォルトの名無しさん
20/05/20 14:29:26 InboTxWs.net
真面目に出力をパースすれば最も可搬になる

371:デフォルトの名無しさん
20/05/21 18:22:14.34 eGAQdhfO.net
そうかなぁ。
その出力がシステムの間で共通していないから,出力を指定するオプションを付ける必要があるんだけど,
そのオプションにすら可搬性がない,っていう状況だと認識してる。
>>358
ちなみに「真面目なパース」の例を挙げてほしい。

372:デフォルトの名無しさん
20/05/21 18:33:46.87 C3uZcQQo.net
dash,ksh,zshでの、-c でだと、
ps -p $$ は ps 自身になってるんだけど、なんでやねんっと思わなくもない
-c だから別にいいだろうけど

373:デフォルトの名無しさん
20/05/21 18:38:04 C3uZcQQo.net
ああ、(最後の)コマンドをexecしてんのか。納得した

374:デフォルトの名無しさん
20/05/21 19:15:46.38 C3uZcQQo.net
ああ、bashもps(というかコマンド一つだけならか?)だけならps自身だったexecしてた

375:デフォルトの名無しさん
20/05/22 10:18:39 TfVZs9xf.net
???

376:デフォルトの名無しさん
20/05/22 16:42:02.19 ZQuJuyf5.net
えーと、良かったね。「なんでやねんっ」で終わるよりは。

377:デフォルトの名無しさん
20/05/22 17:19:36.41 VBkbngi+.net
マウントとりの変形

378:デフォルトの名無しさん
20/05/22 20:59:32 ZQuJuyf5.net
何のことだ? 自分で調べて納得したなら間違いなく良いことだし、本来そうあるべきだろう。

379:デフォルトの名無しさん
20/05/23 07:51:59 0


380:T8MjFiT.net



381:デフォルトの名無しさん
20/05/23 11:11:44 Ify9JmqW.net
>>359
> ちなみに「真面目なパース」の例を挙げてほしい。
1. ps する
2. 一行目を読み取る
3. PIDが1列目、COMMANDが○列目ってわかる
4. 二行目移行を読み取っていく
5. PIDが一致したら、同じ行の○列目を参照する
6. それが起動してるシェルだ

なお、普通にシェルでプログラミングしろ
シェル芸でこれをやろうとするなよ

この程度の処理プログラミングとして考えれば
ほんの数行で終わる簡単な処理なんだが
シェル芸でやろうとして逆に難しくするやつがいる
シェル使ってるやつは、プログラミングができないやつが多い

382:デフォルトの名無しさん
20/05/23 15:58:02 ch2ICEVw.net
「シェルを使う」という表現に一体どんな意味を込めているのやら...

383:デフォルトの名無しさん
20/05/23 17:56:41.50 hM7sXxSn.net
>>369
この程度のシェルいプログラミングもできないで
シェルが得意と勘違いしてる人がいるなぁって話

384:デフォルトの名無しさん
20/05/23 18:04:41 31g10QWp.net
コードのコの字も出てないのに。少しはコードがあっての話でしか無いな

385:デフォルトの名無しさん
20/05/24 14:47:54 Y1ZXEm/L.net
age

386:デフォルトの名無しさん
20/05/24 15:32:04 0WjVzP+p.net
入れてみてわかるシェルの良さ

387:デフォルトの名無しさん
20/05/24 15:48:48 FTfvJDOJ.net
何入れてるの?

388:デフォルトの名無しさん
20/05/24 16:42:21 LIiHhrYu.net
fishです(AA略)

389:デフォルトの名無しさん
20/05/24 16:46:49 FTfvJDOJ.net
fishはPOSIXシェルじゃないから駄目だね

390:デフォルトの名無しさん
20/05/24 20:51:41.67 vB1Q/4mw.net
>>368
途中に時間が入っていると面倒なんだな

391:デフォルトの名無しさん
20/05/24 22:40:02 oexHBYog.net
Nushellがじわじわと来てるらしいよ
URLリンク(www.nushell.sh)

392:デフォルトの名無しさん
20/05/25 04:14:56 sIgPYriA.net
>>377
時間を気にする必要でもあんの?

393:デフォルトの名無しさん
20/05/25 08:11:38.36 heJMc7oc.net
>>368
「一行目に桁を表わす文字列があって,それがPIDとCOMMANDを含む」
↑これは
>>355 の挙げた
「 ps -o comm= -p $$ 」
↑これより可搬性あるって言えるの?
どちらもPOSIXでは規定されてるけど,どのOSでも使えるとは限らないし,
もっと言うとps -o comm= -p $$が使えないOSならpsの出力もPOSIXで定められた書式じゃなさそう。

394:デフォルトの名無しさん
20/05/26 10:37:11.76 DUXfe990.net
busyboxな環境(tiny core linux)でバックグラウンドプロセスの終了待機を行いたいんですが
psコマンドにPIDを指定する-pオプションがないので途方にくれています。
バックグラウンドプロセスは自分で起動するのでプロセスのPIDは取れてます。
psコマンドの一覧からPIDでgrepすると関係ないのも引っかかる可能性があるため困ってます。
他の手段て何かないでしょうか。

395:デフォルトの名無しさん
20/05/26 10:48:37 5zsa2F3Z.net
>>380
POSIXで定められてない書式に対応すればいいだけの話

>>381
だからpsの出力をパースすればいいだけw

396:デフォルトの名無しさん
20/05/26 11:01:33.46 5zsa2F3Z.net
>>381
どーでもいいけど、なんでバックグラウンドプロセスの終了待機でpsコマンドなんか使うの?

397:デフォルトの名無しさん
20/05/26 11:10:30 5zsa2F3Z.net
シェル芸界隈の人間って、psをgrepで~とか重い方法しか知らないよねw

398:デフォルトの名無しさん
20/05/26 13:11:20.00 EtaD8bXQ.net
rubyのspawnで 起動したプロセスを、終了待ちしたり、強制終了したり、親プロセスと一緒に殺す
URLリンク(takuya-1st.hatenablog.jp)
Ruby で、子プロセス起動をして、終了待ちをする。
終了待ちするには Process.wait( pid ) か、Process.waitall を使う
i = spawn


399:(" sleep 10 " ) Process.wait i



400:デフォルトの名無しさん
20/05/26 16:37:31 s8Kl2PhF.net
>>384
シェル芸人に親でも殺されたんか?
まあおちつけよ。

401:デフォルトの名無しさん
20/05/26 18:30:47 DUXfe990.net
ps | awk '{print $1}' | grep -w $PID
grepで-wオプションが使えることが判ったのでこれで取れました

402:デフォルトの名無しさん
20/05/26 18:52:54 5zsa2F3Z.net
>>387
なぁ、プロセスがいるかどうかだろ?
kill -0 "$PID" でいいやん?

403:デフォルトの名無しさん
20/05/26 18:53:49 5zsa2F3Z.net
それに自分で起動したプロセスを待つだけ(何もしなくていい)なら
wait "$PID" でもいいよね?

404:デフォルトの名無しさん
20/05/26 20:23:33 DUXfe990.net
>>388
kill -0 $PIDでいけました。ありがとうございます
待機中は他の処理が走るのでポーリングで待つ必要がありました

405:デフォルトの名無しさん
20/05/28 12:28:14 n9bIhKS2.net
上の方でOil Shellについて語っていた人がいたから誰か使ってるかもしれないと思って聞くけど
export -fを使おうとすると 'export' doesn't accept -f because it's dangerous.
ってエラーになるんだけどdangerousなのってどういう場合?
また一般的にexport -fは危険だから使うな派って存在するの?

406:デフォルトの名無しさん
20/05/28 18:03:48 RKI8PBxM.net
>>391
そういう派閥があるのか知らんけど,
exportしないに越したことはないと思う。

407:デフォルトの名無しさん
20/05/29 00:50:25.00 ECv3RSEQ.net
>>392
それはどういう理由でしょうか?

408:デフォルトの名無しさん
20/05/29 11:48:42 cDEYRYlQ.net
シェル変数、環境変数、関数は重要なものが多い
システムの動作、セキュリティなどに重要な影響を与えるものが多い
不用意に操作すると深刻な問題が起きる可能性が高い

こんなところでしょうか

409:デフォルトの名無しさん
20/05/29 13:13:25 5WC69G2H.net
つまりシェル変数、環境変数、関数を使うなってこと?

410:デフォルトの名無しさん
20/05/29 17:26:04 dZOo8Hm0.net
よく知らない人は使わないに越したことはない
というところかなあ
よく知らない人が使うと
重要なものを上書きしてしまうことがあるし

411:デフォルトの名無しさん
20/05/29 17:36:28 PKgR6prj.net
重要なものを上書きしてしまうというのは
どういう例でしょうか?

412:デフォルトの名無しさん
20/05/29 19:48:52 jz7GhSHA.net
そりゃまあ,素人は出刃包丁なんて使わんほうがいいわな。
職人が使ったらすごく良い道具であろうとも。

413:デフォルトの名無しさん
20/05/29 20:22:22 Jvc7lzH+.net
出刃包丁の話はしてません

414:デフォルトの名無しさん
20/05/29 21:34:05 dZOo8Hm0.net
>>397
signal とか?

415:デフォルトの名無しさん
20/05/29 21:48:30 Jvc7lzH+.net
>>400
今の話に何の関係があるの?

416:デフォルトの名無しさん
20/05/31 15:21:54.45 sIM3dDR8.net
>>399
えぇ……と,比喩っていう概念がこの世界にはあってね,
つまり物事を説明するときに例えを用いるんだわ。
まぁ例えば会社で品質管理の監査を受けてるときに
比喩を使って説明するのはよくないかも知れんが,
こんな場末の掲示板で一々真面目に受け答えする方がオカシイって話ですよ。

417:デフォルトの名無しさん
20/05/31 15:27:43.93 JRHRMyge.net
>>402
比喩は物事を説明するときに使いましょう。
物事を批判するときに使うのは意味が全くありません
なぜなら"別のもの"に例えるのが比喩だからです。
"別のもの"を批判しても意味はありません。

418:デフォルトの名無しさん
20/05/31 17:59:31.00 sIM3dDR8.net
あぁ,あの書き方で「批判してる」って捉えちゃうのか。
あいにく,読み取り能力のない人間にまでモノを教える程暇じゃないんでね。

419:デフォルトの名無しさん
20/05/31 20:56:34 9ZicJfwX.net



420:問されたからその都度答えていても おかしな受け取られ方すると、やる気なくすよねぇ



421:デフォルトの名無しさん
20/06/03 11:21:10 i+Bz2w1U.net
シェルの勉強中です。
引数にフルパスでファイル名を入れています。
シェル の動きとして引数がフルパスでなかった場合、エラーにしたいのですが、フルパスの判定はどうしたらいいでしょうか。
自分なりに考えたのは、
A=locate $1
if [ A = $1 ]
みたいな感じでlocateの実行結果と引数を比較して、完全一致しなかったら、フルパスじゃないのでエラーとしていました。
ただこの場合、例えばsyslogを指定した場合、locateにsyslogのバックアップ(syslog_0603みたいな)も引っかかってしまって上手く動作しませんでした

422:デフォルトの名無しさん
20/06/03 11:39:11.67 DK1HUsdg.net
最初の文字が / かどうか

423:デフォルトの名無しさん
20/06/03 12:18:14.74 gWKP5Lqg.net
case $path in /*) echo フルパウス; esac

424:デフォルトの名無しさん
20/06/03 15:17:52.52 i+Bz2w1U.net
>>407
その手がありましたか。ありがとうございます

425:デフォルトの名無しさん
20/06/05 09:46:48 kQNq3lIP.net
wgetなどを使ったシェルスクリプトを作ってファイルをダウンロードしています
該当のサイトは認証が必要でログイン処理もwgetでやっているのですが
パスワードをスクリプトなりコマンドラインとして書くのを躊躇します
(cookieを使っているので1回ログインすると数ヶ月ログインする必要はありません)
なので今はログイン処理だけは別にしてreadで入力させるようにしているのですが
パスワードを暗号化して見えなくすることは出来ないでしょうか?
暗号化してるパスワードって使いまわされるんじゃ?って心配はありますが
とりあえず今回はその問題はスルーしたいと思います

426:デフォルトの名無しさん
20/06/05 15:09:48 wkE1tuCg.net
wgetで指定したURIがセキュアなら、
パスワードもそれに乗せて送られるから、
一応経路上では暗号化されているのでは?

427:デフォルトの名無しさん
20/06/05 15:44:51.41 vEUs2R05.net
>>410
WindowsならCredential Manager、MacならKeychainを使う
それぞれcmdkeyとsecurityというコマンドでCLIからアクセス可能

428:デフォルトの名無しさん
20/06/05 15:45:22.79 vEUs2R05.net
linuxは知らん

429:デフォルトの名無しさん
20/06/05 17:08:15.88 MNdAWp8s.net
Linuxについて,古い情報だけど。
URLリンク(dayflower.hatena!!!!!blog.com)
この中でも触れられている通り,/proc/以下を叩かれたらおしまい。
多分これはmacOSでもWindowsでも似たりよったりな挙動だと思う
(パスワードを受け取るプロセスとWeb資源にアクセスするプロセスが
全然違う体系で動いてる以上,そこの間で暗証番号を遣り取りする際は
平文がそれに準ずる形で渡さざる得ないから)

430:デフォルトの名無しさん
20/06/05 17:24:24 /s+vLyih.net
>>414
それ関係ない話ですよね

431:デフォルトの名無しさん
20/06/05 19:06:10 52A66Mr1.net
そういうのはopenssl使ってるけどセキュリティーについては自信ない。

432:デフォルトの名無しさん
20/06/05 20:16:25 m3WbiNf2.net
/proc を叩かれたくなかったらコンテナ(dockerとか)使えば分離できる
/proc/*/cmdline も見れないからコマンドラインにパスワードを書くこと
に躊躇は要らない、ってのはどう?

要はそこじゃなくて TPM2.0 使って暗号化ファイルシステムマウント
しないとダメなんだろうけどさ

433:デフォルトの名無しさん
20/06/06 01:48:18 4D637/KL.net
>>410
URLリンク(www.gnu.org)
To prevent the passwords from being seen, use the ‘--use-askpass’ or store them in .wgetrc or .netrc, and make sure to protect those files from other users with chmod.

434:デフォルトの名無しさん
20/06/06 03:05:03.28 7YMZq5d4.net
漏れは自分のPC 内で、apt-get する、Ruby スクリプトに、パスワードも書いてる。
他には、yahoo へログインするスクリプトにも、パスワードを書いてる
#!/usr/bin/env ruby
# 全パッケージの更新
# sudo のパスワードを自動入力する
# echo <your_password> | sudo -S <your_command>
puts `echo パスワード | sudo -S apt-get update`
puts `sudo apt-get upgrade -yV`

435:デフォルトの名無しさん
20/06/06 05:11:44 fEYYKFMK.net
root取り放題

436:デフォルトの名無しさん
20/06/06 08:55:47 BnF/2e3e.net
モヤる気持ちはわかる

437:デフォルトの名無しさん
20/06/06 10:25:47.70 X82aLPfs.net
まあ,パスワードとかそういう機密情報周りは難しいよね(無難な結論)
ともかくこのスレの原則に反するけど,ほんとうに機密性を重視したかったら,
「シェルで色んなコマンドを組み合わせて実現する」よりも
「一つの強固な環境で全ての機能を構築して,そこで実現する」っていう方針の方が良い気がする。
気がするだけで根拠とかは一切ないw

438:デフォルトの名無しさん
20/06/08 22:18:24.29 NLc7dq7/.net
foo 3>&1
3を変数にするにはどうすればいいの?
foo "$FD">&1
エラーになる

439:デフォルトの名無しさん
20/06/08 23:35:37.35 UPXG9UaF.net
>>423
eval "foo ${FD}>&1"

440:デフォルトの名無しさん
20/06/09 01:07:13.62 Sn2l65YM.net
3>&1みたいなFDの切り替えってどんな時に使うの?
FDとリダイレクトの意味は分かってるしエラー出力も使えてるけどこの使いこなすのはさっぱり

441:デフォルトの名無しさん
20/06/09 08:46:32.64 a8EVQfut.net
ちまちまリダイレクトするのが面倒くさい時かな?
exec 3>&1 > script.log 2>&1
echo "Phase 1 start" >&3 # 端末に出力
goo ... # 標準出力/エラー出力は script.log に自動的にリダイレクト
hoo ...
echo "Phase 2 start" >&3 # 端末に出力
...
この場合は各フェーズを関数化して、関数呼び出しに対して
都度 script.log へリダイレクトするべきだが
ただ、exec 以外で > の左に指定する数字が 1,2 以外になるパターン
( foo 3>&1 )は知らねえ
ファイルディスクリプタ 3 番に対して open せずにいきなり書き込む
のは抵抗があるわ

442:デフォルトの名無しさん
20/06/09 08:51:44.16 MxhGccu+.net
上のようなことをしてる関数がfooとかかな。3がfifoとかなんかで

443:デフォルトの名無しさん
20/06/09 11:53:36.51 UgSyYe/8.net
>425
標準エラー出力を変数に入れるときに使う

444:デフォルトの名無しさん
20/06/09 20:36:13.51 JL8YwnMO.net
>>427
あー,FIFOか。自分ではほぼ使わない(専ら標準入出力とパイプ)だから思い付かんかったけど,たしかにFIFOなら3とかに繋ぐのはありそう。

445:デフォルトの名無しさん
20/06/11 14:08:25.44 IxigL/zf.net
ret=$(printf '\n\n\n\n\n')
if [ "$ret" = "" ]; then
echo true
fi
これってなにげに罠だと思うけど
なんで誰も疑問視しないの?

446:デフォルトの名無しさん
20/06/11 14:17:42.98 ibS6rTlb.net
規格による正当な動作だから

447:デフォルトの名無しさん
20/06/11 14:24:11.61 IxigL/zf.net
その


448:正当な動作がおかしいだろって話 仕様バグ



449:デフォルトの名無しさん
20/06/11 14:25:39.14 IxigL/zf.net
つーかさ、誰もハマらないの?
echo で最期に改行がついていても -n で改行を無くしても
同じになるっておかしいと思わないの?

450:デフォルトの名無しさん
20/06/11 14:29:59 ibS6rTlb.net
コマンド置換で最後の改行続きに意味があるというのは少ないんだろう
それで意味ない改行を消すのはめんどくさいというのならば、理にかなってる
大事ならコマンド置換のコマンドで最後にスペースでも強制的につければいいだろう

仕様考え今までそれを使ってる準じてshell作ってる他諸々はお前よりは賢いことは確かだから、お前が仕様バグと言っても鼻で笑われるだけだろうw

451:デフォルトの名無しさん
20/06/11 14:32:01 ibS6rTlb.net
>>433
そういう仕様だから。明確に書いてあるから
仕様を読んですらいないのが明らかだな

452:デフォルトの名無しさん
20/06/11 14:41:06.98 92eNOFs2.net
仕様を読み込んで全部把握してから
言語を使うやつなんていねーだろ

453:デフォルトの名無しさん
20/06/11 14:50:35.57 ibS6rTlb.net
おかしいと思ったら調べるのは普通だわな
自分が絶対正しいマンは知らんけど

454:デフォルトの名無しさん
20/06/11 15:13:40.27 92eNOFs2.net
>>437
それでなんでそういう仕様なのか、お前は調べたのか?

455:デフォルトの名無しさん
20/06/11 15:35:16 VbX/tETo.net
仕様は、読んで(どういう意図かを読んで)理解するものだぞ?
お前は仕様を理解するために仕様を説明してるとこを読むのが普通なのか?

456:デフォルトの名無しさん
20/06/11 15:39:01 92eNOFs2.net
>>439
だからどういう意図でそういう仕様になってるのかって聞いてるんだが
お前は仕様だったら、そうなってる理由とか何も考えないのか?

457:デフォルトの名無しさん
20/06/11 15:45:20 VbX/tETo.net
最後の改行(の続きに)は意味がない
と普通に読めるだろ。文(の意図)を読めなさすぎ

458:デフォルトの名無しさん
20/06/11 15:48:46 VbX/tETo.net
>仕様を読み込んで全部把握してから
という 仕様を読む読まない から、あっさり、
>なんでそういう仕様なのか
読んでどうというようにすり替えてるし、いつもの文を読めない読まない自己都合で言葉を吐くだけのやつか

459:デフォルトの名無しさん
20/06/11 15:49:29 92eNOFs2.net
最後の改行に意味がないという理屈なら
catコマンドとかも最後の改行は消えるべきでは?

460:デフォルトの名無しさん
20/06/11 15:51:14 VbX/tETo.net
物事は01ではできてないと理解しような
似たようなので違うとか普通にあるだろうに
しかし、いつものだなw

461:デフォルトの名無しさん
20/06/11 16:24:52.88 92eNOFs2.net
0か1ではないという当たり前ことを言うだけで
理由については一切何も考えてないってことがよく分かるなw

462:デフォルトの名無しさん
20/06/11 16:50:05.12 VbX/tETo.net
>0か1ではないという当たり前こと
らしいけど>>443って言うんだな
理由ww 場合による=01ではないだろに。ホントに文が読めない書けないみたいな感じ
てか、そのレスから明らかすぎるほど明らかにいつものだったな

463:デフォルトの名無しさん
20/06/11 16:58:04.41 VbX/tETo.net
まとめ
仕様を読んでない
(最初から)仕様読むのが当たり前か
疑問に思ったら仕様を読むのは当たり前
仕様読んで意図がわかるのか
~という意図だと読めばわかるだろ
AとBが違う
01じゃないんだから、違うのも普通にある
理由については一切何も考えてない
www
いつものむちゃくちゃ、ああ言えばこう言うというナゼか執着心だけが強いお人でした
Fin~

464:デフォルトの名無しさん
20/06/11 16:59:11.72 92eNOFs2.net
>>446
> 理由ww 場合による
その「場合」がどんなときかと聞いてるんだろ

465:デフォルトの名無しさん
20/06/11 17:00:17.93 VbX/tETo.net
お前のママじゃないんだから、なんでなんでにいつまでも答えるわけねえだろ、いい加減
ママに聞きなさい。じゃあね

466:デフォルトの名無しさん
20/06/11 17:03:50.41 92eNOFs2.net
な?結局、ここにそれを書けと言っても
書いてあるはず。それを見ろ。というだけで答えられないわけさ

467:デフォルトの名無しさん
20/06/11 17:05:12.16 VbX/tETo.net
>ここにそれを書けと言っても
何様なんだかな... お子様かw

468:デフォルトの名無しさん
20/06/11 17:06:49.63 92eNOFs2.net
ほらまた論点とは別の話をし始めてる。な、そういうとこだよ

469:デフォルトの名無しさん
20/06/11 17:08:27.87 VbX/tETo.net
オマいうwwwww



470:ホント、ツッコミしやすすぎて...すげえな。キリがないから、じゃ、ほんとに



471:デフォルトの名無しさん
20/06/11 17:38:44.92 92eNOFs2.net
シェルの話をしてるか、人の話をしているかで
だいたい区別できるよな

472:デフォルトの名無しさん
20/06/14 01:56:01.34 eRp+24Cv.net
マジか・・・、set -vって関数の中身は一行ごと表示してくれないのか・・・

473:デフォルトの名無しさん
20/06/14 10:56:11.88 rnZVTcdX.net
一時期,set -vとかを駆使してシェルスクリプトの自己文書化に拘ってた時期があった。
あまりに無毛だったんで止めたけどw

474:デフォルトの名無しさん
20/06/14 11:05:27.03 Wt6fQqct.net
パイパンかw

475:デフォルトの名無しさん
20/06/14 11:35:23.18 v+4IVp6H.net
>>457
頭ではなく下の方にしたのは優しさか

476:デフォルトの名無しさん
20/06/14 13:38:52.36 eRp+24Cv.net
>>456
自己文書化ってどんなの?

477:デフォルトの名無しさん
20/06/14 13:57:38.38 nNGIeJAo.net
プリンターに髪をsetするんだろう

478:デフォルトの名無しさん
20/06/15 17:56:08 XCzEYIlJ.net
>>459
例えば

while getopt opq:h opt; do
case $opt in
o) # -oオプションの説明。
...;;
p) # -pオプションの説明。
...;;
q) # -qオプションの説明。
...;;
h) selfdoc ;;
esac
done
みたいなオプション解析において,
-hオプションを読み取った場合に,
自分自身のシェルスクリプトを
?自己文書モード?みたく実行して,
case文の場合分けの先にある#コメント以降の文字を
次々出力する,みたいなこと。

こうすると-hオプション用に説明を用意する必要が無くなる。

479:デフォルトの名無しさん
20/06/15 17:57:43.88 ynPWkyxw.net
set -vでそれができるの?

480:デフォルトの名無しさん
20/06/15 19:25:07 XCzEYIlJ.net
>>462 お前は直前のレスしか覚えてられないのか?w

481:デフォルトの名無しさん
20/06/15 19:28:42 leNERqqh.net
コレかな?ドキュメンテーションコメント?

シェルスクリプト群のドキュメント書くの面倒だから自動でREADME.mdを生成する
URLリンク(qiita.com)

482:デフォルトの名無しさん
20/06/15 19:35:39 ynPWkyxw.net
>>463
だからset -vの話をしてるんだけど
できないから聞いてるの

483:デフォルトの名無しさん
20/06/17 01:36:20 IyVPQdQC.net
MacOS 10.13.4です

1.ディレクトリ内(旧フォルダ)でサイズが一番大きなファイルを抽出

2.リスト.txtのn行目にある文字列(Wordと定義)を抽出し

3.名前をWord.txtに変更&新フォルダに移動

という動作をさせたいです

#!/usr/bin/bash

n=1
LISTPATH="~/Desktop/リスト.txt"
PATH1="~/Desktop/旧フォルダ" #ここにファイル群が入ってます
PATH2="~Desktop/新フォルダ"

#1.最も大きなサイズのファイルを抽出しFILEとして定義
FILE=`ls -1 -S $PATH1/* | head -1`

#2.リスト.txtのn行目の文字列をWordとして定義
Word=`sed -n '$n'p '$LISTPATH'`

#3.旧フォルダにあるファイルをWordにリネームした上で新フォルダに移動
mv $PATH1/$FILE $PATH2/Word.txt


こんな感じで書いてみたのですが2.で"sed : 1 :invalid command code U"のようなエラーが出て先に進めません
ターミナルで直接コマンドを入力すると成功するのでおそらく変数やメタ文字の扱いが悪いのだと思います
ですがいろいろ調べて試してみたのですが一向に変わる気配がありません
間違っている点等、あるいは別の方法などありましたらご教授願います

484:デフォルトの名無しさん
20/06/17 01:55:47 IyVPQdQC.net
リストですが

りんご
みかん
ばなな
いちご

こんな


485:風に単語が入ってます それとややこしくて申し訳ないのですが sed -n のnはオプションです n行目の文字列を抽出、に関してはこちらのサイトに別の方法も載っていたので試してみたのですがやはりエラーが出てしまいました https://qiita.com/kazu56/items/2936ed6f337f288b25c9



486:デフォルトの名無しさん
20/06/17 02:26:54.62 iASQjm1j.net
>>466
>Word=`sed -n '$n'p '$LISTPATH'`
とりあえず変数はダブルクウォートで囲もう
shellcheckにかけてエラーや警告から学ぶと良いと思う

487:デフォルトの名無しさん
20/06/17 04:10:45 H0Dcbe9T.net
' を、" に変えたら「りんご」が取得できた

Word=`sed -n "$n"p "$LISTPATH"`

echo $Word

488:デフォルトの名無しさん
20/06/17 12:08:45.15 IyVPQdQC.net
>>468-469
ダブルクォーテーションに変えて無事"りんご"を取得できました
そして最終的に3は
mv $FILE $PATH2/$Word.txt
と修正して動作成功しました
見ての通り初心者ですので今後は変数の扱いも含めしっかり勉強していきます
shellcheckも使っていきたいと思います
ありがとうございました

489:デフォルトの名無しさん
20/06/17 17:45:33.68 ja1Hhc1L.net
Linuxで近似画像抽出って不可能?
解像度だけ違うとかpngをjpgにした同じ画像とか
画像相手にハッシュで判別とかアホらしいしさ

490:デフォルトの名無しさん
20/06/17 18:37:04.24 UMZJaayo.net
全くLinuxどうのという話ではないだろう
AIの分野だな。やろうと思えばLinuxでできるだろう。Linuxに限らずどのOSでもだけど

491:デフォルトの名無しさん
20/06/17 19:16:36.41 gquwKRiO.net
gqviewは非常に優秀

492:デフォルトの名無しさん
20/06/17 22:35:51.76 MW1JUI55.net
なぜシェルスクリプトのスレに書き込んだのかコレガワカラナイ

493:デフォルトの名無しさん
20/06/17 23:38:01.91 H0Dcbe9T.net
このshellcheck は有用
警告・エラーメッセージなどを、国際化(日本語化)すべき!

494:デフォルトの名無しさん
20/06/18 00:02:30.93 qaboPGNj.net
>>475
言いだしっぺ

495:デフォルトの名無しさん
20/06/18 11:07:19 kWYo0BCq.net
シェルスクリプトが国際化できんのだから,shellcheckにしても然り。

496:デフォルトの名無しさん
20/06/18 12:00:17.90 YEv8iIAV.net
だから言い出しっぺがということね

497:デフォルトの名無しさん
20/06/18 12:32:46.90 FBRgI1FZ.net
簡単なシェルスクリプトならググらず書けるようになったけどクッソ読みにくい
case使わずifだらけにする癖が付いたからだけど
コマンドの仕様が統一されてないからほんと迷うわ
lsみたいにオプションの集約や指定位置が自由なのもあれば融通が利かないのもあるし

498:デフォルトの名無しさん
20/06/18 16:03:41.90 kWYo0BCq.net
オプションの規約はここ
<URLリンク(pubs.opengroup.org)
に書かれている通り,
本来は被演算子は最後にしか持って来れないし,
オプションは “-o” という連字符一文字・英字一文字の形式しか認められてない。
lsはGNUとかで拡張されて,被演算子を途中に持って来れたり,
連字符二つ・英数字複数の長いオプションが使えたりするけど,
可搬性を重視するなら止めたほうがいい。
可搬性を重視しないなら,お好きにどうぞ,でも,
老婆心ながら言うと,困ると思う。
現に「lsではオプションの置き場所が自由なのに
このユーティリティではそうじゃない」
っていう風に困ってる訳だし。

499:デフォルトの名無しさん
20/06/19 11:57:59.31 xXxRIFf6.net
あぁGNU拡張はUNIX哲学に反するから悪ってことか
便利な分横着して悪


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"
}
こんな感じでな。コードのあちこちでこのような変換を行ってる。
あー、あほあほ、ばからしすぎる
コマンド呼び出しの前に外部コマンドで変換してしまうという発想がない


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