X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2021/02/25(木) 09:20:14.64ID:ZyJLXTlk
シェルスクリプトに関する総合スレッドです。

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

前スレ: シェルスクリプト総合 その35
https://mevius.5ch.net/test/read.cgi/tech/1606221440/

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】9
https://mao.5ch.net/test/read.cgi/linux/1607589861/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
0398デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:28:37.03ID:MTiaA6bM
コードに問題はないよ

で、お前はコードに問題あると思ってるの?問題ないと思ってるの?
その解決策は自分で思いつけないの?
いいからコードの話をしなよw

俺はもう答えたからねw
0399デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:31:53.66ID:dc8Xc+ex
答えてるんですけど
お前が戦う姿勢なのはいいが、ちゃんと読んでくれなきゃ、ずっこけるだけですよw

コードに問題なければいいなら、Makefileで問題なければいいってことになるだろうに
自分だけは例外は許されへんな
0400デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:33:48.52ID:MTiaA6bM
> 答えてるんですけど

次のレスは、どのレスで答えてるかを書くだけでいいよ
0401デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:34:52.15ID:dc8Xc+ex
何でそんなに偉そうなんだかなwww
>>391
>もちろんお前(に限らず)がそうしようがお前の勝手だから問題だとは思わんよ
0403デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:35:55.88ID:MTiaA6bM
>>401
コードに問題があるか、コードに問題ないか、答えてないよね
コードに問題あるかどうかは言わずに、
それでいいよって言ってるだけだよ
0405デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:37:44.50ID:MTiaA6bM
コードに問題がある or 問題がない・・・これはコードの問題
お前がそれでいいと思うならそうなんだろうな・・・これはコードではなく俺の話
0406デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:38:03.38ID:MTiaA6bM
訂正

コードに問題がある or 問題がない・・・これはコードの話
お前がそれでいいと思うならそうなんだろうな・・・これはコードではなく俺の話
0407デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:43:24.15ID:dc8Xc+ex
変な浅知恵でサイト探してからおかしいぞ
大丈夫か?w
クールダウンタイム必要か?

お前が、コードに「問題あるの?問題ないの?」のって聞いてきてるんだから、「問題だとは思わん」が答えになってるだろうに
何をおっしゃってるんですか。マジ大丈夫ですか?

「お前が」「他人のに」「ダメ出ししてるのが」アホみたいなながーいやり取りになる(俺だけではないのは上の方でも)主要因なのに、(Makefileでの利点をいまだに理解しようとしないのは置いておいても)何を自分ので問題ないでしょなんておっしゃってるんですか
カオスw
0410デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:49:39.74ID:MTiaA6bM
Makefileでの利点はタスクランナーじゃなくて
依存ファイルに基づいて何かを処理するのが得意ってことだよ
タスクランナーとしてならシェルスクリプトの方が得意だって最初に言ったじゃん
0411デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:49:55.09ID:7tHYoHIo
なに自分だけに都合が良いように誘導しようとしてんだか
そういう見え透いたのは、ホントにもうw浅知恵好きすぎだろう
矮小化した自分に都合に良いというちょっとナツいフレーズ

てか、結論は出てるだろう、なんか必死で逃げようとはしてるけど
コードに問題なければいいなら、Makefileで問題なければいいってこと
で終わること、とっくに終わってることだよ
0412デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:52:24.42ID:7tHYoHIo
>>410
そう思わないのが居てもいいだろうに(居てもいいとお前自身がもう言ってしまってるようなもんだしなw)、何をそんなに拘って否定してんだか
(Makefileでの利点はお前は今も理解できないのはもうしょうがないとしても)
0413デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:53:19.77ID:MTiaA6bM
>>411
> コードに問題なければいいなら、Makefileで問題なければいいってこと

シェルスクリプトのコードに問題なければいいなら、Makefileで問題なければいいってこと
ってどういう意味?

シェルスクリプトのコードに問題ないなら
シェルスクリプトのコードでいいでしょ?
0415デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:56:33.41ID:7tHYoHIo
浅知恵はすぐ働くくせに、少しは頭をちゃんと使おうな
コードに問題なければ と言い出したのはなぜか自問してみ

自分の都合の良いだけの良い張り繰り返しだなw
0416デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:57:37.45ID:MTiaA6bM
シェルスクリプトのコードが問題なければ
>>369のmake.shで問題ないという結論になる

