2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :名無しさん@お腹いっぱい。:2018/08/02(木) 05:22:16.82 .net
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
 最新の仕様はこちらへ http://pubs.opengroup.org/onlinepubs/9699919799/
 (左上の「Shell & Utilities」 から参照することができます。)
・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。
  http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
  http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
 質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
シェルスクリプト総合 その27
https://mevius.5ch.net/test/read.cgi/unix/1525337663/

95 :名無しさん@お腹いっぱい。:2018/11/11(日) 23:47:57.65 .net
>>87
それで出てくるのは /usr/bin[ の方のmanじゃないだろうか

96 :名無しさん@お腹いっぱい。:2018/11/15(木) 14:21:20.04 .net
bash の場合。

$ type [
[ is a shell builtin

$ help [
[: [ arg... ]
Evaluate conditional expression.

This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.

97 :名無しさん@お腹いっぱい。:2018/11/21(水) 22:42:24.51 .net
sedで\1を変数名としていっぺんに異なる部分を異なる変数の内容で変換できませんか?

sed -e "s/<\(.*\)>/${\1}/g"
こんなかんじの

98 :名無しさん@お腹いっぱい。:2018/11/29(木) 16:58:28.90 .net
#!/bin/bash
# 変数URL, ETAGには既に適切な値が入ってるとする
OPT=('--header' "'If-None-Match: ${ETAG}'")
curl "${OPT[@]}" "${URL}"

こんなスクリプトを書いたけど、curlと鯖のやりとりを覗くと、リクエストヘッダのIf-None-Matchの行にシングルクォーテーションが付いて

'If-None-Match: (ETAGの値)'

と送られてしまう。で、試しにcurlの行を

echo "curl ${OPT[@]} ${URL}" > /tmp/tempfile
. /tmp/tempfile

と書き換えて実行すると、ちゃんと正常に動く。man bashを読んだりbashの引用符の扱われ方をググってみたりしても、何が何だかさっぱり分からない。
どなたか助けてくれませんか。

99 :名無しさん@お腹いっぱい。:2018/11/29(木) 18:06:56.14 .net
自己レス
curlだからとか関係ないな。変数にシングルクォートで囲ったものが入ってて、それをダブルクォートで囲った配列展開してるんだから、そのパラメーターはそのままシングルクォートつきになって当然。
しかし、ETAGはダブルクオートを含むしhttpリクエストヘッダはスペースを含むから、全体をシングルクォートで囲まなきゃならんのだよな。
やっぱどのタイミングでどのクォートがどう展開されるのか、一段階ずつ追いかけてみるしかないのかな

100 :名無しさん@お腹いっぱい。:2018/11/29(木) 21:56:13.42 .net
なんか混乱しとるなw
まあ、ダブルクォートは、他言語を使っている人からすれば
直感に反する機能だってことに、俺も最近気づいたんだけどな
ただどこがどう違うかを言葉で説明したことがわけじゃない。やってるみるか?

・シェルスクリプトは文字列として展開されて実行されているようでそうではない
・ダブルクォートは文字列を囲う機能ではなく、変数展開の挙動を変えるエスケープの一種
この二つに集約されるかなぁ

> しかし、ETAGはダブルクオートを含むし
これ関係ないんだわ

OPT=('--header' "If-None-Match: ${ETAG}")
だと
OPT=('--header' "If-None-Match: "686897696a7c876b7e"")
こうなってしまい
OPT=('--header'   "If-None-Match: "  686897696a7c876b7e  "")
のように解釈されると思ってしまうが違う。
別に文字列展開されてから、動くわけじゃない

ダブルクォートは「 If-None-Match: ${ETAG} 」の部分を一つの引数として
扱いますよー(ただし中の変数は展開されますよ)という意味。
変数の中にダブルクォートが入っていようが改行が入っていようが関係ない

またダブルクォートはそれだけの機能ではなく $@ が入っている場合に異なる挙動をする
"$@" が入っている場合、一つの引数ではなく複数の引数として扱われる
例えば引数$1〜$5が存在する場合、"$@" は "$1" "$2" "$3" "$4" "$5" と等価
また"foo$@bar" となっていた場合、 "foo$1" "$2" "$3" "$4" "$5bar" と等価
引数が一つなら "foo$1bar" だし、引数がゼロの場合は、書かなかったのと同じとなる("" 空文字にはならない)

このように文字列として囲う機能じゃなくて、中に入ってる文字や変数の解釈の仕方に影響を与える機能

101 :名無しさん@お腹いっぱい。:2018/11/29(木) 22:00:40.89 .net
ちなみに "$@" を複数の引数に展開されたくなければ "$*" を使う

102 :名無しさん@お腹いっぱい。:2018/11/30(金) 06:16:21.18 .net
>>100-101
ありがとう。おかげで、サクッと片付きました。素直に

OPT=('--header' "If-None-Match: ${ETAG}")
curl "${OPT[@]}" "${URL}"

で何の問題もなく動作しました。最初にcurlについて調べてたときにETAGを使う例でシングルクォートが使われてたのに、ずっと脳味噌が引っ張られてたようです。
上の行で変数に入れる時点で、スペースを含む一つの文字列として扱われてるんだから、あとはその中身がなんであるかに関係なく、"$[@]"で展開すればいいわけですね。

ありがとうございました。

103 :名無しさん@お腹いっぱい。:2018/12/25(火) 18:37:21.02 .net
bashでログ出力処理を一括でやるにはどうすれば良いですか?

powesshellだと、Start-Transcript に対応するコマンドを教えてください

104 :名無しさん@お腹いっぱい。:2018/12/26(水) 01:04:21.34 .net
>>103
何がしたいのかよくわからないが
シェルスクリプト内の標準出力と標準エラー出力をファイルに出力するなら
#!/bin/bash
exec >script.log 2>&amp;1
...

105 :名無しさん@お腹いっぱい。:2018/12/26(水) 08:34:29.57 .net
>>104
何したいかよくわからんって、
パワーシェルでいうStart-Transcriptをやりたいの
bashで一行ずつリダイレクトつけないとダメとかダサすぎる

106 :名無しさん@お腹いっぱい。:2018/12/26(水) 08:47:38.26 .net
回答ちゃんと読め

107 :名無しさん@お腹いっぱい。:2018/12/26(水) 09:08:14.92 .net
PowerShellなんぞ興味が無いから知らんという人が多かろう
標準出力と標準エラー出力をファイルとコンソールの両方に出したいと言えばいい

知ってるがお前の態度が気に入らない(AA略)

108 :名無しさん@お腹いっぱい。:2018/12/26(水) 18:22:57.16 .net
生意気だな

109 :名無しさん@お腹いっぱい。:2018/12/26(水) 18:30:53.30 .net
ドザはどこ行ってもあれだな

110 :名無しさん@お腹いっぱい。:2018/12/26(水) 19:04:39.84 .net
ドザがー ドザがー 

111 :名無しさん@お腹いっぱい。:2019/01/10(木) 14:22:50.61 .net
やっつけ
$ {
> echo foo
> ECHO bar
> } 2>&1 | tee result.txt
foo
ECHO: コマンドが見つかりません

112 :名無しさん@お腹いっぱい。:2019/01/26(土) 23:47:05.51 .net
FreeBSD の /usr/bin/man で、
  if { sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1; then
という記述があるんですが、これって何をしているんでしょう。
・標準エラー出力を捨てている
・3 を 標準入力の指す先 (tty) に設定?
・0 を ↑の3に設定?

3>&1 して 1>&3 なら退避目的かなと思うんですが、これは違うので、
意図がわからないです。

ソースはここです。
https://github.com/freebsd/freebsd/blob/master/usr.bin/man/man.sh#L646

113 :名無しさん@お腹いっぱい。:2019/01/28(月) 19:18:42.39 .net
・MANWIDTH=ttyのときはmanの標準出力1の横幅を取得したい。
・sttyの操作対象端末は標準入力0で、出力先は標準出力1。
・a>&b は dup2(b,a) のことで、左を使うと実体は右になる。
・標準エラー出力2は捨てる。
という前提で、
sizes=$($STTY size 0>&1 2>/dev/null) と書くと、
sttyの標準出力1は$()に取られてるから、manの標準出力1とは別物になって、
正しい端末をsttyできない。
{ sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1 は、1が取られ
てるなら3を中継すれば安全じゃねと書いたものと推測される。
{ sizes=$($STTY size 2>/dev/null); } 0>&1 と書けば十分なはず。

114 :名無しさん@お腹いっぱい。:2019/01/29(火) 01:14:27.65 .net
findした結果を1行づつ配列に代入したい場合にはどうすればよいでしょうか?
当方が書いたshellだと、検索したい文字列に空白があるケースだと
そこで要素が別れてしまいます。

array=$(find ${HOME}/animal -type d -iname "*検索したい文字列*")

115 :名無しさん@お腹いっぱい。:2019/01/29(火) 12:56:34.68 .net
IFSを改行のみにする

116 :112:2019/01/30(水) 08:38:21.70 .net
>>113
ありがとうございます!
リダイレクトにstdin/stdoutの差し替え的な使い方があるとか、sttyはstdinを見るとか、sttyがstdinを見てもstdoutを見てもそれが端末を指しているなら同じこととか、数枚目からうろこが落ちました。

しかしそもそもsttyはデフォルトのstdin見ておけばいいんじゃね、とも思ったり。command |man 的な使い方ってあったっけなぁ。

117 :名無しさん@お腹いっぱい。:2019/02/05(火) 14:26:11.34 .net
少々スレ違いですがお許しください

OS 組み込みの tcsh をバージョンアップしたいのですが、
シェルスクリプトの挙動が変わってしまうのが怖くて、なるべく
コンパイル時オプション(configure オプション)を揃えたいのですが

バイナリしかない場合に、コンパイル時オプションを調べる方法ってないですかね?
## 例えば ISC BIND の -V オプションみたいな

118 :名無しさん@お腹いっぱい。:2019/02/07(木) 03:39:18.86 .net
少々じゃないくらい違うなあ

119 :名無しさん@お腹いっぱい。:2019/02/07(木) 03:40:20.92 .net
しかもマルチかよ

120 :名無しさん@お腹いっぱい。:2019/05/25(土) 14:36:47.91 ID:LVSH0hupc
find -print0した結果を1項目ずつ配列に代入したい場合にはどうすればよいでしょうか?
IFSを\0にしようとしても駄目みたいです。

121 :名無しさん@お腹いっぱい。:2019/07/27(土) 21:39:15.96 .net
ログインシェルでfishを使う時、
https://gist.github.com/mitukiii/4954559
できたらやり方教えてください

$ myCommand
タブキー押すと
$ myCommand
foo -- do foo
bar -- do bar
unk -- do toilet
って候補と1行説明表示されて
$ myCommand f
でタブーキー押すと
$ myCommand foo
と補完される
方法を知りたいです
これできたら重いzshから魚に乗り換えられる

122 :名無しさん@お腹いっぱい。:2019/07/30(火) 12:52:38.09 .net
ここはシェルスクリプトのスレです。
シェルの使い方のスレではありません。
スクリプトの話をしてください

123 :名無しさん@お腹いっぱい。:2019/07/30(火) 22:27:15.09 .net
具体的に何を語ったらいいの

124 :名無しさん@お腹いっぱい。:2019/07/31(水) 19:16:20.41 .net
シェルスクリプトだけで実装した一番高速なFizzBuzzはどんなものかとか

125 :名無しさん@お腹いっぱい。:2019/08/01(木) 10:04:58.33 .net
yash使てる?

126 :名無しさん@お腹いっぱい。:2019/08/01(木) 14:04:09.49 .net
使えてないという報告は一つもない

127 :名無しさん@お腹いっぱい。:2019/08/01(木) 22:41:59.49 .net
「使てる(つこてる)?」は「使っていますか?」という意味の質問であって、使用可能かどうかを聞いてる訳では無いのでは

128 :名無しさん@お腹いっぱい。:2019/08/01(木) 23:04:57.30 .net
真面目君か

129 :名無しさん@お腹いっぱい。:2019/08/05(月) 09:18:07.69 .net
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ

と書かれたテキストファイルを作りたいです

echo -e ほにゃらら"\n"ほんじゃらら > index.txt
seq -f "%g あいう" 0 5 > index.txt

ここまではわかったんですが、seqで連番を書き出す時に番号と番号の間の行に「かきく」を入れて最後の行に「さしすせそ」を加えるやり方教えてほしいです

130 :名無しさん@お腹いっぱい。:2019/08/05(月) 10:32:33.45 .net
awkとかじゃいかんの

131 :名無しさん@お腹いっぱい。:2019/08/05(月) 11:55:34.38 .net
>>130
ありがとうございます
調べてみました

cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
あいう
EOF

seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt

echo さしす >> index.txt

132 :名無しさん@お腹いっぱい。:2019/08/05(月) 11:55:45.48 .net
こうやると

ほにゃらら
ほんじゃらら
あいう
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
かきく
さしす

と出力されました
最後から2行目の「かきく」を出さないやり方が分からないです

133 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:05:17.31 .net
ブレース展開

134 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:11:44.60 .net
一応これでうまくいきました

cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
かきく
EOF

seq 0 5 | awk -v 'ORS= あいう\nかきく\n' '{print $1}' >> index.txt
sed -i -e '$d' index.txt
echo さしす >> index.txt

135 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:13:50.09 .net
>>133
自分のやり方はなだったらしそうなのでそのキーワード調べてみます

136 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:28:22.64 .net
えー、難しい...
>>130はこんなもんしか考えてなかったけど

awk 'BEGIN{print"ほにゃらら\nほんじゃらら";for(i=0;i<6;i++){printf"かきく\n%d あいう\n",i};print"さしすせそ"}'

137 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:28:39.74 .net
>>129
cat <<END >index.txt
ほにゃらら
ほんじゃらら
$(printf 'かきく\n%s あいう\n' $(seq 0 5))
さしすせそ
END

138 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:29:43.26 .net
あ、バックスラッシュが円記号になってしまった...

139 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:30:25.69 .net
cat > index.txt << "EOF"
ほにゃらら
ほんじゃらら
EOF

printf "かきく\n%s\n" {0..5}あいう >> index.txt

これだと大分短くて出来たけど、数字と「あいう」の間にスペースが入れられない

140 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:32:03.53 .net
被ってしまった
みなさんありがとうございます
質問ぬしの自分は>>139です
135と136のやり方調べてみます

141 :名無しさん@お腹いっぱい。:2019/08/05(月) 12:43:19.31 .net
>>137
catで書き出すファイルの中でprintfをやって、そのrintfの中でseqで連番作るんでね
これだとファイルへの書き込みは1回ですみますね

>>136
これも> index.txtで終えれば1回ですみますね
だけどawk難しいです
がんばって135のやり方理解できるようにします

142 :名無しさん@お腹いっぱい。:2019/08/05(月) 13:06:08.43 .net
>>141
> これだとファイルへの書き込みは1回ですみますね

どんな方法で作るにせよ { } で括れば一回にまとめられるよ

{
printf '%s\n' 'ほにゃらら'
printf '%s\n' 'ほんじゃらら'
printf 'かきく\n%s あいう\n' $(seq 0 5)
printf '%s\n' 'さしすせそ'
} >index.txt

143 :名無しさん@お腹いっぱい。:2019/08/05(月) 15:17:00.15 .net
>>142
こんな方法もあるんですね
ありがとうございます

curlの標準出力の6行目を変数に入れて他の文字列と組み合わせて標準出力に出力したいです。
URL="hoge"
ROKU="curl -sS $URL | sed -n '6p'"
echo "あいうえお"$ROKU"さしすせそ"

しかし結果はこうなりました
あいうえおcurl -sS hoge | sed -n '6p'さしすせそ

144 :名無しさん@お腹いっぱい。:2019/08/05(月) 15:18:57.84 .net
>>143
続き
>>142
さんで教わった{}を使えばよさそうな気がするですがエラーになりました

145 :名無しさん@お腹いっぱい。:2019/08/05(月) 16:33:57.17 .net
printf "あいうえお"
$ROKU #chomp のように\nを消すパイプ必要だと思う
printf "さしすせそ"

146 :名無しさん@お腹いっぱい。:2019/08/05(月) 17:18:21.98 .net
>>145
echoじゃなくてprintfなら改行されないからあいうえおに続けて書けますね
だけど、このままだとROKUのところで改行されてしまうからさしすせそは2行目に来ちゃいますね

147 :名無しさん@お腹いっぱい。:2019/08/05(月) 18:01:04.99 .net
>>129
> と書かれたテキストファイルを作りたいです

こうすれば良いのでは?

cat<<HERE > index.txt
ほにゃらら
ほんじゃらら
かきく
0 あいう
かきく
1 あいう
かきく
2 あいう
かきく
3 あいう
かきく
4 あいう
かきく
5 あいう
さしすせそ
HERE

148 :名無しさん@お腹いっぱい。:2019/08/05(月) 19:41:32.36 .net
>>143
コマンドの標準出力を変数に設定したりコマンドの引数にしたりするには
「コマンド置換」 $(…) を使います

あと、「6行目」以外の部分も取り出したくなったときに curl を何度も実行したくはないので
curl と sed は分けておきたいところ

するとこんな感じ

PAGE=$(curl -sS "$URL")
ROKU=$(printf '%s\n' "$PAGE" | sed -n '6p')
NANA=$(printf '%s\n' "$PAGE" | sed -n '7p')
printf 'あいうえお%sさしすせそ\n' "$ROKU"
printf 'かきくけこ%sたちつてと\n' "$NANA"

149 :名無しさん@お腹いっぱい。:2019/08/06(火) 10:37:34.03 .net
>>147
複数行書く方法ありがとうございます

>>148
うまくいきました
ありがとうございます

150 :名無しさん@お腹いっぱい。:2019/08/29(木) 02:47:55.71 .net
$ bash -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
10

この動作ってPOSIX的にはどうなの?

151 :名無しさん@お腹いっぱい。:2019/08/29(木) 05:08:51.78 .net
読みづれーなw

bash -c '
unset a b
echo 10 | read a
# echo $a = 空
let b=a+10
echo $b
'

letはPOSIXにない
readはサブシェルなんだからaは空に決まってる
ごく普通の正しい動作

152 :名無しさん@お腹いっぱい。:2019/08/29(木) 05:09:53.11 .net
正しいコード

bash -c '
unset a b
echo 10 | {
read a
let b=a+10
echo $b
}
'

153 :名無しさん@お腹いっぱい。:2019/08/29(木) 23:22:24.50 .net
letまで考えて無かったすまん
まあ説明の為なのでそこは目をつぶってくれたまい

opensuzeなんだけども

$ ksh -c 'unset a b;echo 10|read a;let b=a+10;echo $b'
20
$

この動作ってPOSIX的にはどうなの?

154 :名無しさん@お腹いっぱい。:2019/08/30(金) 06:34:55.40 .net
バグ

155 :名無しさん@お腹いっぱい。:2019/09/10(火) 19:48:12.68 .net
curlのやり方教えてください
ブラウザのフォームにjsonを書いてポストボタンを押すとokが出るけどターミナルからcurlでやろうとすると、ボディが空だとなり送信出来ません
書き方間違えていますか?

https://i.imgur.com/Nvm7CMj.jpg

156 :名無しさん@お腹いっぱい。:2019/09/11(水) 14:49:50.58 .net
ブラウザの開発ツールからcURLでコピーした方が早そうだぞ

157 :名無しさん@お腹いっぱい。:2019/09/11(水) 15:08:13.17 .net
>>156
どうもありがとうございます
-H 'Content-Type: application/json'
を付けたら動きました

158 :名無しさん@お腹いっぱい。:2019/09/12(木) 17:05:57.53 .net
アプリの起動判定をしたいんですが
ps -alxw | grep アプリ名
2行より多ければアプリが起動してるんだと思いますけど確実な方法ありますか?

159 :名無しさん@お腹いっぱい。:2019/09/12(木) 17:48:19.11 .net
killall -0 アプリ名
とか?

160 :名無しさん@お腹いっぱい。:2019/09/12(木) 19:39:47.90 .net
>>159
どうもありがとうございます
そのコマンドで何も変えらなかったら起動中という事であってますか?

161 :名無しさん@お腹いっぱい。:2019/09/13(金) 07:33:53.20 .net
起動してないとわかっても、その直後に起動することも有るから
ロックを掛けないと確実にはならないけどな

162 :名無しさん@お腹いっぱい。:2019/09/14(土) 01:15:30.85 .net
pgrepでええやん、と思ったけど環境依存か

163 :名無しさん@お腹いっぱい。:2019/09/14(土) 02:03:14.71 .net
>>161
どの環境でも使えるロックの機構ってなにかある?

164 :名無しさん@お腹いっぱい。:2019/09/14(土) 03:45:32.29 .net
>>163
set -C もしくは mkdir

165 :名無しさん@お腹いっぱい。:2020/01/20(月) 04:38:26 .net
怒らないで教えて欲しいんだけど何でお前らPowerShell使わないの?
今やPowerShellの方が勉強会でドヤれるしちょまどなんかもPowerShellだってよ

166 :名無しさん@お腹いっぱい。:2020/01/20(月) 07:42:20 .net
>>165
なんでそんなに無意味な宣伝するの?

167 :名無しさん@お腹いっぱい。:2020/01/20(月) 13:22:02 .net
>>165
Dockerのalpine、debianなど、ほぼすべてのイメージでことごとく動かないから。
shで十分なのに、PowerShellなんて使いませんよw

168 :名無しさん@お腹いっぱい。:2020/01/20(月) 15:09:31.95 .net
>>165
linux のコマンド群が使えないから

169 :名無しさん@お腹いっぱい。:2020/01/21(火) 10:19:02 .net
ソースコードをダウンロードしてビルドしようとしたら…

ERROR: You must either be root or be able to use sudo

ビルドするのに root になれって? この時点で話にならないよ。

170 :名無しさん@お腹いっぱい。:2020/01/21(火) 11:46:33.77 .net
>>169
それってパワーシェルの話?

171 :名無しさん@お腹いっぱい。:2020/01/21(火) 21:58:33.32 .net
そのメッセージでググっても、インストール時のメッセージしか見つからないね
https://www.google.com/search?q=%22ERROR%3A+You+must+either+be+root+or+be+able+to+use+sudo%22

ビルドしようとしたら出たって言うから、
別の話か、嘘つきでは?w

172 :名無しさん@お腹いっぱい。:2020/01/21(火) 22:20:06.48 .net
>>169
エラーメッセージには「sudo を使え」と書いてあるが

173 :名無しさん@お腹いっぱい。:2020/01/22(水) 02:27:49 .net
とりあえず適当なことを言ってPowerShellを
貶めたかったんだろ?バレて逆効果になってるがw

174 :名無しさん@お腹いっぱい。:2020/02/17(月) 09:08:53.72 .net
grep 等の外部コマンド?を使わずに任意の文字列の最初に見つかる3桁の数字を得る方法があれば教えて下さい
(例えば、abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz だと567)

175 :名無しさん@お腹いっぱい。:2020/02/17(月) 12:51:47 .net
bashなら=~と、$BASH_REMATCH使えばできるんじゃね

176 :名無しさん@お腹いっぱい。:2020/02/17(月) 12:52:43 .net
>>174
おまえは俺かw

似たようなことをやったよ。grepで(笑)

外部コマンドを使わないなら、こうなるから面倒くさいんだよな。
できるけど面倒くさい。だから遅いけどgrepにした。

v=abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz
v=${v#"${v%%[0-9][0-9][0-9]*}"}
v=${v%"${v#[0-9][0-9][0-9]}"}

177 :名無しさん@お腹いっぱい。:2020/02/17(月) 13:01:06 .net
シェルスクリプトだと(bash依存は知らん)
マッチした部分を含めて削除はできるけど
マッチした部分を残したその他を削除が簡単にできないんだよね。

だから「マッチした部分を含めて削除」したら残りが
「マッチしなかった部分」になるのを利用して、
改めて全体から「マッチしなかった部分」を取り除くというのを前後でやればできる。

178 :名無しさん@お腹いっぱい。:2020/02/19(水) 01:25:53 .net
ありがとうございます
面倒でも前後から不要部分を取り除くしかないのですね

179 :名無しさん@お腹いっぱい。:2020/02/19(水) 03:44:34.80 .net
「マッチした部分を含めて削除」ってどうやるの?

180 :名無しさん@お腹いっぱい。:2020/02/19(水) 07:39:09.82 .net
>>179
${v%%[0-9][0-9][0-9]*} ってかいてあるやん

abc_4_de_99_fgh_ijklm_no_567_2_123_pqrst_uvwx_yz ・・・(1)

↓ ${v%%[0-9][0-9][0-9]*}

abc_4_de_99_fgh_ijklm_no_ ・・・(2)

↓ (1)ー(2)

567_2_123_pqrst_uvwx_yz ・・・(A)

↓ ${v%"${v#[0-9][0-9][0-9]}"}

_2_123_pqrst_uvwx_yz ・・・(B)

↓ (A)ー(B)

567

181 :名無しさん@お腹いっぱい。:2020/02/19(水) 12:18:21 .net
>>180
丁寧にありがとう!

182 :名無しさん@お腹いっぱい。:2020/02/21(金) 17:55:59.15 .net
今更だが>>180

× ${v%"${v#[0-9][0-9][0-9]}"}
○ ${v#[0-9][0-9][0-9]}"

だな

183 :名無しさん@お腹いっぱい。:2020/02/22(土) 16:29:53 .net
それらをPowerShellで書くとどうなるか?
一度でも考えてみたことはありますか?

184 :名無しさん@お腹いっぱい。:2020/02/22(土) 16:45:28.02 .net
PowerShellで書くとLinuxで動かすのが大変になります。

185 :名無しさん@お腹いっぱい。:2020/02/26(水) 03:34:54.75 .net
5年くらいするとセキュリティパッチが出なくなって使用禁止になるから
また作り直しになるんだろうどうせ。

186 :名無しさん@お腹いっぱい。:2020/03/13(金) 23:32:50.67 .net
例えば中身が
3,soba,inarizusi,hishimoti,ushioziru ...
のcsvファイルなら最初の数字が3なので以下の文字列の3番目をつないで soBa inArizusi hiShimoti usHioziru ... でbash ... というように
csvファイルの最初の値で以降の処理が変わる場合はどうすればいいでしょうか?
一度ファイルを最後まで空読みすれば簡単なのですが、読み込みは1度で終わらせたいです。

187 :名無しさん@お腹いっぱい。:2020/03/14(土) 16:01:32.08 .net
宿題は自分でやりなよ

188 :名無しさん@お腹いっぱい。:2020/03/14(土) 17:54:51 .net
>>186
なんでそんな分かりづらい説明するんだ?

189 :名無しさん@お腹いっぱい。:2020/03/14(土) 17:55:37 .net
全く意味がわからん。
誰か翻訳してくれ

190 :名無しさん@お腹いっぱい。:2020/03/14(土) 18:20:44 .net
>>186
引数で単語と数字nを受け取ってn文字目の単語を返す関数を書けばいいだけ

191 :名無しさん@お腹いっぱい。:2020/03/14(土) 18:34:21 .net
>>190
日本語ではなくてbashでお願いします!!

192 :名無しさん@お腹いっぱい。:2020/03/14(土) 18:41:35 .net
>>189
結果だけ見たら

入力テキストをカンマで区切って
最初の数値を取得 ⇒ nとする
残りの文字列のn番目の文字をアッパーケースに変換して空白区切りで連結する

かな
俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する

193 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:00:13 .net
> 俺ならテキストが小さいならBashで一気に読んで処理すればいいと思うしでかいならPythonとかで処理する
これはなんで? 小さいとかの境目はどれくらい?

194 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:15:35 .net
そんなこと聞いてくるようではセンスがないよ
センスがない奴にいくら説明しても無駄

195 :名無しさん@お腹いっぱい。:2020/03/14(土) 20:18:24 .net
pythonだと単語のn文字目を取り出すなんて朝飯前だしな
関数書く手間が一つ省ける

総レス数 624
193 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200