17/05/19 23:31:44.94 .net
>>195
OOPの本質を理解してれば出来る
もし出来ないなら個人の能力に問題がある
201:名無しさん@お腹いっぱい。
17/05/20 03:14:17.14 .net
シェルはパイプで渡していくと
関数型っぽいけど
202:名無しさん@お腹いっぱい。
17/05/20 09:42:17.19 .net
関数型と見るかメソッドチェーンと見るかの違いだな。
203:名無しさん@お腹いっぱい。
17/05/20 21:59:01.54 .net
>>195
URLリンク(invent.life)
204:名無しさん@お腹いっぱい。
17/05/20 22:19:56.29 .net
>>195
オブジェクト指向で書くと暗黙のルールがなくなるの?
205:名無しさん@お腹いっぱい。
17/05/21 05:34:32.67 .net
>>195
別にシェルが嫌なら同じ処理をプログラミング言語で作れば良いじゃ無い。
LLならそんな手間じゃ無いし。
206:名無しさん@お腹いっぱい。
17/05/21 18:05:12.85 .net
>>195 はシェルの開発言語のことを聞いてるんだよね?
確かに、たいていのシェルはCで書かれてるし
207:名無しさん@お腹いっぱい。
17/05/21 19:34:04.56 .net
だんだん分けわからなくなってきたわ
208:名無しさん@お腹いっぱい。
17/05/23 14:55:53.34 .net
$ls>hoge.txt
だとカレントディレクトリのリストができますけど、
さらに深堀りして、そこにあるフォルダ(ディレクトリの中身)も表示させるには
どうすればいいのでしょうか?
それから、
フォルダかファイルの名前 ディレクトリ名(/Users/namae/nanntyaca/hogehoge.txt)
のようなふうに二つを並べて吐き出させたいのですがどうすればいいでしょうか?
209:名無しさん@お腹いっぱい。
17/05/23 15:04:02.31 .net
>>205
find . -type f > hoge.txt
210:名無しさん@お腹いっぱい。
17/05/23 15:30:08.76 .net
>>206
ありがとうディレクトリのリストができました。
ディレクトリのリストから、htmlのリストを作ろうとすると、どうするのが
いいのでしょうか?クリックすると当該ディレクトリに飛ぶようにしたい
だけなのです。考えていたのはtexのファイルにするということなのですが。
211:名無しさん@お腹いっぱい。
17/05/23 15:38:50.01 .net
ハイパーリンク作るまでやるならshの範疇じゃない気がするが
なんでも聞かずに少しはぐぐったらどうよ
212:名無しさん@お腹いっぱい。
17/05/23 16:05:32.00 .net
ありがとうございます
ぐぐります
213:名無しさん@お腹いっぱい。
17/05/25 08:52:58.76 .net
w3m . -dump_source >dir.html
214:名無しさん@お腹いっぱい。
17/05/26 02:49:12.98 .net
>>210
テキストファイルをhtmlにするには拡張子を変えただけでいいらしいです。
>>210さんが教えてくれてのはhtmlをtxtファイルにするための
ものだと思います。markdownでリストを作ろうと思います
ありがとうございました
215:名無しさん@お腹いっぱい。
17/05/26 03:27:01.73 .net
横から
Content-type: text/html
htmlはtextの中でどう書くかというルールに過ぎない
拡張子なんてのはexplorer.exeとかのソフトがどのアプリケーションソフトを起動するかのヒント程度
名前などどうでもいい
w3m . -dump_sourceは、.(このディレクトリ)をhtmlで書き出せ、と命令してる
216:名無しさん@お腹いっぱい。
17/05/26 07:39:50.94 .net
>>210さん
やりたかったことがそのままできるコードを教えてくれてありがとうございます。
それなのに申し訳ありません。>>212さんが教えてくれるまでその意義をわからず、
失礼なことを書きました。
>>212さん
本当にありがとうございます。
217:名無しさん@お腹いっぱい。
17/06/02 10:47:53.61 .net
シェルスクリプトの本で、こんな便利なことができるという感じの
スクリプトを紹介するような感じでできてる本というのでお薦めの本は
あるでしょうか?
218:名無しさん@お腹いっぱい。
17/06/02 11:25:57.91 .net
>>214
クックブック
……ああでもあれはbashだったか
219:sage
17/06/02 20:17:29.65 .net
(head ; tail ) < file
で、先頭10行・末尾10行が出るのはどういう仕組み?
FreeBSD+ash、bash で確認。
man にはそれらしい記述がないように見える。
220:名無しさん@お腹いっぱい。
17/06/02 21:17:20.29 .net
ちなみに GNU coreutils の head, tail だと
seq 10 | { head -1; tail -1; }
1
となる。以下の場合は
seq 10240 | { head -1; tail -1; }
1
10240
となる。これは head コマンドが一定量のデータをバッファリングした
まま処理を終了してまうから。BSD系のコマンドでは未使用なデータは
パイプバッファに戻してくれるので tail コマンドで読み出すことができる。
221:名無しさん@お腹いっぱい。
17/06/03 15:49:14.51 .net
ともにデフォルトが10行だからじゃないの?
222:名無しさん@お腹いっぱい。
17/06/04 01:26:27.62 .net
>>215
クックブック注文しました
ありがとう
223:名無しさん@お腹いっぱい。
17/06/05 08:12:28.10 .net
どうやって実現してるの?パイプではseekできないと
ずっと思ってた
224:名無しさん@お腹いっぱい。
17/06/05 10:37:40.02 .net
tailのソース読んでみたら?
225:名無しさん@お腹いっぱい。
17/06/06 12:55:43.92 .net
>>217
BSDは知らないけど、普通stdioで読む単位は4096byteとかだから
headがそれを読んでexitした場合残りをtailが読むことになる
入力データが4096byte以下ならheadしか受け取れないが、大きければ
headとtailがそれぞれ入力を受け取れる
パイプに戻すとかいうインタフェースはunixにはない
226:213
17/06/13 13:42:47.20 .net
どうもです。
要は head と tail でディスクリプタを共有してて、未 read の部分を tail が読んでいるんだと思うんだけど、
親子じゃないプロセスでディスクリプタ共有なんてできるんでしたっけ、と思って驚いた
(できてるから、できるんだろうけど)。
ちなみに tcsh でもできた。
ただ、下記の ★1 と ★2 で結果が違うのはどうしてなんでしょう。
コマンドかファイルかで、stdio のバッファリングの違いってあったっけ。
$ seq 100 > seq100.txt
$ seq 10024 > seq10024.txt
$ cat seq100.txt | { head -1 ; tail -1 ; } # ★1
1
$ { head -1 ; tail -1 ; } < seq100.txt # ★2
1
100
$ cat seq10024.txt | { head -1 ; tail -1 ; }
1
10024
$ { head -1 ; tail -1 ; } < seq10024.txt
1
10024
227:213
17/06/13 13:51:01.95 .net
>>217
> ちなみに GNU coreutils の head, tail だと
> seq 10 | { head -1; tail -1; }
> 1
> となる。
なお、FreeBSD でも
$ jot 10 | { head -1; tail -1; }
1
でした。
head・tail で共有しているのはディスクリプタだけであって、
stdio バッファの共有はしていないので、戻すってのが ungetc(3) 的な
ものを指しているのであれば、戻したとしても tail がそれを読めるわけでは
ないと思っています。
228:名無しさん@お腹いっぱい。
17/06/13 15:00:33.86 .net
>>223
seq 100は4096バイト以下だから。
seq 1042でtail -2
したら切れ目がわかるかと。
229:213
17/06/13 15:13:53.06 .net
★1も★2 も seq 100 なのに、なぜ結果が違うのか、というのが疑問なのであります。
230:名無しさん@お腹いっぱい。
17/06/13 15:15:44.72 .net
ファイルディスクリプタがプレーンファイルならlseekするから
231:名無しさん@お腹いっぱい。
17/06/13 15:19:58.75 .net
ごめん、mmapだった
232:名無しさん@お腹いっぱい。
17/06/14 09:15:41.39 .net
>>226
要するに>>227の通りなんだけど
⭐1の書き方の場合、標準入力がパイプになるので(lseekできないので)tailには何も渡らない
⭐2の場合標準入力は通常ファイルseq100.txtなのでtailはlseekして読み直すから読める
233:213
17/06/14 10:53:46.67 .net
ありがとうございます。
URLリンク(svnweb.freebsd.org)
で lseek で先頭に戻るってのが成功するか否か、ってことですね。
234:名無しさん@お腹いっぱい。
17/06/14 11:09:43.34 .net
head -1 じゃなくて read を使ってこんな事をしてたり
df -h | { read h; echo "$h"; sort -k5,5gr; }
235:名無しさん@お腹いっぱい。
17/07/01 20:45:46.61 .net
流石に上手いわ
236:名無しさん@お腹いっぱい。
17/07/01 23:39:20.14 .net
>>231
惚れる。UNIX の基本コマンドだけじゃん
237:名無しさん@お腹いっぱい。
17/07/05 17:14:04.26 .net
>>231
やるやん(´・ω・`)
238:名無しさん@お腹いっぱい。
17/07/08 09:49:05.30 .net
>>223
子同士だから親から引き継いだ同じものを共有してる
239:名無しさん@お腹いっぱい。
17/07/15 18:10:48.03 .net
Eclipse上でシェルスクリプトを動かしたいんだけど、どのサイトを参考にすればいいですか?
240:名無しさん@お腹いっぱい。
17/07/15 18:28:08.93 .net
site:2ch.net 付けてググれ
241:名無しさん@お腹いっぱい。
17/07/31 07:52:04.50.net
# 使用しているのは GNU/Linux なので微妙にスレチかもしれないです。
GNU/Linux では /bin/sh が /bin/bash へのシンボリックリンクになっています。
私が利用している Fedora 26, Linux Kernel 4.11.11 では
bash$ readlink -e `which sh`
/usr/bin/bash
でした。(Fedora では /bin 全体が /usr/bin へのシンボリックリンクです。そういう方針です)
ファイルシステム等と共にシェルスクリプトの高速化を図ろうと,
Bourne Shell 互換で GNU bash より低機能で処理が高速な GNU dash を
/bin/sh へのシンボリックリンクにしました。
bash# rpm -qa | grep -E "^dash"
dash-0.5.9-2.fc26.x86_64
bash# unlink `which sh` && ln -s /usr/bin/dash /usr/bin/sh
再起動すると Xorg およびディスプレイマネージャは正常に起動したのですが,
ログイン後デスクトップ環境(Xfce4)が起動しません。
エラーログを取得しようにもコンソールl(/dev/tty1とか)にさえログインできず,
結局外部から /bin/sh を /usr/bin/bash に割り当て直して無事ログインできました。
原因はデスクトップ環境を構築しているシェルスクリプトのどこかに bash 独自の機能を要する文法があると思われます。
そこで質問なのですが,実際にログインプロセスを踏まずにそれを再現できるシェルスクリプトの作り方を教えてください。
長くて申し訳ないです。よろしくおねがいします。
242:名無しさん@お腹いっぱい。
17/07/31 07:59:41.19.net
内緒で妻のパソコンでインターネットして
ヌードとかHな写真を見まくっていたのですが、なんと
bネにかの表紙に血ゥていたエロ画荘怩ェパソコンの血繧�に
表示されたままになって元に戻せません!
前はプーさんの画像だったのに、今はアソコにバイブを挿した豊丸の画像です・・・。。
再起動しても表示されたままなんです。
早く直さないと妻が夜勤から帰ってきてしまします!(看護婦なので・・・・)
至急助けてください!!!
OSはウィンドウズXPです。
よろしくお願いします。
243:名無しさん@お腹いっぱい。
17/07/31 08:49:19.54.net
>>239
金属バットでPCフルスイングすれば?
244:名無しさん@お腹いっぱい。
17/07/31 08:51:37.14.net
ここに到達する知識があるならgoogleで検索すれば見つかるだろうに
245:名無しさん@お腹いっぱい。
17/07/31 08:57:00.00.net
>>238
再現する方法を模索するのではなく、再起動せずに切り分けすればいいだけでは?
tty でログインできなかったって点からすると、/usr/bin/sh を差し替えた後に再起動せずに
su - 一般ユーザ名 でテストするのが一番手っ取り早そう。
display-manager(gdmや同等のソフト) を停止した状態で tty でログイン(安全をみて tty1 と
tty2 など複数個所でログイン済にしておく)、 /usr/bin/sh を差し替えて再起動せずに
display-manager を起動してログインテストすればいいんじゃないでしょうか。
246:名無しさん@お腹いっぱい。
17/07/31 09:07:15.67.net
>>239
これは履歴とかキャッシュ消せないだろうからどうせバレる
247:名無しさん@お腹いっぱい。
17/07/31 09:10:25.45.net
>>238
Linux板へ
248:名無しさん@お腹いっぱい。
17/07/31 09:10:52.08.net
>>239
懐かしコピペだな
249:名無しさん@お腹いっぱい。
17/07/31 11:49:07.69.net
>>242
ありがとうございます。やってみます。
ご迷惑かもしれませんが,解決を見たら報告します。
250:名無しさん@お腹いっぱい。
17/07/31 11:54:40.49.net
>>240
ありがとうございます。やってみます。
ご迷惑かもしれませんが,解決を見たら報告します。
251:名無しさん@お腹いっぱい。
17/07/31 15:19:17.23.net
>>238
checkbashismsが使えるならそれでBashの機能の有無を確認出来る
URLリンク(wiki.archlinuxjp.org)
252:名無しさん@お腹いっぱい。
17/07/31 16:15:55.29.net
/bin/shを差し替えるなんてFedora側で想定した使い方じゃないんだから
そもそもそんなことやっちゃいけない
253:名無しさん@お腹いっぱい。
17/08/01 02:25:49.77 .net
>>248
ありがとうございます。
5000 箇所くらい不適合が見つかりました。
パッケージ管理されているシェルスクリプトも多くあり,
全部直すとシステムの破壊も(今更かもしれないですが)心配なのでやはり bash のままにしようかなとも考えています。
>>249
その通りなんですが dash は bash の4倍早いと聞いたのでつい……。
254:名無しさん@お腹いっぱい。
17/08/01 02:59:57.01 .net
>>250
autoconfのconfigureで5-10%速いくらい
URLリンク(lists.fedoraproject.org)
SysVinitの昔ならともかくsystemdの今では関係ないだろうけどね
255:名無しさん@お腹いっぱい。
17/08/01 03:05:36.12 .net
>>250
chshだけでもしとけば
256:名無しさん@お腹いっぱい。
17/08/01 08:24:31.41 .net
>>250
4倍速いなんて誰が言ってたの
257:名無しさん@お腹いっぱい。
17/08/01 09:51:33.66 .net
/bin/sh置き換えるとか奇形児かよ
258:名無しさん@お腹いっぱい。
17/08/01 10:19:55.09 .net
configureで5-10%速いなら4倍どころじゃないだろうな
259:名無しさん@お腹いっぱい。
17/08/02 20:07:41.14 .net
>>254
debianはそういうとこあるぞ
260:名無しさん@お腹いっぱい。
17/08/03 07:34:52.42 .net
あれは必死に直した結果達成したもので、同じような努力をそのdistroで
やらないとできない
そういやFreeBSDも昔base systemからperl排除するという大きな仕事を
やってたなあ
261:名無しさん@お腹いっぱい。
17/08/03 09:32:35.46 .net
で、「4倍速い」のソースどこよ
262:名無しさん@お腹いっぱい。
17/08/03 09:35:10.81 .net
俺
263:名無しさん@お腹いっぱい。
17/08/03 21:23:18.47 .net
シャア専用シェル
264:名無しさん@お腹いっぱい。
17/08/04 03:14:55.27 .net
シェルから特定のプログラムの標準入力にデータを流すにはどうしたらいいでしょうか。
何がしたいかというと、
stdinからのデータを処理するIPCで、サーバーサイドのプログラムに
シェル側からstdinに流してレスポンスがちゃんとできているかをチェックしたいのです。
サーバープログラムは stdin をistreamで処理するように組んでおり、
stdinで入ってくるデータはEOFで一区切りとし、EOFを検出後に
EOFフラグをクリアして、再度stdinにデータが流れてくるまでブロッキングするというループになっています。
本来はクライアントサイドからstdinへデータを流しますが、
サーバーサイドだけで簡単にチェックするために、
サーバーサイドはmy-server.elfとし、
$ ./my-server.elf
で起動状態にしておきます。
ここに対して、
コマンドライン上から テキストデータ+EOFを何度か送る方法はないでしょうか?
cat hoge | ./my-server.elf
とかだと、1回しかテストできないので、どうしたらいいでしょうか。
my-server.elfのプロセスIDはわかるので、そこに対してデータを送る方法が
265:あれば教えてください。
266:名無しさん@お腹いっぱい。
17/08/04 04:14:32.69 .net
移植性がよくわからないけど
cat hoge > /proc/<pid of server>/fd/1
267:名無しさん@お腹いっぱい。
17/08/04 08:14:54.70 .net
EOFってクリアできるものなの? よくわからんが
$ mkfifo /tmp/foo
$ exec < /tmp/foo
$ exec ./my-server.elf
で cat hoge > /tmp/foo とかどうよ
268:名無しさん@お腹いっぱい。
17/08/04 13:23:10.99 .net
>>261
EOFってstdinの送信側がcloseしたときに送られるんじゃないの?
それ実は再コネクトしてたりしない?
269:名無しさん@お腹いっぱい。
17/08/06 01:34:21.08 .net
>>261
> コマンドライン上から テキストデータ+EOFを何度か送る方法はないでしょうか?
テキストデータにEOF(^D)を入力するとか
^DはCtrl+V、Ctrl+D
URLリンク(en.wikipedia.org)
270:名無しさん@お腹いっぱい。
17/08/09 11:18:15.17 .net
1<br>2<br>3<br>4<br>
を
1
2
3
4
にシェルで置き換えるコマンド教えれ
今viで開いて置き換えてます・・・
271:名無しさん@お腹いっぱい。
17/08/09 11:21:03.77 .net
>>266
sed
272:名無しさん@お腹いっぱい。
17/08/09 11:22:28.73 .net
sed でもなんでもいいじゃん
273:名無しさん@お腹いっぱい。
17/08/09 13:07:15.54 .net
あえてヘッドレスブラウザを使ってみよう
274:名無しさん@お腹いっぱい。
17/08/09 13:07:21.78 .net
echo '1<br>2<br>3<br>4<br>' | tr '<>' '\n\n' | fgrep -v br
275:名無しさん@お腹いっぱい。
17/08/09 14:41:10.39 .net
ありがとうございます
sedで出来ました
というか所定の文字列(今回は<br>)を改行に置き換えることと
改行を所定の文字列に置き換えることを混同していました
たしか後者はsedなどでできずperlとかでやった覚えがあります
まったくもって私の勘違いでした・・・
276:名無しさん@お腹いっぱい。
17/08/09 14:49:33.52 .net
unhtmlだと改行入らないっけ
|w3m -dump
277:名無しさん@お腹いっぱい。
17/08/13 15:47:35.48 .net
macのファイル名に使われるエンコーディングてutf-16だったんだね
てっきり、utf-8だと思ってた
URLリンク(tama-san.com)
んで、次のOSでは非正規化になるみたい
URLリンク(developer.apple.com)
これで少し楽になれそう
278:名無しさん@お腹いっぱい。
17/08/13 15:56:24.85 .net
内部表現はutf-16
ターミナルで扱うときはutf-8
279:名無しさん@お腹いっぱい。
17/08/13 18:10:53.30 .net
知らなかった
ありがとう
280:名無しさん@お腹いっぱい。
17/08/20 22:32:53.01 .net
シェルスクリプト とはほとんど関係ないんだけど,X 使ってる時,ターミナルエミュレータに ファイルマネージャの「ファイル」や「フォルダ」を D&D したらその絶対パスが入力されるんだな。
これ今迄知らずに手入力してた。
281:名無しさん@お腹いっぱい。
17/08/20 22:38:57.86 .net
なんかしらんけど、本当だ(´・ω・`)
282:名無しさん@お腹いっぱい。
17/08/20 22:39:12.28 .net
これどういう原理なんだろ
283:名無しさん@お腹いっぱい。
17/08/20 23:03:34.71 .net
X 使ってないから分からんが、Windows でエクスプローラからコマンドプロンプトにドラッグ&ドロップするとファイルパスが入力されるのと同じ機能かな。
意外と知らない人もいるみたいだけど、便利だよね。
284:名無しさん@お腹いっぱい。
17/08/21 01:53:29.93 .net
でもXってマウスすべるよな
285:名無しさん@お腹いっぱい。
17/08/21 08:54:21.72 .net
Windows でも確認できた。へー,結構便利だな。
286:名無しさん@お腹いっぱい。
17/08/21 10:52:29.07 .net
なぜ関係ない話をここでやるの
287:名無しさん@お腹いっぱい。
17/08/21 17:33:16.40 .net
じゃあ関係ある話提供してください。
288:名無しさん@お腹いっぱい。
2017/08/
289:21(月) 17:38:48.75 .net
290:名無しさん@お腹いっぱい。
17/08/21 18:31:57.12 .net
どうでもいいなら書き込むな
291:名無しさん@お腹いっぱい。
17/08/21 19:04:04.21 .net
じゃあどうでもよくない話提供してください。
292:名無しさん@お腹いっぱい。
17/08/21 19:13:51.68 .net
DEの機能じゃないの
ファイルマネージャー使わないが
293:名無しさん@お腹いっぱい。
17/08/22 09:14:59.98 .net
Terminology「ガタッ(呼ばれたか)」
294:名無しさん@お腹いっぱい。
17/08/22 13:27:24.37 .net
Terminology って何がすごいの? 画像の表示なら xterm ですら可能なのに。
295:名無しさん@お腹いっぱい。
17/08/22 18:53:12.44 .net
lsとかした後ターミナル内でのD&Dとかの変態操作
動画再生と動画壁紙の無駄機能
すごくはない
296:286
17/08/23 03:10:27.50 .net
ターミナル内で D&D できんのか。そりゃすげえ。
297:名無しさん@お腹いっぱい。
17/08/29 10:07:33.36 .net
unix プログラミング環境という本の問題でpickというプログラムを作ったんだ。
引数ごとに出力するかを対話して、"y"が押されたものだけ出力するという単純なもの。
---
$ pick a b
a? y
a
b? n
$
---
問題ではさらに、「引数が無かった時は標準入力を読みに行くようにせよ」と続く。
まあ、パイプで挟まれたりしても問題なく使えるようにしろってことなんだと思う。
で、以下の様に書いて、問題なく動いたんだけど、
あまりシェル書いたことないもので・・・変な書き方してないかとかコメント頼みます。
---
exec 10<&0 11>&1 0<&2 1>&2
input='echo "$@"'
if [ $# -eq 0 ] ; then
input='cat <&10'
fi
for i in `eval $input`
do
echo -n "$i ? "
read response
case $response in
y*) echo $i >&11 ;;
esac
done
---
298:名無しさん@お腹いっぱい。
17/08/29 14:45:14.34 .net
シェルじゃなくてシェルスクリプト
299:名無しさん@お腹いっぱい。
17/08/29 20:34:15.21 .net
>>292
その本知らないけど、標準入力を読み切ったあとをキー入力とするより
read response < /dev/tty
でキー入力する方が一般的じゃないかな
300:名無しさん@お腹いっぱい。
17/08/30 10:04:26.25 .net
>>294
実は、vmware上のlinuxにテラターム使ってテストしてたんだけど、
(unixと書いてあるのにスマン)
その時の端末のデバイスファイル?とやらが/dev/pts/0だったのよ。
`tty`でもパイプ使ってると「あいまいです」みたいに怒られちゃって、
苦し紛れに&2を使ってしまった。。
接続端末のデバイスファイルをいつでも取得できる方法ってあるのかな?
301:名無しさん@お腹いっぱい。
17/08/30 10:21:44.01 .net
あ、あと今さっき教えてもらった
read response < /dev/tty
↑が、上手くいった!ありがと~
unixだとreadコマンドはリダイレクションができなかったらしいが、
linuxだと出来るのか。。。
302:名無しさん@お腹いっぱい。
17/09/06 14:03:04.96 .net
1. find . -name aaa -o -name bbb
はうまくいくけど
2. find . -name aaa -o -name bbb -print
では aaa が引っかからなくて、
3. find . \( -name aaa -o -name bbb \) -print
だと OK な理由がいまいちわかりません。括弧なしだと
4. find . -name aaa -o \( -name bbb -print \)
と解釈されてしまうからってのはわかりますが、
「アクション指定なしの場合 -print の挙動となる」
「exp1 -o exp2 で exp1 が偽なら exp2 を実行しない」
であるならば、1 が表示されて、2・4 の aaa が表示されないのはなぜでしょう。
ちなみに、GNU find(1) には下記。
If the expression contains no actions other than -prune, -print is performed on all files for which the
expression is true.
FreeBSD の find(1) は下記でした。
If none of -exec, -ls, -print0, or -ok is specified, the given expression shall be
effectively replaced by ( given expression ) -print.
と書いていて思いましたが、括弧等や -o に関係なく、引数 expression のどこかに
アクションが 1つでも記述されていれば、-print を補完しない、ってことですかね。
303:294
17/09/06 14:14:11.12 .net
> 括弧等や -o に関係なく、引数 expression のどこかに
> アクションが 1つでも記述されていれば、-print を補完しない、ってことですかね。
ということのようでした。
URLリンク(svnweb.freebsd.org)
-print とかが見つかると isoutput=1 とする。
URLリンク(svnweb.freebsd.org)
!isoutput の場合のみ、-print を補完する。
expression のツリー構造をたどって、アクションがない expression が
見つかったら全部 -print を補完する、としていたらよかった気がしますが、
いまさらどうしようもないですね。
304:名無しさん@お腹いっぱい。
17/09/08 02:42:55.52 .net
$ bc <<< '6*7'
42
とかの`<<<` ってなんという名称ですか?
ヒアドキュメンとだとずっと思っていたのですが,その仕様を調べようとしたらヒアドキュメントというのは
$ cat << . > ~/foo.txt
a
b
c
.
の << . から . を指すようなのでした。
305:名無しさん@お腹いっぱい。
17/09/08 04:08:06.24 .net
ヒアストリング
306:名無しさん@お腹いっぱい。
17/09/08 07:40:56.64 .net
ヒアストリングは未だに使い方がよく分かってない
307:名無しさん@お腹いっぱい。
17/09/09 13:43:30.38 .net
>>300
ありがとうございます!
お礼が遅くなり申し訳無いです。
308:名無しさん@お腹いっぱい。
17/09/11 20:58:07.04 .net
あるマシン環境を仮想マシンとかでバックアップしておいて
1つのマシン上であるサーバを構築して、
historyからその構築したコマンド群を全部シェルスクリプトに
コピペして、そのシェルスクリプトを
サーバ構築前のマシン上で実行したら全く同じサーバが一瞬で構築できるの?
309:名無しさん@お腹いっぱい。
17/09/11 22:00:14.58 .net
chefとか使えよ
310:名無しさん@お腹いっぱい。
17/09/11 22:47:46.40 .net
冪等性が保証されてるスクリプトなら同じサーバーができる
311:名無しさん@お腹いっぱい。
17/09/12 16:18:38.21 .net
ネットワーク経由のインストールとかしてて
サーバの状態により変わりそう
312:名無しさん@お腹いっぱい。
17/09/12 18:22:51.99 .net
サーバーじゃないけど仮想マシンで似たような事してる
ヒストリーからってより自分でメモしといたコマンド群だけど
けっこう省力化出来てる
あとスクリプト書いてから時間が経過するとソフトウェアの
ダウンロード元のURLが変わったりしてエラーが出ることは多々ある
313:名無しさん@お腹いっぱい。
17/09/12 20:18:24.96 .net
結局リプレイしたいときにはアプリやOSのバージョンが微妙に上がってて、
手順を修正しながらやらなきゃダメってのはありがちだな。
314:名無しさん@お腹いっぱい。
17/09/13 13:26:43.86 .net
変数やコマンド文字列の展開と
ワイルドカード/正規表現の展開って原理が違うの?
315:名無しさん@お腹いっぱい。
17/09/13 14:55:00.94 .net
どういう意味?
316:名無しさん@お腹いっぱい。
17/09/14 00:00:47.00 .net
>>309
言ってることが曖昧だが,「グロブ」と「正規表現」は違うよ
原理が違うかどうかは知らんが,少なくとも挙動は別物
例えばアスタリスクはグロブだとワイルドカードとして,正規表現だとクリーネ閉包としての役割を果す
317:名無しさん@お腹いっぱい。
17/09/14 01:58:23.04 .net
グロブ(含ワイルドカード)と正規表現の違いを聞いてるのではないでしょう
318:名無しさん@お腹いっぱい。
17/09/14 05:18:47.05 .net
質問の意味がわかんないんです(><)
319:名無しさん@お腹いっぱい。
17/09/14 06:04:07.07 .net
すみませんが詳しい方のみ回答をお願いします
320:名無しさん@お腹いっぱい。
17/09/14 06:59:44.81 .net
ここにはいません
321:名無しさん@お腹いっぱい。
17/09/14 10:48:20.75 .net
みなさんコマンドの頭にバックスラッシュって付けてます?
私は安全を期して付けているのですが そうしているシェルスクリプトが以外に少ないので
気にしなくてもいいんですかね
322:名無しさん@お腹いっぱい。
17/09/14 10:59:51.81 .net
付けないとどんな危険があると想定してるの?
323:173
17/09/14 12:57:09.36 .net
alias cp='rm -rf'
cp a --> rm -rf a
\cp a --> cp a
324:名無しさん@お腹いっぱい。
17/09/14 13:21:22.76 .net
へぇ
325:名無しさん@お腹いっぱい。
17/09/14 13:26:37.84 .net
cshだとaliasが機能しちゃうんだね
326:313
17/09/14 13:42:49.97 .net
173 --> 313
327:名無しさん@お腹いっぱい。
17/09/14 14:22:08.99 .net
cshはデフォルトだと必ず.cshrc読んじゃうからねぇ
328:名無しさん@お腹いっぱい。
17/09/14 14:51:18.91 .net
>>309
翻訳するとこういう感じだと想像
変数の展開: variable expansion ( e.g. ${var} )
コマンド文字列の展開: command substitusion ( e.g. $(command) )
ワイルドカードの展開: filename expansion ( e.g. *.sh )
正規表現の展開: ???
正規表現の展開って何? find -regexとかのこと言ってるの?
あと原理って? 同じか違うか知りたい理由は何?
人に伝わるように質問しないと誰も分からないぞ
329:名無しさん@お腹いっぱい。
17/09/14 14:57:45.50 .net
cshを前提にしちゃいかんでしょう
330:名無しさん@お腹いっぱい。
17/09/14 16:44:13.36 .net
>>324
前提というか、 >>316 はそういう環境なんだなと深読みしただけ
331:名無しさん@お腹いっぱい。
17/09/14 17:20:02.07 .net
いまどきcshでスクリプトを書くおとこの人って…
332:名無しさん@お腹いっぱい。
17/09/14 18:02:43.44 .net
>>318はcshじゃないな。
むかしのcshで痛い目にあってなますを吹いてるとか?
333:名無しさん@お腹いっぱい。
17/09/14 18:37:11.41 .net
>>325
深読みが過ぎるのでは
Bシェル系使ってて心配しすぎてるだけという可能性もある
334:名無しさん@お腹いっぱい。
17/09/16 04:51:53.35 .net
>>316を見て思ったのが シェバンの書き方。
#!/bin/sh -
と書けと駱駝にはあったが 存外そうしている Shell Script がない
まあ余程のことがない限り sh がオプションを勘違いするなんてないが
335:名無しさん@お腹いっぱい。
17/09/16 08:20:15.68 .net
#!/bin/sh -
set -x
set -u
...
set +u
set +x
336:名無しさん@お腹いっぱい。
17/09/17 11:16:56.16 .net
set -xって要らないでしょ
337:名無しさん@お腹いっぱい。
17/09/17 13:02:27.61 .net
sexに空目した
338:名無しさん@お腹いっぱい。
17/09/18 09:06:16.47 .net
set -u 便利だな
339:名無しさん@お腹いっぱい。
17/09/18 17:34:05.37 .net
新しい関数として
ls () {
\ls --width=`\echo $COLUMN`
}
という関数を作って,ls のエイリアスとして動作させたいのですが,
コマンドラインで $ ls と入力すると無限ループに陥ります。
多分というか確実に関数 ls が自分自身を呼び出している為に生じる現象だと思います。
これを回避し,ls という関数を安全に作製するにはどうすればいいでしょうか。
常用しているシェル bash です。
bash 独自の拡張でそのような(関数の再帰を防ぐ)機能があれば教えて下さい。
340:名無しさん@お腹いっぱい。
17/09/18 17:35:32.76 .net
関数中のlsを絶対パスで呼ぶ
341:名無しさん@お腹いっぱい。
17/09/18 17:44:16.70 .net
command ls --width=$(echo ${COLUMN:-50});
とかでいいんじゃない
342:331
17/09/18 18:25:53.39 .net
>>335 様、>>336 様、ありがとうございます。
どちらの方法でも上手く行きました。身勝手ながら >>336 様の方法を採ることにしました。
蛇足気味ですが、最終的に以下のような関数にしました。良かったら添削してください。
POSIX とかは考えてないです。
function ls () {
local _opt="--ignore-backups --color=always --format=across --group-directories-first --indicator-style=classify --literal --sort=time --width=`\echo $COLUMNS`"
command ls $_opt
}
343:331
17/09/18 18:28:49.27 .net
s:/`\\echo $COLUMNS`/$(\\echo ${COLUMNS})/
344:331
17/09/18 18:55:59.93 .net
Better?
function ls () {
local _opt="--ignore-backups --color=always --format=across --group-directories-first --indicator-style=classify --literal --sort=time --width=$(\command echo ${COLUMNS})"
\command -p ls $_opt $@
}
345:名無しさん@お腹いっぱい。
17/09/18 20:05:49.92 .net
lsを常に特定のオプション付けて実行したいのならLS_OPTIONS使えばいいと思う
それからfunction name ()はfunction nameかname () のどちらかにすべき
name()の方が汎用性高い
346:331
17/09/18 20:49:26.19 .net
>>340
ありがとうございます!
LS_OPTIONS は知りませんでした。MANOPT や LESS みたな感じなんですかね。
函数は POSIX に合わせて ls () にしようと思ったんですが,ちょっと個人的に気持ち悪くて,どうしても function が取っ払えませんでした……。
347:名無しさん@お腹いっぱい。
17/09/18 21:20:07.09 .net
別に身勝手ってほどのことでもなくね
348:名無しさん@お腹いっぱい。
17/09/21 02:41:20.96 .net
シェルの解釈を標準出力に印刷するコマンドってある/作れますか?
グロブやエイリアスがどう解釈/引き渡されるのかを知りたいです。
$ showraw 'ls */*'
ls a/a a/b a/c b/a c/a c/b
みたいな。
検索も一通りしたのですが見付からないです。
シェルによってシェルそれ自身の機能を調べるのは無理なんですかね。
349:340
17/09/21 02:42:16.10 .net
すいません。age ます。
350:名無しさん@お腹いっぱい。
17/09/21 02:44:04.33 .net
$ showraw 'ls */*'
ls -F -A a/a a/b a/c b/a c/a c/b
エイリアスも解釈されるのでこんなかんじですね。
351:名無しさん@お腹いっぱい。
17/09/21 05:13:34.59 .net
コマンドの方はtype ls 引数の方はecho */* で良くね
取り敢えずshとbashで確認
352:名無しさん@お腹いっぱい。
17/09/21 06:12:05.17 .net
$ ls */*
と入力したところで ESC \C-e をタイプするとエイリアスが展開され
\C-x* をタイプするとワイルトカードが展開される
353:名無しさん@お腹いっぱい。
17/09/21 06:21:42.53 .net
すまん、bash限定
354:名無しさん@お腹いっぱい。
17/09/21 07:24:19.18 .net
>>343
$ set -x
$ ls */* >/dev/null
355:名無しさん@お腹いっぱい。
17/09/21 08:38:01.77 .net
>>346 -- >>348
ありがとうございます。しかしできればエイリアスごと展開したいのです。
>>349
おわ!まさにこんな感じです。多分コマンドプロンプト関連の命令群も一緒に出力されますが,これはまあ awk か何かで頑張って切り取ります。一応 zsh,bash,dash で確認できました。
356:名無しさん@お腹いっぱい。
17/09/26 02:43:18.09 .net
>>333
set -u 便利ですね
~/.bashrcに書こうかしら
とくに弊害ないですよね?
357:名無しさん@お腹いっぱい。
17/09/28 10:22:22.57 .net
すいません。わかるかたいたら教えてください。
基本的にカンマ区切りの行なのですが、1列目が""で囲まれ、"aaa,bbb,ccc"のように
なることがあります。
1列目のみに発生します。
この1列目のケースだけ、カンマをスペース等に置換したいと思っています。
イメージはこうです。
"aaa,bbb,ccc",AAAA,BBBB,CCCC
aaa,AAAA,DDDD,EEEE
↓
"aaa bbb ccc",AAAA,BBBB,CCCC
aaa,AAAA,DDDD,EEEE
理由はエクセルに取り込むときにずれてしまうためです。
awkで出来た気がするのですが、うまく出来ません。
どなたか心当たりないでしょうか。
358:名無しさん@お腹いっぱい。
17/09/28 10:41:01.84 .net
Excelならダブルクオートちゃんと扱うはずだよ
勘違いか、変な文字入ってない?
359:名無しさん@お腹いっぱい。
17/09/28 11:09:26.14 .net
テキストをコピーして貼り付ける時にカンマ区切りでバラすように貼り付けると囲んでてても関係なくバラさなかったっけ?
360:名無しさん@お腹いっぱい。
17/09/28 11:10:20.00 .net
そんなことなかったわ
361:名無しさん@お腹いっぱい。
17/09/28 11:41:08.89 .net
もっとうまく書けそうな気がするものの
perl -pe 'if (/^"/) { @f = split/"/, $_, 3; $f[1] =~ s/,/ /g; $_ = join "\"", @f }'
362:名無しさん@お腹いっぱい。
17/09/28 12:17:55.02 .net
awkとBEGINで昔出来た記憶があるのですが。上手くいかず。
>>353
あれ、確かにEXCELには想定ではれました、すいませんさっきも同じにようにはったつもりで、ばらされたのですが。
>>356
一行Perlの文法の意味はわかりませんが、確かに出来ました!
363:名無しさん@お腹いっぱい。
17/09/28 22:34:38.91 .net
区切り文字を"にして配列に取り込んで,を に置換えた後、最初と最後に"を追加する
perl -F\" -anle '$F[1] =~ s/,/ /g; $F[1] =~ s/(.+)/\"$1\"/; print @F'
awkでは
awk 'BEGIN {FS="\""; OFS="\""} {gsub(","," ",$2); print $0}'
でいいような、なんか自信ないけど
364:名無しさん@お腹いっぱい。
17/09/28 22:48:57.65 .net
GNU awk の FPAT を使ってこんな感じで
gawk -vFPAT='(".+?"|[^,]*)' -vOFS=, '{gsub(/,/," ",$1);print}' data.csv
365:名無しさん@お腹いっぱい。
17/09/29 04:05:27.30 .net
perl -pe 's/^("[^"]*")/$1=~s|,| |gr/e'
366:名無しさん@お腹いっぱい。
17/09/29 16:42:39.76 .net
perl -pe 's/,(?=.*\")/ /g'
367:名無しさん@お腹いっぱい。
17/09/29 17:03:38.90 .net
suge-
368:名無しさん@お腹いっぱい。
17/09/30 13:09:25.90 .net
>>352
#!/bin/sh
IFS=\"
while read X Y Z ; do
if [ "$X" = "" ] ; then
echo -n \"$Y\" | sed 's/,/ /g'
echo $Z
else
echo $X
fi
done
369:名無しさん@お腹いっぱい。
17/10/02 11:37:31.18 .net
sed '/^"[^"]*"/{H;s///;x;s/\n//;s/^\("[^"]*"\).*/\1/;s/,/ /g;G;s/\n//;}'
370:名無しさん
17/10/12 11:03:43.53 .net
bashで変数展開するときに、名前末尾にハイフン付けるのはどういう意味なんでしょうか?
${abc-}
371:名無しさん@お腹いっぱい。
17/10/12 13:43:34.47 .net
>>365
URLリンク(linuxjm.osdn.jp)
372:名無しさん@お腹いっぱい。
17/10/12 14:06:07.63 .net
今まさにそのページ読んでたけど、:いるよな
ナシの使い方なんてあったっけか
373:名無しさん@お腹いっぱい。
17/10/12 16:13:02.77 .net
> コロンを省略した場合には設定されているかどうかのみを調べます。
374:名無しさん@お腹いっぱい。
17/10/12 16:37:37.56 .net
何度か読み返してようやく理解した
unsetされてるか空値が入ってるかの違いに対応出来るのか
375:名無しさん@お腹いっぱい。
17/10/13 18:57:11.77 .net
ログイン時に読み込まれる ~/.profile ファイルは,「誰が」読み込んでいるのでしょうか。
普通 sh もしくはその代替シェルかなと思うのですが,実際はどうなのか気になります。
というのも,私が普段使っている Debian GNU/Linux ではデフォルトシェルは bash に指定しているのですが,~/.profile の中に bash っぽい変数 (${HOGE} という書き方) があったので。
376:名無しさん@お腹いっぱい。
17/10/13 19:08:59.70 .net
>>366読んでみたらいいじゃない
起動のところ
377:名無しさん@お腹いっぱい。
17/10/13 19:12:36.61 .net
${HOGE}はbashに限らないよ
378:名無しさん@お腹いっぱい。
17/10/14 00:33:15.35 .net
>>372
誰へのレス?
379:名無しさん@お腹いっぱい。
17/10/14 00:33:50.98 .net
>>370
Linuxの質問はLinux板で
380:名無しさん@お腹いっぱい。
17/10/14 00:37:55.44 .net
>>370
くだらねえ質問はここに書き込め!Part 229
スレリンク(linux板)
初心者の質問相談にやさしく答えるスレ Part9
スレリンク(linux板)
381:名無しさん@お腹いっぱい。
17/10/14 00:56:47.50 .net
>>370
もしかしてこの人?
スレリンク(linux板:343番)
382:370
17/10/14 00:58:01.90 .net
あぁ、すまん
>>371へのレスか
たしかに${HOGE}記法はたいていのshで使えるね
383:370
17/10/14 00:58:50.55 .net
>>371じゃなくて>>370か、、、
384:名無しさん@お腹いっぱい。
17/10/20 11:02:46.23 .net
>>377
何を言ってるのがわからん。bshが元祖なのに。
385:370
17/10/20 17:00:36.31 .net
余計なレスだったんでわからんならわからんでいいよ
386:名無しさん@お腹いっぱい。
17/10/21 01:22:29.89 .net
スレチ気味だけど,ある種の Shell って,
$ cd ///////
みたいなことをするとルートディレクトリだと認識するんだな。
個人的に ~ がすごく打ちにくい位置にあるので // を ~ だと解釈させようと試行錯誤してるときに発見した。
これはルートディレクトリが特別って訳じゃなく,
$ ls /usr////bin///////
みたいなことでも問題ない。ということは // == ~ にすることは Shell のソース弄るくらいしか方法がないということになる。
俺みたいな無駄な努力をしないために残す
387:名無しさん@お腹いっぱい。
17/10/21 01:32:07.61 .net
それシェルの機能じゃなくね?
388:名無しさん@お腹いっぱい。
17/10/21 01:36:03.89 .net
こういうのも開けるし
URLリンク(mevius.5ch.net)
389:名無しさん@お腹いっぱい。
17/10/21 08:08:40.09 .net
もしかして RFC とかで実装が統一されてんのか。
390:370
17/10/21 14:49:37.55 .net
>>381
cdについてはPOSIXで決まっている
URLリンク(pubs.opengroup.org)
の8のc
>>382
シェル一部であるcdコマンドの機能
>>383
それはまた別の話
391:名無しさん@お腹いっぱい。
17/10/21 14:51:29.58 .net
$ /bin/echo /usr////bin///////
/usr////bin///////
$
となるので、lsについてはシェルが解釈してるわけではなくlsが解釈していると思われる
392:名無しさん@お腹いっぱい。
17/10/21 14:55:41.90 .net
まあ//を~にしたいならシェルのキーバインド使えばいいんじゃないですかね
393:名無しさん@お腹いっぱい。
17/10/21 15:01:35.03 .net
ちなみにこんなんなったりする
シェルの種類によって挙動は違うかも
$ cd //
$ pwd
//
$
理由は
URLリンク(www.unixguide.net)
394:名無しさん@お腹いっぱい。
17/10/21 15:03:36.25 .net
キーバインドいじっちゃうと
「http://」を打とうとして「http:~」になったりして困らないか
395:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 16:52:10.67 .net
>>385
「An implementation may」だから必ずではないのでは
396:名無しさん@お腹いっぱい。
17/10/22 21:04:49.39 .net
必ずって言ったっけ
397:名無しさん@お腹いっぱい。
17/10/22 21:24:08.21 .net
bashはパス中の複数の/を一つにするはず
398:名無しさん@お腹いっぱい。
17/10/22 22:40:16.51 .net
>>392
>>388
399:名無しさん@お腹いっぱい。
17/10/26 13:24:16.45 .net
ファイルをリネームしてコピーし続けるスクリプトなんですが
コマンドが見つからないと出てよくわかりません
#/bin/sh
PATH='/var/log/'
PATH2='dnsmasq.log'
DOT='.'
for i in 6 5 4 3 2 1
do
PATH3=$PATH$PATH2$DOT$i
PATH4=`expr $i - 1`
PATH5=$PATH$PATH2$DOT$PATH4
mv $PATH5 $PATH3
done
PATH6=0
mv $PATH$PATH2 $PATH$PATH2$PATH6
exit 0
400:名無しさん@お腹いっぱい。
17/10/26 13:29:36.84 .net
>>394
for VAR in ARGS; do
command;
done
401:名無しさん@お腹いっぱい。
17/10/26 13:30:47.44 .net
sh -xで実行してみると以下の通り出力されました
+ PATH=/var/log/
+ PATH2=dnsmasq.log
+ DOT=.
+ PATH3=/var/log/dnsmasq.log.6
+ expr 6 - 1
./splitLog.sh: 1: ./splitLog.sh: expr: not found
+ PATH4=
+ PATH5=/var/log/dnsmasq.log.
+ mv /var/log/dnsmasq.log. /var/log/dnsmasq.log.6
./splitLog.sh: 12: ./splitLog.sh: mv: not found
(省略)
+ PATH3=/var/log/dnsmasq.log.1
+ expr 1 - 1
./splitLog.sh: 1: ./splitLog.sh: expr: not found
+ PATH4=
+ PATH5=/var/log/dnsmasq.log.
+ mv /var/log/dnsmasq.log. /var/log/dnsmasq.log.1
./splitLog.sh: 12: ./splitLog.sh: mv: not found
+ PATH6=0
+ mv /var/log/dnsmasq.log /var/log/dnsmasq.log0
./splitLog.sh: 17: ./splitLog.sh: mv: not found
+ exit 0
402:名無しさん@お腹いっぱい。
17/10/26 13:46:18.65 .net
とりあえず何がしたいかを書け
そんな汚いもん見せられても何がしたいのか分かりにくい
403:名無しさん@お腹いっぱい。
17/10/26 13:51:57.00 .net
PATH潰すんなら外部コマンドはフルパスで書かんと
404:名無しさん@お腹いっぱい。
17/10/26 14:02:38.34 .net
フルパスで書かないといけなかったんですね…
405:修正してみたらできました、ありがとうございます!
406:名無しさん@お腹いっぱい。
17/10/26 14:11:58.47 .net
ようわからんがsavelogコマンドみたいなことがしたいのか
407:名無しさん@お腹いっぱい。
17/10/26 14:27:19.72 .net
PATHがきしょい
408:名無しさん@お腹いっぱい。
17/10/26 15:33:20.43 .net
>>399
「フルパスで書かなきゃいけない」のではない
$PATHを上書きするのがマズい
409:名無しさん@お腹いっぱい。
17/10/26 15:35:16.21 .net
これ1〜6までファイル全部消えるんじゃね?
410:名無しさん@お腹いっぱい。
17/10/26 15:35:32.78 .net
1から6まで
411:400
17/10/26 15:37:15.23 .net
あ、すまん勘違い
逆だった
412:名無しさん@お腹いっぱい。
17/10/26 16:21:22.80 .net
5を6にリネーム~0を1にリネーム
そのあと最新のログを0にリネームじゃないかな
どっちにしろゴリ押し感半端ないが
413:名無しさん@お腹いっぱい。
17/10/26 16:30:18.25 .net
>>402
$PATHって環境変数ですよね…
何故気づかなかったんだろう
お恥ずかしい限りです
414:名無しさん@お腹いっぱい。
17/10/26 16:37:04.75 .net
あーそういうことか、403のお陰でやりたいことは分かった
415:名無しさん@お腹いっぱい。
17/10/26 18:34:54.50 .net
こうすればわかりやすいですかね
#!/bin/sh
DIR=/var/log/
FILE=dnsmasq.log;
START=0
for i in `seq 1 6`
do
DEC=`expr $i - 1`
cd $DIR
mv "${FILE}.${DEC}" "${FILE}.${i}"
done
cd $DIR
mv $FILE "${FILE}.${START}"
exit 0
416:名無しさん@お腹いっぱい。
17/10/26 18:56:39.92 .net
毎回cdするのは無駄やろ
417:名無しさん@お腹いっぱい。
17/10/26 19:01:29.48 .net
個人的にexpr嫌いなのもあって$(())使っちゃうな
mv "${FILE}.$((i-1))" "${FILE}.$i"
あとseq間違ってね?
seq 6 1 -1
418:名無しさん@お腹いっぱい。
17/10/26 19:25:35.16 .net
これだと全部ログ.0になっちゃいますね
ありがとうございます!
419:名無しさん@お腹いっぱい。
17/10/28 17:54:16.26 .net
logrotateの真似したいのかな
420:名無しさん@お腹いっぱい。
17/10/28 19:36:18.05 .net
素直にそっち使った方が楽に出来るよね
421:名無しさん@お腹いっぱい。
17/10/28 22:25:53.38 .net
そっちを使うほうが楽、ということを学習するにはまずは自分で書いてみて、大変だぜてことを理解しないと
422:名無しさん@お腹いっぱい。
17/10/31 13:10:26.11 .net
昔solarisで見たlogrotateはshell scriptだった
どこかで見れれば参考になるかも
423:名無しさん@お腹いっぱい。
17/10/31 13:39:18.79 .net
あれはあんまりきれいじゃないから参考にしない方がいい
424:名無しさん@お腹いっぱい。
17/10/31 13:48:20.70 .net
この /usr/lib/newsyslog ね
URLリンク(www.tcp-ip.or.jp)
425:名無しさん@お腹いっぱい。
17/10/31 15:47:40.56 .net
シェルスクリプト
URLリンク(www.apt-browse.org)
マニュアルページ
URLリンク(manpages.debian.org)
426:名無しさん@お腹いっぱい。
17/11/02 04:12:26.82 .net
これ?
URLリンク(goo.gl)
URLリンク(www.bityet.us)
427:名無しさん@お腹いっぱい。
17/11/03 04:26:36.66 .net
X Windows System で,どの IMF が用いられているか判別する方法を考えている。
思い付いたのは $XMODIFIERS 環境変数を用いた
case $XMODIFIERS in
  *ibus)
    local _imf=ibus
    ;;
  *fcitx)
    local _imf=fcitx
    ;;
  *uim)
    local _imf=uim
    ;;
  *SCIM)
    local _imf=scim
    ;;