それだけのことだと思うが?
0417デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:58:01.09ID:7tHYoHIo
>>414
すでに出てる
理解できないお前には無理のようだが。金くれるならじっくり教えてやるぞw
0418デフォルトの名無しさん
垢版 |
2021/04/06(火) 09:58:49.67ID:MTiaA6bM
すでに出てるものは全て否定したんで
その結果>>369のシェルスクリプトのコードになったんだよ
話の流れを理解してないようだね
0419デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:01:54.70ID:TYYwd7pV
>>369
シェルスクリプトのオプションの話をしてたはずなのに、ただのターゲットに変えるとか、コスいことすんな!w

ちなみにもともとは、makefileでは「タスク表示」ができない、って不当なクレームがあっただけの話やったもよう。
おまえ、忘れてるやろ?w
0420デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:02:58.82ID:7tHYoHIo
>>416
>「お前が」「他人のに」「ダメ出ししてるのが」アホみたいなながーいやり取りになる(俺だけではないのは上の方でも)主要因

>コードに問題なければいいなら、Makefileで問題なければいいってこと
>で終わること、とっくに終わってることだよ

お前のの良し悪しなんて本筋とは関係ない、なぜなら、お前が拘ってるのは他人の(Makefile使うな)に対してだろうに

>>418
否定してると思い込んでるのはお前だけだぞ。浅知恵でのでしかないからなw
0423デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:04:01.45ID:MTiaA6bM
> なぜなら、お前が拘ってるのは他人の(Makefile使うな)に対してだろうに
何の話ですか?そんな話はどのレスでもしてませんよ
0425デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:05:07.70ID:MTiaA6bM
>>419
> ちなみにもともとは、makefileでは「タスク表示」ができない、って不当なクレームがあっただけの話やったもよう。

はい、自分で作らないとできませんよね?
間違ってますか?
0426デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:08:05.69ID:7tHYoHIo
何を言ってるんだかなあ
今まで散々Makefileなんて使わないでシェルスクリプトでいいだろう(シェルスクリプト書けないのwとかさえ)と、Makefileいいよって言っている人に突っかかってたくせに

ね、
>おまえ、忘れてるやろ?w
いつものしょっちゅうやってることだけどなww
0427デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:09:04.06ID:7tHYoHIo
止まれ、アホみたいにながーい要因が無くなった(忘却された)ようで終わりだな
0428デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:09:12.04ID:MTiaA6bM
> Makefileいいよって言っている人に突っかかってたくせに

Makefileいいよって言ってる人は
どこのレスの話ですか?
0429デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:10:37.68ID:7tHYoHIo
まさかmakeとか言うんじゃないだろうな、まさかな
何をおっしゃってるんですか、誤魔化すにも馬鹿すぎる誤魔化しすぎですよ
0430デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:11:34.82ID:TYYwd7pV
>>370
並列実行させたくなければ、makeは-j 1するだけで充分合理的に実行されるんやで?

ところが、シェルスクリプトで>>298みたいなことしたら、かならず並列実行になるがな。w
prepareは重いっつってんのに全無視やし。w
おまえのほうがbgに夢見すぎやろ。w
0431デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:11:54.30ID:MTiaA6bM
もしかしてこれ>>286ですか?

> >>265
> そんなんするくらいなら、makefileのほうが万倍マシやな!w
> makeと違って、個別ターゲットの指定もできないし。

先にシェルスクリプトのコードが否定されたわけですが
そのシェルスクリプトのコードは問題ないと同意が取れたんですが?
0433デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:14:01.22ID:TYYwd7pV
あと、makeの-nとか-qとかのオプションを、シェルスクリプトで簡単にやる方法も頼むわ。
0435デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:15:34.36ID:MTiaA6bM
>>370
> 並列実行させたくなければ、makeは-j 1するだけで充分合理的に実行されるんやで?
POSIXじゃないので実行できない場合があります

> ところが、シェルスクリプトで>>298みたいなことしたら、かならず並列実行になるがな。w
え?そんな話今はじめて出ましたよねw

並列実行したくないなら & を取るようにしましょう
0437デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:19:48.49ID:MTiaA6bM
>>433
> あと、makeの-nとか-qとかのオプションを、シェルスクリプトで簡単にやる方法も頼むわ。
簡単だね

makeの-n
DRY_RUN=1
run() {
 if [ "$DRY_RUN" ]; then
  echo "$@"
 else
  "$@"
 fi
}
run hage hage

-qはタスクランナーとは関係ないな
依存関係があるものに関しては、シェルスクリプトからmakeを呼び出すっていいましたね
0439デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:24:39.26ID:TYYwd7pV
>>435
> POSIXじゃないので実行できない場合があります
-jオプションの話を出したのはおまえちゃうの?w
まあ、ヤな環境は、捨てるか逃げるかしたらええで。

> え?そんな話今はじめて出ましたよねw
> 並列実行したくないなら & を取るようにしましょう
prepareが重いという前提を無視すんな。w
たとえばprepare1時間、task*は1分だとすると、makeなら1時間3分、シェルスクリプトなら3時間3分やな。。。

おまえは、本当にそれでええと思っとるんか?
0440デフォルトの名無しさん
垢版 |
2021/04/06(火) 10:29:29.37ID:TYYwd7pV
>>437
まさかそんなふつうかつめんどい対応を、全ターゲットにいちいちやったらなアカンのか。。。

おまえはシェルスクリプトを使う、ワイはmakeを使う。
もうそれでええな。
0443デフォルトの名無しさん
垢版 |
2021/04/06(火) 11:27:15.77ID:WaPRNDqz
>>442
なるほど
使い勝手がいいからちょこちょこ(リアルでもw)使うエセ関西人やけど、
「やったらな」ってムズいなと感じ、もしかしたらとちょっと興味が出ただけです
お答えありがとうございましたw
0446デフォルトの名無しさん
垢版 |
2021/04/10(土) 21:39:22.59ID:1S4Ftpl7
>>237
# シェルスクリプトマガジン vol.30
# POSIX原理主義の逆襲
url=$( echo '/M57C8NB70B/pd/koobe-哲寛仲當-03-lov-ンジガマトプリクスルェシ/pj.oc.nozama.www//:sptth' | rev )
/usr/bin/firefox "$url"
xdg-open "$url"
# /usr/bin/google-chrome "$url"
0449デフォルトの名無しさん
垢版 |
2021/04/11(日) 13:26:48.64ID:kxus16p0
>>250
デスクトップ向けlinuxだと4KiBくらい貯めるのかな
改行のありなしやら入出力がターミナルかやら(test -t)で決めてるみたい?
tr -d \\nで改行絞った小さなテキストが延々と出てこなかったりするな
何が起きてるのか正直分からん
0451デフォルトの名無しさん
垢版 |
2021/04/14(水) 19:37:11.29ID:35zwdl55
> ・csh/tcshでのシェルスクリプトは*まったく推奨しません*

マジだった。ちょっと興味本位でやってみたら
変数に改行を入れようとしただけで力尽きるとは思わなかったわw
0452デフォルトの名無しさん
垢版 |
2021/04/15(木) 03:22:43.97ID:06Qz2l+r
>>2の最後の行、ゆうなって馬鹿みたいだから正しい言葉遣いに直してほしいなぁと思うのは私だけ?
0455デフォルトの名無しさん
垢版 |
2021/04/15(木) 10:26:01.70ID:CT+ncMKm
半分ネタやろ。
どうでもええわ。

どうしてもイヤなら、次スレを自分でたてて直せ。
0457デフォルトの名無しさん
垢版 |
2021/04/15(木) 11:49:33.19ID:CT+ncMKm
$SHELLOPTSに「interactive-comments」と入ってるんだけど、これは何?
man bashには記述がない。。。
0460デフォルトの名無しさん
垢版 |
2021/04/15(木) 13:42:52.38ID:EYZytY4L
>>456
あざっす
システムプログラミングアレルギー(manで2/3出てきたらそっ閉じ)なもんで…

sedとか-u(unbufferd )オプション付いてていいね、チョロチョロ出てくるのも想定してるんだろう
他はstdbuf効くならば試行錯誤って感じで凌いでるけど、もう腹括る時だろうか…
0461デフォルトの名無しさん
垢版 |
2021/04/15(木) 13:47:44.84ID:EYZytY4L
>>451
ちょうど'94年のcomp.lang.unixのfack読んでたとこだけどcshナウいぜって空気でノスタルジー
問題のリダイレクト関連は(入れ子)でサブプロセス内/外のリダイレクトを切り分け頑張るアンサーが面白かったです
0463デフォルトの名無しさん
垢版 |
2021/04/15(木) 14:02:10.00ID:ddLCV2xW
いまもcsh/tcsh使ってる人っているんだろうか?
shが神に見えるんだが
shからすれば、csh/tcshはcmdと同レベル
0464デフォルトの名無しさん
垢版 |
2021/04/15(木) 14:31:45.46ID:Hr/L3ezh
昔のshはそれはそれでクセがあったみたいだぞ、faqによると
誰もが一度は躓く
cmd |while ..
do change v
done
echo $v
問題ももっと酷くて、whileへ<inすらもアウトだった