esac
なんだけど,$XMODIFIERS が必ず設定されているとは限らないし,なんか漏らしてる気がしてならん……。
428:名無しさん@お腹いっぱい。
17/11/03 04:29:53.86 .net
ツールで投稿したら空白がエラいことになった。すまん。
429:名無しさん@お腹いっぱい。
17/11/03 07:20:14.85 .net
Shell Scriptのコメントアウトに
# @(#) Foo is foo.
みたいな文字を書いておいて
$ what ./foo.sh
とやると
Foo is foo
という表示がでるというようなwhatコマンドがあるらしいのですが
手元のFedora26に見付かりません。($ dnf search what, $ dnf provides what)
どこかにありますでしょうか。
430:名無しさん@お腹いっぱい。
17/11/03 08:32:21.55 .net
Linuxの質問はLinux板で
431:名無しさん@お腹いっぱい。
17/11/03 10:09:39.61 .net
>>423
whatはかつて使われていたSCCSというソースコード管理システムに入っていたコマンド
現在はGNU CSSCがSCCSと同等の機能を提供している
なのでcsscというパッケージを探す
なければURLリンク(www.gnu.org)へGO!
432:名無しさん@お腹いっぱい。
17/11/20 15:39:18.57 .net
case文で
$1がhogeで、$2がhageの場合のみ処理Aを実行する
みたいなのできないでしょうか?
433:名無しさん@お腹いっぱい。
17/11/20 15:49:53.05 .net
入れ子にすりゃいい
434:名無しさん@お腹いっぱい。
17/11/20 15:56:36.27 .net
$1にも$2にも含まれ得ない文字を区切りにして連結
435:名無しさん@お腹いっぱい。
17/11/20 16:00:08.82 .net
>>425
ありがとうございます。依存地獄に嵌ってしまいあきらめました,教えてもらったのにすいません。
また,御礼がおそくなってもうしわけないです。
436:名無しさん@お腹いっぱい。
17/11/20 16:22:06.48 .net
caseで実装するなら入れ子かね
しかしここでも髪の話するのか
437:名無しさん@お腹いっぱい。
17/11/20 17:07:40.56 .net
>>427
>>428
>>430
入れ子にできることを全然知らず
こんな感じかなでやってみたらいけました
皆さん短時間にありがとうございます
>>430
他意はありませんw
438:名無しさん@お腹いっぱい。
17/11/20 18:39:46.60 .net
>>430
気にし過ぎだろ
さっさと剃れよ
439:名無しさん@お腹いっぱい。
17/12/02 09:15:00.24 .net
すみません、bashでタブ区切りのファイルを配列に取り込む際、空の列が詰めて格納されてしまいます
そうならない方法はあるのでしょうか
exec < file.tsv
while read LINE
do
ARRAY=(${LINE})
done
440:名無しさん@お腹いっぱい。
17/12/02 10:11:05.91 .net
>>433
変数の参照部分を引用符で囲むとか。
#!/bin/sh -
exec < file.tsv
while read LINE; do
ARRAY=("$LINE")
done
echo "$ARRAY"
IFS の値を空にするとか。
#!/bin/sh -
IFS=
exec < file.tsv
while read LINE; do
ARRAY=($LINE)
done
echo $ARRAY
441:名無しさん@お腹いっぱい。
17/12/02 10:16:16.70 .net
あ,5ch ってコード貼るのまずいんだっけ。しくったな。
まあこんなくだらないコードに著作権云々関係ないかw
442:名無しさん@お腹いっぱい。
17/12/02 10:37:47.62 .net
>>433
bash なら mapfile がある(別名 readarray)
-t オプションで各行末尾の改行を取除く
mapfile -t ARRAY <file.tsv
443:名無しさん@お腹いっぱい。
17/12/03 07:15:44.68 .net
早速検証してみます、ありがとうございます!
444:名無しさん@お腹いっぱい。
17/12/05 08:37:43.17 .net
検証した結果、IFSを改行のみにして読み込み、その文字列をCutで抜くで達成できました
こうしないと空文字の列が詰まってしまいました
IFS_BAK=IFS
IFS=$'¥n'
exec < file.tsv
while read LINE
do
echo "${LINE}" | cut -f1 >> tmp1.txt
echo "${LINE}" | cut -f2 >> tmp2.txt
done
IFS=IFS_BAK
445:名無しさん@お腹いっぱい。
17/12/05 09:20:20.37 .net
>>438
重箱の隅を突くようで悪いが,その書き方をするならシェバンは #!/usr/bin/bash
にしておけ。
$'string' は Bash の独自拡張だった気がする。
446:433
17/12/06 10:04:48.53 .net
>>433
今ごろ勘違いに気づいた
mapfileじゃ全然見当外れじゃないか…なんかごめん
たとえば
IFS=$'\t'
line="${IFS}b"
このとき
a=(${line})
で
a=("" "b")
となるのを期待しているのだけど、実際にはクオートしていないので
a=( b)
と同じことになって、先頭の「空の列」は残らない
かといってクオートしたら
a=("${line}")
これはタブ区切りで分割されることなく行全体がそのままになるので意味がない…
ということだよね
>>438のようにファイルに書き出すだけなら、そう
447:やってcutでやるのが扱いやすそうだけど もしどうしても配列にする必要があるときは、こんな感じでどうだろう https://ideone.com/uPfCwc 空だと消えてしまうなら空にならないよう何か入れとけばいいじゃない(配列にしてから取り除く) という案
448:名無しさん@お腹いっぱい。
17/12/11 05:34:31.40 .net
>>440
回答が遅れてすみませんでした
なるほど…その手はいけるんですね
ありがとうございます、活用させていただきます
自分は今回縛りがあってbashだけでやっているのですが、可能なら他のスクリプトに任すべきかな…(´・ω・`)
449:名無しさん@お腹いっぱい。
17/12/14 00:31:41.37 .net
そこは「他のシェルに」じゃないか
450:名無しさん@お腹いっぱい。
17/12/29 06:50:06.02 .net
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
PPEE18BYYA
451:名無しさん@お腹いっぱい。
18/01/08 17:53:30.81 .net
はじめまして
早速で申し訳ないのですが、以下のシェルスクリプトでdoを含むコマンドが一切使用できません。理由と解決策を教えてください。
#!/bin/sh
dir=`dirname ${0}`
echo -n "探す拡張子="
read que
ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}')
if [ -z "${ans}" ];then
echo "${que}は見つかりませんでした。\n終了します。"
exit
else
echo "${ans}"
fi
452:名無しさん@お腹いっぱい。
18/01/08 17:59:26.22 .net
>>444
すみません訂正します。
select文のみどこに書いてもSyntax error: "do" unexpectedというエラー出てしまいます。
453:名無しさん@お腹いっぱい。
18/01/08 18:43:33.26 .net
doが何のこと言ってるのかよくわからんが実行の仕方が間違ってんじゃね
まず問題がどこにあるかを明確に切り分けろ
454:名無しさん@お腹いっぱい。
18/01/08 20:31:51.74 .net
>>446
さっき書き直したのですが、改善しませんでした。
エラー内容はさっきと同じで、 Syntax error: "do" unexpectedです。
441でも、どこに記述しても変わらなかったため、問題の部分を消して使っていたので、doの部分を貼り忘れてました。すみませんでした。
#!/bin/sh
dir=`dirname ${0}`
echo -n "検索する拡張子:"
read que
while [ -z "${que}" ]
do #ここのdoは問題なし。
echo -n "拡張子を入力してください。\n検索する拡張子:"
read que
done
ans=$(find ${dir} -name *.${que} | awk -F/ '{print $NF}')
if [ -z "${ans}" ];then
echo "${que}は見つかりませんでした。\n終了します。"
exit
else
echo "${ans}"
fi
#============ここから問題の部分===========
select var in ${ans}終了
do
if [ ${var} = 終了 ];then
exit
fi
if [ ${que} = gz -o xz];then
tar -xf ${dir}${var}
fi
done
455:名無しさん@お腹いっぱい。
18/01/08 20:59:27.67 .net
xz ]やないの?
シンタックスエラーって出てるんだからまず自分を疑おう
456:名無しさん@お腹いっぱい。
18/01/08 21:01:57.76 .net
どこに貼ってもだめならselectの構文がなんかおかしいんじゃないの
457:名無しさん@お腹いっぱい。
18/01/08 21:16:18.25 .net
>>448
スペース入れても変わりませんでした。
>>449
構文がおかしい部分を自分では見つけられませんでした。
458:名無しさん@お腹いっぱい。
18/01/08 21:41:13.34 .net
do unexpectedなら直前の「${ans}終了」ちゃうんけ
459:名無しさん@お腹いっぱい。
18/01/08 22:01:36.46 .net
>>451
変数じゃなくしても、終了を消しても、別の変数に変えてもSyntax error: "do" unexpectedは消えませんでした。
460:名無しさん@お腹いっぱい。
18/01/08 22:17:55.91 .net
とりあえず「間違いなく動作する」select構文をまず単品で書け
ネットのコピペでも構わん。出来る限りシンプルなやつで
動いたならそれを少しずつ改造して動かしてを繰り返しつつお前の目的に近づけろ
461:名無しさん@お腹いっぱい。
18/01/08 22:28:27.56 .net
shでselectってできたっけ
462:名無しさん@お腹いっぱい。
18/01/08 23:44:18.33 .net
SC2039: In
463: POSIX sh, select loops are undefined. bashならとりあえず動く、#!/bin/bash にしとけば
464:名無しさん@お腹いっぱい。
18/01/08 23:56:10.56 .net
>>453
ありがとうございます。コピペ&作り直しでできました。
>>454
Ubuntuでやっていたのでできました。
>>455
書き換えました。
皆様ありがとうございました。
もしかしたら似たようなものがすでにあるかもしれませんが、とりあえずできたものを>>454に貼っておきます。
465:名無しさん@お腹いっぱい。
18/01/08 23:57:24.21 .net
#!/bin/bash
PS3="入力してください:"
menu="曖昧 前方一致 後方一致 完全一致 拡張子"
echo "検索するディレクトリを入力してください
入力しなかった場合、このファイルがあるディレクトリを検索します。"
while [ -z "${dir}" ]
do
echo -n "ディレクトリ入力:"
read dir
if [ -e "${dir}" ];then
break
else
unset dir
echo "そのようなディレクトリはありません。"
fi
done
echo "検索方法を選択してください:"
>>455に続く
466:名無しさん@お腹いっぱい。
18/01/08 23:58:02.00 .net
>>457続き
select var in ${menu}
do
echo ["${var}"]で検索します。
echo -n "検索する単語を入力してください:"
read que
case "${var}" in
曖昧)
ans=$(find ${dir} -name *"${que}"*);;
前方一致)
ans=$(find ${dir} -name "${que}"*);;
後方一致)
ans=$(find ${dir} -name *"${que}");;
完全一致)
ans=$(find ${dir} -name "${que}");;
拡張子)
ans=$(find ${dir} -name *."${que}");;
esac
echo "${ans}"
exit
done
467:名無しさん@お腹いっぱい。
18/01/09 07:32:28.94 .net
正直見辛いしその程度なら一行コマンド打つんでいらないっす
468:名無しさん@お腹いっぱい。
18/01/09 12:43:53.77 .net
* が展開されてうまく動かなかった
469:名無しさん@お腹いっぱい。
18/01/09 20:01:44.41 .net
Linuxの話ならLinux板で聞いてください
470:名無しさん@お腹いっぱい。
18/01/10 13:12:44.56 .net
odコマンドって規定で行番号は付くは省略するわでほんとUNIX哲学的じゃねーな
xxdとかのほうが遥かに扱いやすいわ
471:名無しさん@お腹いっぱい。
18/01/10 16:21:53.96 .net
行番号ちゃうし
472:名無しさん@お腹いっぱい。
18/01/11 12:57:39.11 .net
od -An -v
473:名無しさん@お腹いっぱい。
18/01/13 15:24:43.34 .net
規定がっていう話でしょ
それと同じで ls も規定で勝手に表示を整えるのをやめてほしい。
Plan 9のlsは規定でls -1みたいな挙動らしいけど。
474:名無しさん@お腹いっぱい。
18/01/13 15:30:27.80 .net
規定なら従っといた方がいいじゃん
罰則あるかもしれんし
475:名無しさん@お腹いっぱい。
18/01/13 15:31:53.68 .net
それは規約じゃ
476:名無しさん@お腹いっぱい。
18/01/13 19:01:27.06 .net
default = 既定
477:名無しさん@お腹いっぱい。
18/01/13 22:58:37.21 .net
違反すると罰則あるのは規定じゃなくて規約だろって話
478:名無しさん@お腹いっぱい。
18/01/14 10:57:30.90 .net
だから「Default=規定」って書いたんじゃねーの?
規約じゃないって意味で。
479:名無しさん@お腹いっぱい。
18/01/14 11:45:22.78 .net
ワケワカメ
480:名無しさん@お腹いっぱい。
18/01/14 15:52:04.52 .net
なんだこの流れ
全員頭悪いの?
481:名無しさん@お腹いっぱい。
18/01/14 16:00:17.68 .net
流れ?
482:名無しさん@お腹いっぱい。
18/01/14 16:20:16.87 .net
全次郎?
483:名無しさん@お腹いっぱい。
18/01/14 17:49:06.78 .net
規約じゃなくて規定なら別に従う必要ないって話なだけじゃないのか
484:名無しさん@お腹いっぱい。
18/01/14 17:50:28.44 .net
default=既定≠規定
485:名無しさん@お腹いっぱい。
18/01/14 19:12:18.41 .net
>>465の誤字を>>466が茶化したのに理解されずにグダグダになった流れ
486:名無しさん@お腹いっぱい。
18/01/14 19:28:08.33 .net
すまん誤字に全く気付かなかった
487:名無しさん@お腹いっぱい。
18/01/14 19:34:54.90 .net
あーなるほどそういうことか。
普通に「既定」に脳内変換してたせいで意味不明な喧嘩に見えてたわ
488:名無しさん@お腹いっぱい。
18/01/15 00:06:01.79 .net
脳内変換てw馬鹿なだけやんかw
489:名無しさん@お腹いっぱい。
18/01/15 08:02:47.35 .net
すぐそうやって火種を撒く……
490:名無しさん@お腹いっぱい。
18/01/15 22:28:34.05 .net
$'\n' こういう $'何か' っていう書き方って bash 限定?
sh でもいける?
491:名無しさん@お腹いっぱい。
18/01/16 12:48:12.73 .net
bash限定
492:名無しさん@お腹いっぱい。
18/01/16 15:07:55.74 .net
POSIX xargs
URLリンク(pubs.opengroup.org)
には-0オプションがありませんが,どうにかしてxargsにナル文字区切りのデータを渡せませんかね。
もしくは xargs -0 がエラーになるOSをご存知でしたら教えて下
493:さい。 FreeBSD, MacOS, Debian GNU/Linuxともにxargsに-0オプションはありました。
494:名無しさん@お腹いっぱい。
18/01/16 16:09:39.07 .net
Solarisとかあやしそうだね
495:名無しさん@お腹いっぱい。
18/01/17 00:51:10.26 .net
>>485
そうみたいね
URLリンク(unix.stackexchange.com)
URLリンク(docs.oracle.com)
496:481
18/01/17 04:46:35.14 .net
>>485
>>486
ありがとうございます。
ファイルパスに関するシェルスクリプトを作ろうとしており,
ファイル名に改行文字が含まれている場合を考慮してナル文字区切りでデータを扱いたかったのです。
が,もうそんな特殊なファイル名にしている側の責任ってことにします。
仕事だったらもうちょっと考えるところですが個人で扱うので自分が気をつければいいだけなんで。
リンク等ありがとうございました。
497:名無しさん@お腹いっぱい。
18/01/17 08:37:13.99 .net
URLリンク(pubs.opengroup.org)
POSIXのfindには+終端もあるみたいだから、
用途によってはxargsを使わずに変なファイル名が扱えることもある。
例によってSolarisにはないが、POSIXに準拠してないということで切れる。
498:481
18/01/17 09:45:47.24 .net
>>488
ありがとうございます。
> 例によってSolarisにはないが、POSIXに準拠してないということで切れる。
恥かしながらSolaisってPOSIX準拠を謳っていないことを今知りました……
よくシステムコールAPIの説明で「SolaisまたはPOSIX」とありますが,
その真意をようやく掴めました。
---
awkのRSにナル文字を指定できればxargsの代替として使えるかもしれないと思ったんですが,
$ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | awk -v RS="$(printf '\0')" '{ print $0 }'
みたいなことをやっても撥ねられる
(シェルがナル文字についての警告を出して,「FirstSecondThird」とだけ表示される)
のでやっぱりナル区切りを扱うのはやめておこうと思いました。
大人しく空白区切り・改行レコードで行きます。
499:481
18/01/17 09:55:31.15 .net
なんかこうすると上手く行った (ように見えます)。
$ printf '%s\0%s\0%s' 'First' 'Second' 'Third' | \
awk ' \
BEGIN {
RS="\0"
ORS="\n"
}
{
} \
'
なんでこれが良くて >>489 がだめなのか分からないのが怖いので結局ナル文字区切りはやめることにしました。
連投&スレ汚し失礼しました。
500:名無しさん@お腹いっぱい。
18/01/18 11:41:43.86 .net
sedでiフラグをdフラグと一緒に使うことはできないのでしょうか。
501:名無しさん@お腹いっぱい。
18/01/18 11:44:10.00 .net
↓
sed
スレリンク(unix板)
502:名無しさん@お腹いっぱい。
18/01/18 19:40:41.47 .net
>>492
誘導ありがとうございます。一応の解決を見ました。
503:名無しさん@お腹いっぱい。
18/01/26 00:50:46.41 .net
hoge.sh <(cat hoge.txt fuga.txt piyo.txt)
### hoge.sh
#!/bin/bash
wc -l $1 # 正しい行数
wc -l $1 # なぜか0
おせーてエロいひと
504:名無しさん@お腹いっぱい。
18/01/26 06:57:46.46 .net
>>494
つ cat hoge.txt fuga.txt piyo.txt | (wc -l; wc -l)
505:名無しさん@お腹いっぱい。
18/02/01 22:35:58.02 .net
こういうhoge.shがあったとして
```
#!/bin/bash
set -x
for x in aa bb cc; do
echo $x
done
```
実行するとこうなる
```
$ bash hoge.sh
+ for x in aa bb cc
+ echo aa
aa
+ for x in aa bb cc
+ echo bb
bb
+ for x in aa bb cc
+ echo cc
cc
```
けどこうしたい(forやifが出力されないようにしたい)
```
$ bash hoge.sh
+ echo aa
aa
+ echo bb
bb
+ echo cc
cc
```
どうしたらいい?
506:名無しさん@お腹いっぱい。
18/02/01 22:38:33.65 .net
つづき。ためしにこうしてみた
```
#!/bin/bash
for x in aa bb cc; do
set -x
echo $x
set +x
done
```
実行したら set +x も表示された(これは
507:いらない) ``` $ bash hoge.sh + echo aa aa + set +x + echo bb bb + set +x + echo cc cc + set +x ```
508:名無しさん@お腹いっぱい。
18/02/01 22:40:28.83 .net
grep -vでもしたら
509:名無しさん@お腹いっぱい。
18/02/01 23:21:30.45 .net
echo $x
の前に
echo + echo $x
と記述する
510:名無しさん@お腹いっぱい。
18/02/01 23:48:49.07 .net
bashだからじゃね?
511:名無しさん@お腹いっぱい。
18/02/02 01:26:01.46 .net
fishてどう?
512:名無しさん@お腹いっぱい。
18/02/02 01:47:58.90 .net
$ cat hoge.sh
#!/bin/bash
for x in aa bb cc; do
(set -x
echo $x)
done
$ bash hoge.sh
+ echo aa
aa
+ echo bb
bb
+ echo cc
cc
なんつって
513:名無しさん@お腹いっぱい。
18/02/02 08:54:06.42 .net
>>502
> (set -x
> echo $x)
この方法でできました。ありがとうございます。
もっと簡潔に書けるといいのだけど。
514:名無しさん@お腹いっぱい。
18/02/08 16:21:59.61 .net
すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど
i=256;j=0 ; while [ ! $i -eq 1 ] ; do i=$(( $i /2 ));echo $i; j=$(($j + 1)) ; done ;echo ans:$((32 - $j))
もっとてっとり早く出すコマンドはありませんか? できれば256を入れたら8とかさっさと返してくれるような奴を
あとよくわからんけど 計算で256と2を入力したら後ろの8とかを出すコマンドはないですか?
覚えるとか調べるは嫌いなんで、なるべく手間のかからないものを教えてください
515:名無しさん@お腹いっぱい。
18/02/08 17:19:18.65 .net
サブネットマスクぐらい暗記か手計算しろよ
516:名無しさん@お腹いっぱい。
18/02/08 18:06:11.03 .net
>覚えるとか調べるは嫌いなんで、
生きてる意味あんのか、これで?
517:名無しさん@お腹いっぱい。
18/02/08 19:05:19.51 .net
>>505
手間がかかるから面倒だよ
20万以上やるし
ああ これででるのね うしろに変なゴミが付いてるがどうでもいいか
:echo " l(65556)/l(2)" | bc -l
16.00044020841915062248
:echo " l(1024)/l(2)" | bc -l
10.00000000000000000010
>>506
また努力するするのが誇らしいとか思ってる馬鹿?ww
俺が考えるならこの機械とか利用価値はないよ
ゲーム開発のUNITYのスレに行けば似たような奴が沢山いるよ
まぁしばらくはマシーンを買う金がないからlinuxとイヤイヤ付き合うしかないが
ほんと手間がかかるな
518:名無しさん@お腹いっぱい。
18/02/08 19:20:30.57 .net
ある意味面白いやつだな
519:名無しさん@お腹いっぱい。
18/02/08 20:11:48.67 .net
>また努力するするのが誇らしいとか思ってる馬鹿?ww
こんなこと考えたこともないけど
思い込みが激しいっていうか頭腐ってるだろ
ああ死んでるんだったっけ
520:名無しさん@お腹いっぱい。
18/02/08 20:31:31.63 .net
落ち着け
521:名無しさん@お腹いっぱい。
18/02/08 20:57:59.75 .net
>>509
そういう手間が掛かるのはちょっと…
利用価値がないし
522:名無しさん@お腹いっぱい。
18/02/08 21:47:56.46 .net
バイト雇って計算してもらいましょう
523:名無しさん@お腹いっぱい。
18/02/08 23:17:47.05 .net
>>512
俺自体が無職だよ
さて間抜けからビットコインを盗まんと
524:名無しさん@お腹いっぱい。
18/02/09 01:51:26.42 .net
>>513
頼むわ
間抜けは存在自体がガンだから
525:名無しさん@お腹いっぱい。
18/02/09 09:19:26.94 .net
犯罪の予告と教唆かよ
526:名無しさん@お腹いっぱい。
18/02/09 22:09:51.06 .net
>>515
予告と教唆じゃなくて実行中だよ
とろくさいやつだなw
URLリンク(or2.mobi)
URLリンク(or2.mobi)
3週間たってだいぶリナックスにも慣れてきた
ある程度稼がせてもらったらウインドウズに戻るよ
ライブは少し使いにくい
527:名無しさん@お腹いっぱい。
18/02/09 22:12:54.21 .net
なんかシェルスクリプト総合とか書いてあったから来てみたけど
しょぼそうな連中しか居ないけど…
ここのひとってシステム管理とかで食ってる連中が多いの?
528:名無しさん@お腹いっぱい。
18/02/09 22:39:19.88 .net
煽ったらなんかもらえるのか?
529:名無しさん@お腹いっぱい。
18/02/09 22:54:21.43 .net
なんか急に変なの出てきたな
どっかにスレのアドレスでも貼られたのか
530:名無しさん@お腹いっぱい。
18/02/10 00:05:29.76 .net
いや元々お前らの方がずっと変だけどw
531:名無しさん@お腹いっぱい。
18/02/10 05:51:23.70 .net
変と思いながら見続けて今さあながら「変だ!変だ!」と言う人って・・・
まあ相手にされるかは別にして居たいなら居ていいと思うよ
532:名無しさん@お腹いっぱい。
18/02/10 11:31:48.71 .net
>>517
面白いネタがあれば食いつくんじゃない?
つまらんネタしか無いから過疎ってる。
533:名無しさん@お腹いっぱい。
18/02/10 19:55:51.78 .net
ほんとに揃いも揃っておまえらは無能な連中だよ
こんな能無し共が良いかねを取って裕福な生活をしてるのに
何で俺がしこしこビットコインを盗まんとならんのか……
よしよしw 今日はあがりはデカそうだな
534:名無しさん@お腹いっぱい。
18/02/15 20:16:20.69 .net
1111
2222
3333
という内容のファイルに対して,
• 3333 が見付かれば 3333 を,
• 見付からなければ 2222 を
• ⋮
という操作を施したいです。そして,これをパイプに繋ぎたいです。
私が考えたのは↓のスクリプトですが,
for q in 3333 2222 1111; do
cat <<-'EOF' |
1111
2222
3333
EOF
grep $q && break
done
難点があります。
1. パイプでファイルを渡せない。
2. 順番に依存している (実際のファイルでは 3333 が最後にくるとは限らない)
どうか助言願います
535:名無しさん@お腹いっぱい。
18/02/15 20:19:41.66 .net
あ,すいません。期待する動作は,
かりに理想のスクリプトを idea.sh として,
$ cat ./org.txt
2222
3333
1111
$ cat ./org.txt | idea.sh
3333
$ cat ./org.txt | sed -e '/3333/d' | idea.sh
2222
$ cat ./org.txt | sed -e '/3333/d' -e '/2222/d' | idea.sh
1111
という感じです。
536:名無しさん@お腹いっぱい。
18/02/15 21:01:11.15 .net
標準入力を受け取れるように作ればいいんじゃないの?
idea.sh
sed -e "/$1/d" < /dev/stdin
$ cat ./org.txt | ./idea.sh ‘3333’ | ./idea.sh ‘2222’ | ./idea.sh ‘1111’
537:名無しさん@お腹いっぱい。
18/02/15 21:10:36.33 .net
awk使うのが妥当。
awkが嫌なら、標準入力をファイルにコピーしてから複数回に分けて処理するしかないな。
538:名無しさん@お腹いっぱい。
18/02/15 21:26:45.83 .net
やりたい事はシンプルなのに標準入力使おうとしてるせいで妙に面倒になってるな
awkかgrepでよさそうだが
539:名無しさん@お腹いっぱい。
18/02/15 21:36:30.68 .net
事前にソートしたら?
540:名無しさん@お腹いっぱい。
18/02/15 21:38:59.09 .net
tacは?
541:名無しさん@お腹いっぱい。
18/02/15 21:41:36.03 .net
$PATHの中身って最初は空じゃないの?
$PATHをechoしてみたら,その中に
~/.bashrcや~/.bash_profileでexportされてるパス以外のモノが含まれてた
でも$PATHに初期値を設定できるならわざわざ~/.bashrcや~/.bash_profileでexportする必要なくない?
どうなってるのか教えてくれ
542:名無しさん@お腹いっぱい。
18/02/15 22:34:13.00 .net
OSによるけどinit.dの中とかlogin.confとかでデフォルトを設定する。
ここ書き換えると全ユーザに影響が出るので、個別設定は.bash_profileとかに書く。
exportするのは万一PATHなしで起動されてしまったとき用。
543:名無しさん@お腹いっぱい。
18/02/16 02:23:59.63 .net
>>504
> すんませんけど 今割り当て端末数からこんな感じでサブネットマスクを出すのを作ったんですけど
ipcalcコマンドで行けるんじゃね?
知ってるだけで使ったことないけど
他にもiptabとかipcountとかあるらしいな
544:名無しさん@お腹いっぱい。
18/02/16 08:44:35.62 .net
>>525
最初に自身で書いてたようなんで十分じゃないの?
パイプで渡せないというのが何を嫌がってんのかによるけど
テキストなら貯めてechoしたっていいんじゃ
DATA="$(cat -)" && cat $KEYWORDFILE | while read KEYWORD ; do ( echo "$DATA" | grep "$KEYWORD" ) && break ; done
データでかいから捜査対象の方を1パスで捜査したいってことなら
シェルスクリプトでがんばるより別のことでがんばろう
545:名無しさん@お腹いっぱい。
18/02/16 20:37:24.42 .net
>>533
ありがとやっと有益なレスが出たよ
他のやつは揃いも揃って無能な役立たずばっかりだから
546:名無しさん@お腹いっぱい。
18/02/16 20:41:32.04 .net
ショッアーーーーーーーーー!!!
さってビットコインを盗むか
547:名無しさん@お腹いっぱい。
18/02/16 21:23:29.93 .net
アホにレスした俺もアホだった。
やっぱアホはスルーに限る。
548:名無しさん@お腹いっぱい。
18/02/17 02:29:48.74 .net
>>533
俺も普通は ipcalc 使ってるけど最近は sipcalc というのもあるらしい。
紹介してくれてる iptab とか ipcount 含めて今度試してみようと思う
549:名無しさん@お腹いっぱい。
18/02/20 18:16:48.11 .net
シェルスクリプトの函数で扱える文字数に上限はないのでしょうか。
URLリンク(pubs.opengroup.org)
↑ここが多分公式の文書だと思うのですが,使用可能な文字の種類に言及こそすれ,文字数については触れていないように思いますが……
ファイル名などの上限と同じく255文字でしょうか?
550:名無しさん@お腹いっぱい。
18/02/22 02:57:44.82 .net
>>539
255文字かどうかは、質問するまでもなくすぐにわかると思いますよ。
551:名無しさん@お腹いっぱい。
18/02/22 05:46:35.30 .net
ワロタ、試せよwそして調べろよって話だよな
552:名無しさん@お腹いっぱい。
18/02/24 22:51:48.88 .net
$ :> "$(yes a | head -n 255 | tr -d '\n')"
$ :> "$(yes a | head -n 256 | tr -d '\n')"
sh: 1: cannot create aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: File name too long
553:名無しさん@お腹いっぱい。
18/02/25 16:39:26.69 .net
ファイル名の文字数上限はファイルシステムに依存する
554:名無しさん@お腹いっぱい。
18/03/03 23:53:36.62 .net
シェルスクリプトで有るコマンドを実行した時、
標準出力の内容を緑に、標準エラー出力の内容を
赤にしたいんだけどどうすればいい?
本当に聞きたいことはエスケープシーケンスではなく、
標準出力と標準エラーをそれぞれ別々に加工する方法ね
555:名無しさん@お腹いっぱい。
18/03/03 23:53:52.11 .net
ちなみにファイルに吐き出さずにやりたい
556:名無しさん@お腹いっぱい。
18/03/04 01:26:00.19 .net
お前にはなんか教えたくない
557:名無しさん@お腹いっぱい。
18/03/04 01:40:31.82 .net
なんかググればすぐ出てきそうな
558:名無しさん@お腹いっぱい。
18/03/04 02:21:55.51 .net
それがないんだよね。標準エラー出力を標準出力に
変えてしまうのは有るけど、それじゃ別々にやるのは不可能だし
559:名無しさん@お腹いっぱい。
18/03/04 16:46:18.09 .net
条件が厳しいからどうしてもシェルスクリプトでやりたいなら
先ずシェルを作るところから始めないといけない
560:名無しさん@お腹いっぱい。
18/03/05 00:43:32.66 .net
bashやzshなら簡単に出来るぞ
561:名無しさん@お腹いっぱい。
18/03/05 01:06:07.74 .net
出力を切り離してパイプで別々のコマンドでフィルタする程度じゃ全然駄目だから
こういうのを簡単にできると言い切る人はきっとものすごく優秀な頭脳の持ち主だと思う
562:名無しさん@お腹いっぱい。
18/03/05 01:28:58.62 .net
これは書いていなかった俺が悪いんだが、
bashやzshを使わずにposixの範囲でやりたいんだよね。
少なくともdashやashで動くものがほしい
でその方法が実際にあることは知ってるんだけど、
もっとシンプルな方法はないのだろうかと言うのと
俺がその方法をここに書いちゃうと
身バレしちゃうので書かなかった
563:名無しさん@お腹いっぱい。
18/03/05 12:24:32.78 .net
>>551
> 出力を切り離してパイプで別々のコマンドでフィルタする
だけやぞ
564:名無しさん@お腹いっぱい。
18/03/05 18:09:38.99 .net
POSIXに準拠したい気持は分かるけど,一次ファイルを作らないっていう謎の拘りが理解できない。
両立させるのは厳しいと思う。もうさ,
tempf="$(printf '%s%s%s%s' '/tmp/' "$(date +"%y%m%d%H%M%S")" '.' "$$")"; somecmd 2> "${tempf}" | \
printf '\e[1;32m%s\e[0m\n\e[1;31m%s\e[0m\n' "$(cat)" "$(cat "${tempf}")"; rm -rf "${tempf}"
でいいでしょ。もちろんPOSIX準拠。
あと偉そうなこと言うが,「身バレが怖いから持ってる (有益かもしれない) 情報を明かしません」って,
こっちからするとかなり不快だから,黙って何も知らないふりをしておいたほうがまだマシだよ。
565:名無しさん@お腹いっぱい。
18/03/05 18:12:03.21 .net
落ち着け
最初の質問の時点で性格の幼稚さは見え透いてるだろ
566:名無しさん@お腹いっぱい。
18/03/05 19:58:23.46 .net
>>550
やり方教えて
567:名無しさん@お腹いっぱい。
18/03/05 21:20:34.93 .net
>>554
> 一次ファイルを作らないっていう謎の拘りが理解できない。
書いてなかったのが悪いんだろうけど、一時ファイルを使うと
ストリーミングで処理できなくなるんだよ
つまり前のプログラムの出力が完了しないと次のプログラムが動かない
POSIX準拠はbusyboxで動かす必要があるからこれも必須
この二点は今回の質問には直接関係ないから理由じゃなくて制約として書いた
568:名無しさん@お腹いっぱい。
18/03/05 21:25:58.36 .net
そしてこっちの方で回答きたよ
くだらねえ質問はここに書き込め!Part 230
スレリンク(linux板:315番)
同じ文章なのになんでこう反応が違うんだろうね
同じ文章なんだからレスする側の問題があるだろうね
質問する側と回答する側、立場は対等だって言ったら怒りそう
569:名無しさん@お腹いっぱい。
18/03/05 21:38:48.22 .net
>>554
あとmktemp使ったほうが良いよ。
なんでぜったいにかぶらない方法があるのに
自分でなるべくかぶらないように努力するんだろう
結構多いよね。mktemp使ったほうがコード短くなるのに
570:名無しさん@お腹いっぱい。
18/03/05 21:48:54.27 .net
自分自身は何もしてないのになぜこうも態度をでかくできるのか
571:名無しさん@お腹いっぱい。
18/03/05 21:57:02.07 .net
別にでかくないでしょw ほかの人と一緒。
質問したからといってへりくだる必要はないと思ってるだけ
無知でもないしね
572:名無しさん@お腹いっぱい。
18/03/05 22:10:47.74 .net
マルチカスか
教えたがりを徹底的にこき使っとけ
ここには二度とくるなよ
573:名無しさん@お腹いっぱい。
18/03/05 22:45:20.19 .net
少なくとも聞く側の態度じゃぁないな
574:名無しさん@お腹いっぱい。
18/03/05 22:54:52.33 .net
聞く側はこういう態度を取らないといけないって
体育会系とか年功序列とか年上は敬え的な考え方だよ
今時はやらない
575:名無しさん@お腹いっぱい。
18/03/05 23:15:38.51 .net
545から漂う頭の悪さよ
576:名無しさん@お腹いっぱい。
18/03/05 23:21:32.35 .net
>>558 のそれ「解答」じゃないじゃん。
無理って言われてるんだぞ? 理解できてる?
577:名無しさん@お腹いっぱい。
18/03/05 23:23:14.97 .net
もういいじゃん
ほっとけよ
578:名無しさん@お腹いっぱい。
18/03/05 23:23:16.19 .net
どういう態度取るべきとは思わないけど、
相手を不快にさせたら得られるはずの回答も得られなくなる可能性が上がるよ。
それでよければご自由に。
579:名無しさん@お腹いっぱい。
18/03/05 23:26:33.25 .net
出力が色制御してきたら取り除いたりとか、マルチプロセスとかで変なところでブッタ斬り/ミックスされないように同期取ったりとか考えてたけど俺には無理だからもういいや
580:名無しさん@お腹いっぱい。
18/03/05 23:33:38.33 .net
>>566
やりたいこと
> 標準出力の内容を緑に、標準エラー出力の内容を
> 赤にしたいんだけどどうすればいい?
標準出力の内容を緑にする・・・簡単
標準エラー出力の内容を赤にする・・・?
>>558で明らかになったこと ・・・ 標準出力と標準エラー出力を入れ替える方法
ここから標準エラー出力の内容を赤にするには
標準出力と標準エラー出力を入れ替えれて
処理すればいいって気づくよね?
581:名無しさん@お腹いっぱい。
18/03/05 23:47:07.49 .net
>>570
ん?
それだと今度は標準出力が (標準エラー出力に複製されたので) パイプを通らなくなるから、
標準出力の内容 (今は標準エラー出力に出力されている) を緑にできないんじゃ?
582:もしかして同時じゃなくていいってこと?
583:名無しさん@お腹いっぱい。
18/03/06 00:20:35.13 .net
もうほっとけ
標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ
584:名無しさん@お腹いっぱい。
18/03/06 01:01:07.43 .net
>>571
片方ずつしか処理できないなら、
2回やれば両方できるだろ?
っていうかそれぐらいわかるだろw
585:名無しさん@お腹いっぱい。
18/03/06 01:01:45.64 .net
>>572
> 標準出力、標準エラー出力に関する便利な小ネタでも教えてやろうかと思ったけどやめとくわ
おせーておせーて
586:名無しさん@お腹いっぱい。
18/03/06 01:03:40.69 .net
|& ←このパイプは標準出力標準エラー出力ともに通すよ。
ただ質問者さんが望んでいるのは「標準出力か標準出力かが区別できる状態でのパイプ通過」だろうから、
それはちょっと無理なんじゃないかな。
あと態度がデカすぎる。一度死んだほうがいいと思う。
587:名無しさん@お腹いっぱい。
18/03/06 01:14:26.43 .net
>>573 まさかコマンド二回回すの? 標準出力と標準エラー出力分ける為だけに?
それ一時ファイル作るより余程冗長だぞw
もう一度シェルっていうかコンピュータの仕組みを勉強しなおしてきな
588:名無しさん@お腹いっぱい。
18/03/06 01:45:01.59 .net
だから一時ファイルを作るとストリーミングに
できなくなるからだめなんだって
さっきも書いたろ
589:名無しさん@お腹いっぱい。
18/03/06 01:47:17.52 .net
>>575
やっぱり>>558が今のところ一番シンプルな解みたいだね。
てか、標準出力と標準エラー出力を別々にファイルに吐き出せるんだから、
別々のプログラムにパイプでつなげられる機能があっても良いと思うんだけどね
590:名無しさん@お腹いっぱい。
18/03/06 02:48:45.93 .net
君たぶんだけど意思疎通に係わる障害持ってるから病院で診てもらったほうがいいよ。
知り合いにそういう調子の会話する人がいて、ある日会社で大きな事件を起こして辞めさせられたあと
病院で検査したらそういう系統の精神病だったからさ。
煽りとかじゃなくて、君はどうも社会で孤立してそうだから、助けになりたい。
591:名無しさん@お腹いっぱい。
18/03/06 03:23:52.46 .net
いや、おちょくってるだけだろ
まともに相手するだけ無駄やぞ
592:名無しさん@お腹いっぱい。
18/03/06 04:17:47.54 .net
ここに限らず、質問系のスレにたまに沸くアレでしょ
5chが過疎って最近あんま見てなかったから
なんか懐かしい感じするわw
593:名無しさん@お腹いっぱい。
18/03/06 10:26:50.47 .net
レス内容が煽りだけになったらおしまいw
594:名無しさん@お腹いっぱい。
18/03/06 20:25:23.40 .net
あっちで粘着してるみたいだな
久々にアレな奴を見たわ
595:名無しさん@お腹いっぱい。
18/03/06 21:23:37.44 .net
入力リダイレクトで複数ファイルを一度で流し込むのはどうしたら良いのですか?
596:名無しさん@お腹いっぱい。
18/03/06 21:44:48.81 .net
catしてパイプ
597:watarie
18/03/06 22:03:33.11 .net
よろしくお願いします。
mac で bashです。 mdfindからパイプつないだ先でcpしたら
検索が間に合わなかったのかコピーし損ねがでてきます。
再度コピーしそこねたファイル名リストを同じようにこれに掛けると、
幾つか成功していくつかはコピーし損ねます。
function readMdfind() {
while read LINE;
do
mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | xargs -J % cp -p "%" "$1" 2>/dev/null
done <${2}
引数の1はファイル名のリストが入ったテキストで、2はコピー先のフォルダになります。
ファイル名は殆どが一意にしてあるので、とりあえずヒットしたら良い感じです。
一度で取りこぼしのない良い方法はありませんでしょうか。
598:watarie
18/03/06 22:05:40.25 .net
引数の件1と2逆でした 惑わせてしまい申し訳ありません。
正しくは1がコピー先フォルダで2
599:がファイル名のリストです。
600:名無しさん@お腹いっぱい。
18/03/06 22:33:41.80 .net
>>585
回答ありがとうございます。
ということはそのまま
cat hoge huga | command
で、いいってことですか。なるほど。
レスつくまで色々ググって調べてみたのですが
command <( cat hoge huga )
でも全く同じ動作ですか?
601:名無しさん@お腹いっぱい。
18/03/06 23:27:44.61 .net
>>588
二番目の方法,たぶんコマンドラインで試して成功したから書き込んでるんだろうけど,
それはプロセス置換と言って Bash筆頭に幾つかのシェルの独自拡張だからシェルスクリプトにするときは
シェバンを #! /usr/bin/env bash か #! /bin/bash とかにする必要がある。
cat hoge huga | somecommand で代替できることに可搬性を犠牲にするのは避けたいだろうから
(つまり #! /bin/sh というシェバンを捨てるのは勿体無いということ)
<(cat hoge huga) は避けれる時は (特にシェルスクリプトで使う時) 避けといたほうがいいんじゃないかな。
602:586
18/03/06 23:29:38.39 .net
5行目あたりの日本語がおかしい。けど国語力ないので自然に直すの無理。
察してくれ。
603:名無しさん@お腹いっぱい。
18/03/06 23:43:28.43 .net
>>589
なるほど!
#!/bin/sh が必ずbashにリンクされてるとは限らないから、
拡張表現で書かなくて済む場合は確かに可搬性を優先した方がいいですね。
ありがとうございました。
604:名無しさん@お腹いっぱい。
18/03/06 23:49:32.51 .net
>>586
mdfindを知らんので問題解決に直接ならないけれど`done < ${2}`ではなく`done < "$2"`のほうがいいよ〜
もっと言うなら`cat "$2" | while read LINE;`のほうがいいかもね〜
* POSIX sh互換シェルは変数名に数字が来たらそこで読み取りを中断するので波括弧で変数名の範囲を明示しなくていい
* 変数$LINEに^Dとかが渡された時catコマンドと<リダイレクトで違いがある
短いんだけど参考: URLリンク(pubs.opengroup.org)
605:588
18/03/06 23:58:01.42 .net
あー!
さらに調べたら、よくわかりました。
#!/bin/sh でbashを起動したらbashの拡張とか使えなくなっちゃうんですね。
だからシェバンを書き換える必要があると…
そういう意味だったんですね。
(ちゃんとmanにかいてありました)
ためになりました。
606:名無しさん@お腹いっぱい。
18/03/07 07:20:57.39 .net
>>592
ん?どゆこと?
$ cat file | cmd
$ cmd < file
で違いがあるってこと?そうは思えないんだけど…
607:名無しさん@お腹いっぱい。
18/03/07 08:34:45.43 .net
$LINEに^Dってなんぞやってところだな
608:名無しさん@お腹いっぱい。
18/03/07 08:37:52.19 .net
>>586
まずはエラーをnullに落とさずに表示させろ
609:watarie
18/03/07 09:23:48.67 .net
>>592さん
610:watarie
18/03/07 09:32:33.42 .net
>>592さん
ありがとうございます。ちょっと英語で読解が難しいので時間を作って該当の箇所を読ませていただこうかと思います。
{2}の箇所を"2"に変更しました。
<の箇所をcatに変更しました。
非常に目に優しいくなりました。
読み込む箇所なので、怪しいと感じます。結果としては変わりませんでしたが、参照の箇所は興味がありますので読ませていただこうと思っています。英語で弱気になりますが^^;
ありがとうございます。
611:watarie
18/03/07 09:37:28.43 .net
>>596さん
すみません。確かにそうですよね。
初心者過ぎで逃げを当然にしてたバチがあたったようです。
吐き出したエラーは、
cp: /Volumes/Macintosh: No such file or directory
cp: HD: No such file or directory
などのファイルパスが、スペース区切りになってcp出来ませんでしたよというエラーでした。
ただ、検索に漏れた該当のファイルは何度めかにはヒットしますので上記のエラーとはならなかったということに。
spotlight特有のものだからと諦める�
612:オかないのか・・・ これがひょっとしたら手がかりになるかもしれませんが、わたしの力では全く・・・
613:watarie
18/03/07 09:45:34.86 .net
すみません、mdfindの検索結果のファイルパスが
スペースで割れてしまってcpに渡されたということでした。たぶん^^;
614:watarie
18/03/07 12:55:37.74 .net
解けました!ありがとうございます!
ダブルコーテーションを%の箇所で囲うのではなく、
1行取り出した先でパイプして囲えば良いと思い以下を試したところ出来ました。
mdfind "kMDItemFSName == "${LINE}" || kMDItemDisplayName == "${LINE%.*}"" | awk 'NR==1' | sed -e 's/^\(.*\)$/\"\1\"/' | xargs -J % cp -p % "$1" 2>/Users/mac10/Desktop/out
エラー出力素晴らしいです!
ありがとうございました!
615:名無しさん@お腹いっぱい。
18/03/07 18:25:56.09 .net
ずっとageっぱなし…(小声)
616:名無しさん@お腹いっぱい。
18/03/07 19:48:17.38 .net
mdfindとxargsに-0つけるのが定石だと思うけど、もう見てないかな。
617:名無しさん@お腹いっぱい。
18/03/08 00:41:50.66 .net
>>578
今更だけど、あるんだよね。誰も教えたくなかったんだね。
618:名無しさん@お腹いっぱい。
18/03/08 01:55:58.38 .net
まああるよね
619:名無しさん@お腹いっぱい。
18/03/08 07:30:07.37 .net
ヒントくらい出すか……。でもあいつに教えたくないんだよなぁ。
卑屈だけど、気持は分かるだろ?
パイプに名前(ry
620:名無しさん@お腹いっぱい。
18/03/08 16:44:02.99 .net
それ使うと出力側はこんな感じかな
while :;do sed -e 's/\(.*\)/^[[32m\1^[[m/' np1 & sed -e 's/\(.*\)/^[[33m\1^[[m/' np2 >&2; done
621:名無しさん@お腹いっぱい。
18/03/08 20:31:17.47 .net
>>607
野暮な指摘だが、sedを使わない
printf '\e[32m%s\[0m' "$(cat)"
の方が分かりやすくね? つーか printf ってそういう「整形した出力」の為のコマンドだろうし。
622:604
18/03/08 20:32:49.31 .net
>>695
ミスった… printf '\e[32m%s\e[0m' "$(cat)" だ。
こうすると "$(cat)" の部分で np1 を受けt[以下略]
623:名無しさん@お腹いっぱい。
18/03/08 20:51:46.21 .net
>>606
名前付きパイプ(mkfifo)はプロセスが2個あって
片方が出力側プロセス、片方側が入力側プロセスに
別れない限りストリーミングにすることができない
(同一プロセスでは出力しながら入力ができないため)
今回の場合、標準出力と標準エラー出力の2つがあるから
出力側プロセス1個と入力側プロセス2個の合計3プロセスが必要になる
つまり別プロセスとして起動しなければいけない
もちろん出力の完了待ちのwaitも必要だし、作成したパイプの削除も必要。
特にCTRL+Cで中断された場合とか
また万全を期してパイプ名が被ることも考慮してランダムな名前にしたい
ここまで言えば名前付きパイプを使った方法は実装するのに行数がかかり
面倒な方法だと言うことがわかるだろう?
また>>557で書いたとおりbusyboxで動かす必要があるのだが、
そもそもbusyboxでmkfifoが存在しない場合もある
↑俺にとってはこっちのほうが重要