そもそもリダイレクトはフォークする必要無いよね?バグみたいなもん?
なおパイプラインはフォークしてナンボなので合理的な設計だと思ってます
オプションlastpipe提供が現実的な妥協点かなと
0465462
垢版 |
2021/04/15(木) 14:33:04.56ID:Hr/L3ezh
です
0466デフォルトの名無しさん
垢版 |
2021/04/15(木) 14:42:31.76ID:gZ/E9OPr
>>460
ちなみに、
unbufferdだけでいいんじゃあって場合、
setbuf -o0 command1 | setbuf -o0 command2 | command3
setbuf -o0 command4 | command5
...
でなくて、冒頭で、
export LD_PRELOAD='/your/location/libstdbuf.so'
export _STDBUF_O=0
ってすると、以下外部コマンドは全て setbuf -o0 をすることになる
0467デフォルトの名無しさん
垢版 |
2021/04/15(木) 14:56:50.94ID:Hr/L3ezh
>>466
環境変数という手があったか
(いざ困るまでは)もちろんバッファはあった方が良いので、exportするスクリプトを書くと親からうっかりsourceしてしまいそうで…

env/インライン代入 パイプライン
にしといた方が安全そうですかね?
0468デフォルトの名無しさん
垢版 |
2021/04/15(木) 15:03:30.09ID:Hr/L3ezh
そもそもsourceしまくるのがお行儀悪いから、そっちを控えるべしなのかな?
何でもシェル関数にしてそれをソースしまくるパッケージを入れてしまって、bash -xオプション付けると何か操作する度に画面が数ページ流れてうんざりした経験が…
0469デフォルトの名無しさん
垢版 |
2021/04/15(木) 15:41:44.39ID:CT+ncMKm
>>458
ども。
探し直したよ。
あー、$SHELLOPTSではハイフンだけど、manページだとアンダーバーになってんな。。。
0471デフォルトの名無しさん
垢版 |
2021/04/15(木) 19:33:19.08ID:hKlH1+Q2
>>467
>env/インライン代入 パイプライン
stdbufを使うのと変わらないんじゃない
使うの局所化したいんだったら ( ) でサブシェルにするとかかな
0472デフォルトの名無しさん
垢版 |
2021/04/17(土) 05:11:50.36ID:YdwasajV
>>446
URL=$( echo '/swenybb/ten.hc5.enildaeh//:sptth' | rev )
TMP_DIR=~/tmp/5ch; DOC=${TMP_DIR}/index.php; mkdir -p ${TMP_DIR}
wget --output-document=${DOC} ${URL} || exit 1
iconv -c -f Shift_JIS -t utf-8 ${DOC} \
| grep '2021' | awk -F '</a> <br>' '{print $1}' \
| awk -F '</font>]' '{print $2}' > "~/Documents/5ch_dv.txt"
i=1; while true; do
cut --bytes=1-210 "~/Documents/5ch_dv.txt" | shuf -n 2; sleep 10; done
0473デフォルトの名無しさん
垢版 |
2021/04/17(土) 19:55:09.09ID:woV5WRvk
URL=$( echo 'fdr.wkwen/ssr/pj.en.oog.hcraes//:sptth' | rev )
TMP_DIR=~/tmp/goo; DOC=${TMP_DIR}/index.php; mkdir -p ${TMP_DIR}
wget --output-document=${DOC} ${URL} || exit 1
iconv -c -f utf-8 -t utf-8 ${DOC} | grep -v 'gooウェブ検索 急上昇ワード' \
| grep 'title' | awk -F '<title>' '{print $2}' \
| awk -F '</title>' '{print $1}' >> "$HOME/Documents/goo_web.txt"
while read KEYWORD; do
URL=$( echo '=yreuq_hcraes?stluser/moc.ebutuoy.www//:sptth' | rev )""$KEYWORD""
firefox "$URL"; sleep $( shuf -i 10-21 -n 1 )
done < "$HOME/Documents/goo_web.txt"
0475terai
垢版 |
2021/04/27(火) 17:28:08.57ID:K85aNu+Y
Linux(CentOS7)からsshで192.168.1.50(windows)に接続して、grepでD:\samba-backup\tmpの中を探して、
"bk-日付.tar"という名前のファイルがあれば"backup = O"、なければ"backup = O"と表示されるようにしたいと思い以下のようにシェルスクリプトを書きました。
if expect -c "
set timeout 5
spawn ssh administrator@192.168.1.50 cmd /c dir /b d:\\samba-backup\\tmp
expect \"password\"
send \"パスワード\n\"
expect eof
exit
"|grep "bk-$(日付).tar"
then echo "backup = O"
else echo "backup = X"
fi
実行すると"backup = O"と表示されると思ったのですが、"backup = X"と表示されます。tmpフォルダには"bk-日付.tar"という名前のファイルが確かに置いてあります。どうすれば"backup = O"と表示されるようになるのか教えてください。よろしくお願いいたします。
0476デフォルトの名無しさん
垢版 |
2021/04/27(火) 21:13:37.71ID:veDN2Ote
複雑な問題は複数のより単純な問題に分割すればいいんじゃないかな
まずは expect だけ実行して何が出力されるかみるところから始めなよ
0477デフォルトの名無しさん
垢版 |
2021/04/27(火) 22:41:50.05ID:1A6wmpHM
batの問題じゃないの
0478デフォルトの名無しさん
垢版 |
2021/04/28(水) 06:11:06.05ID:M5uDUSOh
"|grep "bk-$(日付).tar"
tmpフォルダには、"bk-日付.tar"という名前のファイルが確かに置いてあります

この「日付」って、日本語を使っているの?
基本的に、半角英数字・ascii 以外は、動かないのでは?

日本語には、CP932・UTF-8/16/32 の4つのエンコードがあって、
各OS・ファイルシステム・端末の入出力によって異なるから
0479デフォルトの名無しさん
垢版 |
2021/04/28(水) 06:38:05.23ID:xybfukyI
中途半端の知識。自分が詳しいつもりになってそう。
素人同然だから1から勉強してね
0480478
垢版 |
2021/04/28(水) 06:50:30.51ID:M5uDUSOh
そもそも、Linux から、cmd とか、Windows のコマンドを呼べるの?
Remote Login してるの?

PuTTY, TeraTerm, VSCode のRemote SSH などを使えば?
0482terai
垢版 |
2021/04/28(水) 10:22:09.08ID:D1qJru6v
spawn ssh administrator@192.168.1.50 cmd /c dir /b d:\\samba-backup\\tmp
のところを
spawn ssh administrator@192.168.1.50 cmd /c dir /b d:\\\\samba-backup\\\\tmp
にしたらうまくいきました。ご迷惑をおかけしました。
0483478
垢版 |
2021/04/28(水) 10:55:25.45ID:M5uDUSOh
例えば、Windows 10, WSL2, Ubuntu 18.04, Ruby では、
Linux 側から、Windows側のC ドライブへアクセスできる

パス区切りも、/ を使える。
\ では、各端末でのエスケープを考慮しなければならないので、非常に難しい

Dir.glob( '/mnt/c/Users/Owner/Documents/test/**/*.txt' ) do | full_path |
next if File.directory? full_path # ファイルだけを処理する

p full_path
end
0484デフォルトの名無しさん
垢版 |
2021/04/28(水) 11:50:29.51ID:Ttx7vHwT
sshを使うなら、ええかげんにexpectなんかせんでもええようにしたほうがええんちゃう?
鍵ファイルを使えば。
0485478
垢版 |
2021/04/28(水) 12:15:20.00ID:M5uDUSOh
Ruby にも、expect モジュールがある
0488デフォルトの名無しさん
垢版 |
2021/04/28(水) 18:13:04.67ID:xybfukyI
ファイルの中に書いたマーカーの中に別のファイルを挿入するにはどうしたらいい?
例えばこんな感じのファイルがあったとして、<marker>〜</marker>の中身を
別のファイルに入れ替えたい。posixコマンドだけで

aaa
bbb
<marker>
ccc
ddd
</marker>
eee
fff
0491デフォルトの名無しさん
垢版 |
2021/04/28(水) 18:46:45.34ID:xybfukyI
C言語でもどんな言語でも書けるというだけのことなら
私も知ってますが・・・
0494デフォルトの名無しさん
垢版 |
2021/04/28(水) 19:02:11.38ID:snsrMSzN
csplitで2回割って3つに、真ん中を捨てcatを想定したが、regexで割れるので<marker>...</marker>を指定して一回で割った方が素直かもしらん
ファイル内に複数回マークアップが現れる時も、マークアップ+1個に割れるのでスケーラブル
■ このスレッドは過去ログ倉庫に格納されています

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