くだらねえ質問はここに書き込め! Part 238

■ このスレッドは過去ログ倉庫に格納されています
2019/10/04(金) 07:31:02.74ID:Rnyv5utD
まずは2ch-Linux-Beginnersを読みましょう。
いろいろとまとめられているので(・∀・)イイ!!
http://www12.atwiki.jp/linux2ch/

読んでも解決しなかったら、質問を書きこむ前にここを読もう。
http://www12.atwiki.jp/linux2ch/?About
質問に対して答えてもらったら、お礼よりも、結果報告。

過去ログ検索
Google検索
https://www.google.com/search?hl=ja&;as_q=検索語句&as_sitesearch=2ch.net%2Ftest%2Fread.cgi%2Flinux%2Fhttps://www.google.com/search?hl=ja&;as_q=検索語句&as_sitesearch=5ch.net%2Ftest%2Fread.cgi%2Flinux%2F

※前スレ
くだらねえ質問はここに書き込め! Part 237
http://mao.5ch.net/test/read.cgi/linux/1563027196/
2019/10/23(水) 22:05:53.46ID:D+xF5NYb
>>132 >>133
マウスポチポチで辿って設定できる
2019/10/24(木) 00:53:15.63ID:aFdU4VfN
sortで行指定ってできる?
2行目から5行目や3行目以降みたいに
2019/10/24(木) 01:19:21.54ID:0wdw9sqJ
>>137
sortにはそんな機能ないだろ。
ないなら自分でそんなことをするsortコマンドを作る。
あと、組み合わせで実現するとか
2行目から5行目や3行目以降を表示するのをsedあたりで作って...以下略
2019/10/24(木) 01:24:59.86ID:htrbp4UL
>>137
>>137
> 2行目から5行目
cat filename | head -n 5 | tail -n $((5 - 2 + 1)) | sort

> 3行目以降
cat filename | tail -n +3 | sort
2019/10/24(木) 02:18:20.25ID:4THVBbld
vim -c "2,5sort | wq" input.txt
だとvimの中の行指定可能なsortコマンド実行して終了する
141login:Penguin
垢版 |
2019/10/24(木) 02:52:38.48ID:hZV5Y9jm
3DデスクトップってLinuxならどの銘柄でも出来ますか?
それとも特定の銘柄だけですか?
こう言う動作↓
https://youtu.be/558_Ns8aByY?t=7m48s
2019/10/24(木) 07:33:54.72ID:htrbp4UL
目覚めて気付いたけど、>>139だとsort対象の行しか出力されない。
他の(sortされていない)行も全部出力するなら…

# テストデータ
seq 9 | sort -r > filename

# 2行目から5行目だけsort
START=2
END=5
cat filename | head -n $(($START - 1))
cat filename | head -n $END | tail -n $(($END - $START + 1)) | sort
cat filename | tail -n +$(($END + 1))

# 3行目以降だけsort
START=3
cat filename | head -n +$(($START - 1))
cat filename | tail -n +$START | sort

…かな
2019/10/24(木) 07:36:26.07ID:htrbp4UL
×> cat filename | head -n +$(($START - 1))
 > cat filename | tail -n +$START | sort

○> cat filename | head -n $(($START - 1))
 > cat filename | tail -n +$START | sort
2019/10/24(木) 08:41:38.78ID:aFdU4VfN
>>138
sedって万能なんすね
sed -n "2,5p" foo.txt | sort
sed -n "3,\$p" foo.txt | sort
2019/10/24(木) 10:33:43.46ID:y4UJfKg2
Ruby なら、

# 末尾の改行を削除して、配列に読み込む
ary = File.readlines( "a.txt", chomp: true )

# 2 〜 5行目や、3行目以降をソートする
# 配列のインデックスは、0 から始まるので、1つずれる。-1 は最後の要素

puts ary[ 1..4 ].sort
puts ary[ 2..-1 ].sort
146login:Penguin
垢版 |
2019/10/24(木) 13:00:09.46ID:vBl3XMCx
質問です。

gnome-disksをraspbianで使っています。
rootユーザーなら、操作の前にパスワードを聞かれることはありません。
一般ユーザーでも同じようにしたいと思って、sudo gnome-disks をしたのですが、

(gnome-disks:1409): Gtk-WARNING **: 12:46:49.597: cannot open display:

というエラーとなりました。
なお、gksuという方法は廃止されてしまったようです。

一般ユーザーでもroot権限で特定のGUIアプリを動かす方法は何が最適でしょうか。
2019/10/24(木) 14:00:56.77ID:vBl3XMCx
>>146
自己解決しました。
xhost + を予め実行しておく必要がありました。
2019/10/24(木) 19:33:57.32ID:SIvO56h2
超初歩的な質問で申し訳ないのですが、wslを使ってubuntuでstartxfce4とコマンドした後にwarningがたくさん出てくるのですがこういうものなのでしょうか?

また xfce4が起動してbashの方でコマンドを打とうと思っても「$」が表示されておらず、コマンドが打てないのですが、どうしたら打てる状態にできるのでしょうか?
2019/10/24(木) 20:12:34.63ID:JIRaBw0H
&
そもそも新しい端末開けばいいだけの話では?
2019/10/25(金) 00:13:18.30ID:RwV+js8P
そもそも、WSL は、xfce みたいなGUI を使えるの?
漏れは、CUI だけで、Ubuntu 16.04 を使っているけど

ファイラーも、ranger というCUI を使っている
2019/10/25(金) 02:53:56.79ID:PQuzrFkx
>>150
使えるしオーディオ再生とかもできる
てか散々既出
2019/10/25(金) 05:05:19.72ID:RwV+js8P
Windows10, WSL, Ubuntu 16.04 で、
Ruby で、すべてのパッケージの更新を書いているけど、

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

と、Rubyから、apt コマンドを呼び出すのは良くないみたいなので、
aptを、apt-get に変えて作っていますが、

アップグレードできるパッケージを、一覧表示する、
apt list --upgradable
と同じ機能の、apt-get は有りませんか?

#!/usr/bin/ruby

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

# アップグレードできるパッケージを、一覧表示する
puts `apt list --upgradable`

puts `sudo apt-get upgrade -y`
153login:Penguin
垢版 |
2019/10/25(金) 09:30:26.11ID:wjgZzngK
現在、cd, ls とか1日でしょっちゅう使うコマンドは.bashrcでヒストリー除外設定してます。
それとは別に、備忘録として次回のログイン時にはヒストリー履歴に必要ないmanとかwho等の単発コマンドや、自作バッチ等をsed用のパターンファイルに収めてあります。
そのファイルを使ってsedで.bash_historyにかけて該当するコマンドを削除して、実行結果自体は正しいと確認できています。

で質問です。
この作業をログアウト時にしたいのですが、.bash_logoutや.logoutに記述しても、ヒストリーのキャッシュから.bash_historyに書き込まれるタイミングが後に来るようで、パターンファイルのコマンドがもどってきます。直前にhistory -wをしてもだめです。
最後のシステムがヒストリーのキャッシュを.bash_historyに吐き出した後に、sed実行できればいいのですが、どのファイルに記述すればいいのでしょうか?
2019/10/25(金) 09:54:17.89ID:ZYt79x2d
しらんけど、.bash_logoutとかで、端末切り離しても終了せずにバックグラウンドで動くスクリプト実行して
1秒後とかにヒストリ消すようにしたら動くんじゃね?しらんけど
2019/10/25(金) 10:19:45.97ID:7I9s5J33
Lubuntu 18.10 烏賊

他のLubuntuには、「ディスク」があるのですが、なぜか自分の烏賊には、hddをフォーマットしたり、領域を操作するためのアプリが見つかりません。

ダウンロードする方法を教えて下さい。
2019/10/25(金) 10:44:34.87ID:DsOIalUM
>>153
systemdのサービスファイル書いてExecStopで実行するとか?しらんけど
157login:Penguin
垢版 |
2019/10/25(金) 11:55:37.42ID:h3N5NDxK
>>153
ログインのときに、やればいいんじゃないの?
158login:Penguin
垢版 |
2019/10/25(金) 11:58:56.84ID:h3N5NDxK
>>141
ウインドウマネージャがパッケージにあれば、動くと思います
なければ、ソースからビルドすれば動くと思います
159login:Penguin
垢版 |
2019/10/25(金) 12:00:11.63ID:fdkloRFW
縦の列を出力するコマンドの結果をパイプを通して横にしたいのですが躓いてます。

例: ls -l hoge | grep -E 'jpg|bmp' | awk{print $9}' | sed 's/\n/ /'

これだと縦のリストままです。 改行をスペースにすればいいと思ったのですが、
標準出力ではだめなのですか?
2019/10/25(金) 12:00:59.99ID:RwV+js8P
systemd のログアウトとか、

逆に、ログアウト時に処理せず、ログイン時に処理するとか
2019/10/25(金) 12:03:05.91ID:RwV+js8P
確か、縦横変換は、xargs じゃなかった?
2019/10/25(金) 13:04:28.71ID:M6r4WUQ0
>>153
もしかしてと思って
exec dash
ってやってみたら書き込まれた。
ということは exec を使えばできる可能性が…
でも bash の man に明確にそう書かれてはいない気がする。
2019/10/25(金) 13:10:01.95ID:pMh/yvQj
$ seq 3 | xargs
1 2 3
xarrgsだけで使うとか盲点だった
2019/10/25(金) 13:42:09.89ID:NnBWMM0A
別にその程度なら、これでいいが
echo $(seq 3)
165login:Penguin
垢版 |
2019/10/25(金) 13:42:44.24ID:ew4plpxi
>>161
>>163

159です。おかげで解決しました
ありがとうございました
166login:Penguin
垢版 |
2019/10/25(金) 13:49:46.27ID:ew4plpxi
>>164
159です。 短いコマンド列ならパイプいらないんですね
ありがとう (≧∀≦)ノ♪
2019/10/25(金) 15:01:20.34ID:b/c/D3hz
>>153
history -wの後sedを呼んで、さらにhistory -cとhistory -rを呼ぶとかは?
2019/10/25(金) 20:22:42.08ID:PcQV5FAs
sudo cpで何もオプションをつけずに実行して、
Aさんのファイル hoge.txt を、Bさんのファイル hoge.txt で、上書きコピーした時、
hoge.txt の所有者とかパーミッションは、Aさんの時のままみたいなんだけど、
これってどこかに仕様ある?
169login:Penguin
垢版 |
2019/10/25(金) 21:41:54.75ID:6kDTaNGH
>>168
info cpの-pオプションのところに書いてある。
https://linuxjm.osdn.jp/info/GNU_coreutils/coreutils-ja_78.html
>このオプションを使わない場合、コピー先ファイルがすでに存在している場合は、 その許可属性は変更されない。
2019/10/25(金) 21:46:02.55ID:EL0TBdFz
>>169
ありがとう。これで安心できるw
171login:Penguin
垢版 |
2019/10/25(金) 21:51:40.62ID:mq4pzYPG
余計なことしないでデフォルトの挙動に慣れといた方がいいんじゃね
172168 = 170
垢版 |
2019/10/25(金) 22:06:11.75ID:EL0TBdFz
俺のこと? なんか勘違いしてると思うけど、
例えば、 /etc以下のとあるファイルを相手に渡して
書き換えておいたから、これ cp して上書きしておいてって言って
相手が何も考えずに、sudo cp しちゃっても大丈夫だよねって話だよ
173login:Penguin
垢版 |
2019/10/25(金) 23:15:42.66ID:ew4plpxi
ID変わっちゃいましたが>>153です。

結局、>>157さん>>160さんのご指摘とおりログイン時に.bashrc内でsedを実行する事にしました。 結果も望んだ状態でした。

>>167
.bash_logout内で実行しましたが、なぜか再ログイン時には削除したはずのコマンドが蘇ってました。

>>154
>>156
>>162
権限の都合上、あまりシステムよりの終了タイミングで処理を噛ませらないので、今回は試せませんでした。

色々アドバイスしていただき、ありがとうございました
2019/10/26(土) 11:29:58.88ID:aEAPGpq3
Linuxとは直接関係ないかもしれませんが質問です。
何の関係もないLinuxサーバ用PCとWindowsデスクトップ用PCがあります。
HDD2台をサーバ用PCでRAID1にして構築した後
何かの拍子にそのHDD1個をデスクトップ用PCに入れるとすると
ドライブはちゃんと認識されるのでしょうか。
ファイルシステムはext4で、デスクトップ用PCにはext4読み込みのためのソフトを入れることとします。
2019/10/26(土) 11:46:24.23ID:oNLsi5fR
何でRAID組んだのかで違うでしょ
2019/10/26(土) 11:49:41.67ID:ZfJ5IMnc
そこにHDDが2台あったから
177152
垢版 |
2019/10/26(土) 12:06:45.41ID:pXpNefp4
>>152
自己レス

>アップグレードできるパッケージを、一覧表示する、
>apt list --upgradable
>と同じ機能の、apt-get は有りませんか?

apt-get のオプションにあった

-u, --show-upgraded
更新パッケージ表示 - 更新される全パッケージを一覧表示します。設定項目: APT::Get::Show-Upgraded

-V, --verbose-versions
更新・インストールするパッケージのバージョンをすべて表示します。設定項目: APT::Get::Show-Versions
178174
垢版 |
2019/10/26(土) 13:35:21.28ID:aEAPGpq3
>>176
サーバPCのPOST画面から出せるRAIDユーティリティです
厳密にはソフトウェアRAIDだそうで、管理情報がHDD上に残るとか

もしかしてmdadmなら大丈夫なんでしょうか
2019/10/26(土) 13:51:18.58ID:F14et2Hg
ミラーならやってみりゃいいじゃん
2019/10/26(土) 19:30:00.71ID:mJoLKa9d
>>178
暗号化してなければ、RAID1ならハードウェアRAIDでもソフトウェアRAIDでも、他PCに接続すれば中身は見えるよ。
2019/10/26(土) 23:46:48.54ID:IiUQELA0
派生が大量にあるLinuxに対してBSDの派生が少ないのはなんでなんです?
2019/10/27(日) 00:06:29.57ID:/drCSR+3
ユーザーがいないからやろ
2019/10/27(日) 00:23:47.66ID:nwZsKjXo
Linuxは冷食弁当
BSDは手作り弁当
UNIXは二郎でいいか
2019/10/27(日) 01:40:42.32ID:8NH89CAZ
>>182
Linuxの場合は自分の好きなようにしたいからディストリを色々起こしたって感じだからな
2019/10/27(日) 05:25:58.94ID:ZjFaYx5E
食べ物で例えるなとあれほど…
2019/10/27(日) 06:37:41.89ID:QrTJsh8Q
>>181
ポリシーの違い
2019/10/27(日) 07:20:34.44ID:0K1aGab+
BSDの派生が少ないんじゃなく、Linuxの派生の多さが異常なんだよ
188login:Penguin
垢版 |
2019/10/27(日) 12:52:04.73ID:V2uhvpIm
すいません、
松田聖子のファイルが200以上あってファイル名が、
いちご畑でつかまえて.mp3
潮騒.mp3
電話でデート.mp3

なんで、行頭に三桁、あるいは四桁の連番を付けたいと思います。
001-いちご畑でつかまえて.mp3
002-潮騒.mp3
0213-電話でデート.mp3
調べたんですが、行頭に連番をつける方法が見つかりませんでした。
よろしくお願いします。
2019/10/27(日) 13:25:45.94ID:dgTsOTGe
>>188
rename 's/^/sprintf("%03d-", ++$::t)/e' *.mp3

renameコマンドはDebian系ならrenameパッケージに入ってるやつね
190login:Penguin
垢版 |
2019/10/27(日) 16:03:08.34ID:V2uhvpIm
>>189
遅くなりました。ありがとうございます。

200曲無事完了しました。手でやっていたらタイヘンだも〜〜〜

ありがとう。
2019/10/27(日) 18:17:28.51ID:1EgYvHMw
松田聖子が200以上か…
2019/10/27(日) 20:17:04.79ID:vrbz31o7
キャリア30年以上あれば余裕でその位はあるだろう
2019/10/27(日) 22:13:55.48ID:8NH89CAZ
>>191
俺は松田聖子は激しく上であんまり知らないが、5chには若い時から松田聖子が
好きってどおっさん世代は多いだろ。で、大ファンなら200以上持っていても不思議
ではない。
2019/10/28(月) 07:11:10.04ID:DrC7/o+o
松田聖子は、ユーミン(呉田軽穂)の名曲が多い

コード進行も、半音下がりのクリシェを多用したり、
米国で言えば、David Foster に匹敵する時代!

まあ、ユーミンは、女筒美京平と言われて、
林哲司は、日本のDavid Fosterと言われていたけど

日米英国も、MTV の影響か、80年代ポップスに名曲が多い
195login:Penguin
垢版 |
2019/10/28(月) 08:25:15.43ID:HMUb8kSq
エスケープをかましたsedの使い方で質問があります

$ echo -e "dog,\033[38;5;11m hoge\033[0m, cat"
dog, hoge, cat <=== hogeだけ黄色で表示

$ echo -e "dog, hoge, cat" | sed -e "s/hoge/foo/"
dog, foo, cat <=== 普通のsedの結果

この上記2つを組み合わせたいのですが
エスケープキャラが色コードに変換されず、hogeの前にfooが食い込でます
$ echo -e "dog, hoge, cat" | sed -e "s/hoge/\033[38;5;11mfoo\033[0m/"
dog, hoge33[38;5;11mfoohoge33[0m, cat <=== ぐちゃぐちゃ

この例でhogeから黄色のfooにsed変換するにはどうすればいいですか?
2019/10/28(月) 09:17:41.62ID:lNAOad9p
>>195
bashから実行するなら
echo -e 'dog, hoge, cat' | sed -e $'s/hoge/\033[38;5;11mfoo\033[0m/'
2019/10/28(月) 09:55:01.53ID:XUE5MeKL
役に立つかどうかわからないけど、参考にしてね。
$ echo "dog, hoge, cat" |
> sed -e 's/hoge/\\033[38\;5\;11mfoo \\033[0m/' |
> sed -e "s/^/'/" -e "s/$/'/" |
> xargs echo -e
2019/10/28(月) 10:16:17.82ID:gaVasQIf
色コードを素直にredやgreenで扱える便利道具ってないの?
2019/10/28(月) 11:50:49.14ID:5E0lMxSX
>>198
tput

ただし大抵の環境で入ってるはずだが、入ってない環境もある。
見やすいが冗長。外部コマンドなので遅い。
200login:Penguin
垢版 |
2019/10/28(月) 14:05:13.29ID:HMUb8kSq
>>196
「$」一文字ですごい。
この場合のクォーテーションで括られたパターンの外の$はどういう意味ですか?

>>197
一行づつ読んで、2度めのsedでパターンの前後に「'」を足してる事を理解しました。
これを参考にして、元の例のシングルクォーテーションをリテラルに変更して
  echo -e '''dog,\033[38;5;11m hoge\033[0m, cat'''
これで望んだ結果が出力されたました \(^o^)/
201login:Penguin
垢版 |
2019/10/28(月) 14:17:33.13ID:HMUb8kSq
>>197
>> 200 でまちがって中間のコマンド履歴をうってました m(_ _ )m
ただシングルクォーテーションが鍵なのがわかりました
202login:Penguin
垢版 |
2019/10/28(月) 14:31:46.32ID:jxo+K6ql
Linuxのほうは公式のディストリってものがないからだろうな
203197
垢版 |
2019/10/28(月) 21:30:39.09ID:k8dpn6a1
>>200
>「$」一文字ですごい。
> この場合のクォーテーションで括られたパターンの外の$はどういう意味ですか?

洒落てますよね。私も、それでよかったのかと感心しました。
$'...' は、bash のクォートの一種です。man bash の「クォート (QUOTING)」を見てください。
この部分は、英語マニュアルの方がわかりやすいと思います。
2019/10/29(火) 12:35:22.88ID:iAozzjoU
>>196
>echo -e 'dog, hoge, cat' | sed -e $'s/hoge/\033[38;5;11mfoo\033[0m/'

\033 を、\e に代えても動く

echo -e 'dog, hoge, cat' | sed -e $'s/hoge/\e[38;5;11mfoo\e[0m/'
2019/10/29(火) 13:21:09.12ID:VPiAGyFh
echo -e 'dog, hoge, cat' | sed -e 's/hoge/^[[38;5;11mfoo^[[0m/'

ただし ^[ は ctrl+v の後に escキーで入力
2019/10/29(火) 18:17:48.56ID:HNRQ6y5r
sway使いはおらんのけ?
2019/10/29(火) 22:29:29.28ID:pFWErwX/
ターミナルで折り返し改行されたときに上矢印押したら上の行に行けるようにできたりしませんかね。下矢印で下。ずーっと横長の移動しなくちゃいけないから辛いです。
それでもって一番上の行で上を押せば前の履歴に行くような普通の操作を実現したいです。

今使ってる環境はgnomeターミナル+tmux +zsh
2019/10/30(水) 23:58:54.89ID:ukMyq2L7
xargsでaliasを使う方法ってないんだな
自作コマンドを使う方法はあるのに
209login:Penguin
垢版 |
2019/10/31(木) 00:50:56.71ID:reP6OUR1
bashの配列で質問です。
空白で区切られた3つの要素を配列に代入
declare -a array=( "A B C" "C D E" "F G H" );
for ((i = 0; i < ${#array[@]}; i++)) { echo "array[$i] = ${array[i]}" }

結果は予想通り
array[0] = A B C
array[1] = D E F
array[2] = G H I

今度は改行で区切られた3つの要素の内容を、awkで逆順した結果に「"」とつけて配列に代入。
declare -a array=( $(echo -e "A B C\nD E F\nG H I" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}') );
for ((i = 0; i < ${#array[@]}; i++)) { echo "array[$i] = ${array[i]}" }

しかし、実際はクォーテーションの機能も無視され、空白でバラバラに区切られ配列に代入されてします。
array[0] = "C
array[1] = B
array[2] = A"
… 略 …
array[7] = H
array[8] = G"

配列に代入しなければ期待通りの結果が出力されます。この結果を望んでいます。
echo -e "A B C\nD E F\nG H I" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}'
"C B A"
"F E D"
"I H G"

どうすれば配列の要素に上記の結果を代入することができますか?
2019/10/31(木) 00:56:01.59ID:hpOp+iT/
>>209
配列なんか使うな。それはbashの拡張だ。
POSIXシェルには配列などというものはない。

外部コマンドの呼び出しなんだからそれはbashスクリプトの外の話だ
bash専用機能である配列は使えない
2019/10/31(木) 01:02:37.89ID:hpOp+iT/
そもそもシェルというものをわかっていない。
一般的な言語の関数は、引数で情報を与え、戻り値で情報をもらうものだが
シェルというのは情報の入出力を標準入出力で行うものだ。

そしてシェルでは標準入出力の一行が一データ、複数のデータは複数の行数で表すのが基本だ
引数はこういうやり方もあるよという別解だと考えたほうがいい

echo -e "A B C\nD E F\nG H I" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}'
↑つまりはこれが正しいということだ。

だからお前がやるべきことはそのbash依存した配列を
複数行のデータに変換することだ
2019/10/31(木) 01:07:04.68ID:hpOp+iT/
>>209
話の前に、echo -e はやめとけ。それはbash依存だ。
エスケープシーケンスを使うならprintfを使ったほうがいい

簡単になおせる
printf '%s\n' "A B C" "D E F" "G H I" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}'

そしてbashの配列の代わりに位置パラメータを使えばいい
set -- "A B C" "D E F" "G H I"
printf '%s\n' "$@" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}'
2019/10/31(木) 01:10:51.96ID:hpOp+iT/
どうしてもbashの配列を使いたいというのならこうだ。

declare -a array=( "A B C" "C D E" "F G H" )
printf '%s\n' "${array[@]}" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}'

考え方は位置パラメータ $@ を使うのと同じだ。
$@ の代わりに ${array[@]} になっただけだ。

言い換えると位置パラメータを複数使えるようになったのがbashの配列だ
2019/10/31(木) 01:11:21.35ID:CucVKUrX
>>209
readarray
2019/10/31(木) 01:14:52.04ID:niz424am
>>209
readarrayはパイプにするとサブシェルになってしまって動かないから例も置いとく
readarray -t array < <(echo -e "A B C\nD E F\nG H I" | awk '{printf "%s %s %s\n", $3, $2, $1}')
2019/10/31(木) 01:19:51.44ID:hpOp+iT/
readarrayもbashの拡張だ。そういうものは使わない
シェルスクリプトはパイプで処理をつなげていくものだ

declare -a array=( "A B C" "C D E" "F G H" )
printf '%s\n' "${array[@]}" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}' | while read -r line; do
 echo "$line" # $lineの加工処理とかなにか
done

こうすることで、出力とawkの加工と自前のreadの処理が並列で動く
readarrayなどを使ってしまったら、一旦bashの配列に入れてしまうから
並列で動かなくなる。つまり遅くなる。

| while read はパイプでサブシェルになってしまって動かないから例も置いとく

printf '%s\n' "${array[@]}" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}' | {
 i=0
 while read -r line; do
  i=$((i + 1))
  echo "$line" # $lineの加工処理とかなにか
 done
 echo "合計行数 $i"
}
2019/10/31(木) 01:20:57.62ID:hpOp+iT/
>>216のように書くよりも関数にしたほうが分かりやすいがな

func() {
 i=0
 while read -r line; do
  i=$((i + 1))
  echo "$line" # $lineの加工処理とかなにか
 done
 echo "合計行数 $i"
}

set -- "A B C" "D E F" "G H I"
printf '%s\n' "$@" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}' | func
2019/10/31(木) 01:29:26.44ID:8CGDUgWT
>>209
古いbashでreadarrayがなければ
eval 'array=('"$(echo -e "A B C
\nD E F\nG H I" | awk '{printf "\"%s %s %s\" ", $3, $2, $1}'
2019/10/31(木) 01:38:06.90ID:8ldiWh95
>>218のbash依存なし版はこっち。当たり前だけどちゃんと動くでw

eval 'set -- '"$(printf '%s\n' "A B C" "D E F" "G H I" | awk '{printf "\"%s %s %s\" ", $3, $2, $1}')"
printf '%s\n' "$@"
220login:Penguin
垢版 |
2019/10/31(木) 01:40:37.18ID:9QFNPqD9
Windowsの感覚が抜けず、シェル上でディレクトリ名やファイル名を大文字小文字を区別せず打ってしまいます
直したいとは思うのですが、差し当たり大文字小文字が間違えていても修正や補完をしてくれるように出来るとありがたいです
何かそういう設定やツール等があれば教えてください
2019/10/31(木) 01:43:22.34ID:8ldiWh95
あとLinuxならrev使ったほうが簡単だな

set -- "A B C" "D E F" "G H I"
printf '%s\n' "$@" | rev
2019/10/31(木) 01:53:30.01ID:8ldiWh95
>>219でもいいけど、正直evalを使うとエスケープやダブルクォートが
面倒になったりするからこっちのほうがいいかもな。(↓awkのダブルクォートを消した)

printf '%s\n' "A B C" "D E F" "G H I" | awk '{printf "%s %s %s\n", $3, $2, $1}' | {
set --
while read -r line; do
set -- "$@" "$line"
done
printf '%s\n' "$@"
}

bashで配列に入れたければ頑張れw
まあ、位置パラメータ(配列)に入れるよりも、その場で処理したほうが
シェルスクリプトらしくて速くなるんだが


おまけ、さらに短く
printf '%s\n' "A B C" "D E F" "G H I" | awk '{print $3, $2, $1}' | {

おまけ、さらに短く
printf '%s\n' "A B C" "D E F" "G H I" | rev | {
223login:Penguin
垢版 |
2019/10/31(木) 03:19:09.95ID:reP6OUR1
>>213
データを受けた後の一度ちがう処理が入って
その上そのあとプロセス分岐するので、
一度フォーマット整形後に配列に変換して
あとで個別にアクセスしたいと思っていました。
確かにこの方法だと配列に期待した形で代入されました。

>>214 >>215
readarrayは知りまでせんでした。勉強します。

>>218 >>219
これは勉強になります

>>222
> bashで配列に入れたければ頑張れw
がんばりますw
色々な表記方法でありがとうございます。
勉強になります。

みなさまありがとうございました (^人^)感謝♪
2019/10/31(木) 09:58:32.70ID:HOpY20qN
>>220
bashは.inputrcにset completion-ignore-case Onでできるらしい
あるいは.bashrcにbind 'set completion-ignore-case on'
.inputrcだとreadline全体に影響するから後者の方がいいかも
https://askubuntu.com/questions/87061/can-i-make-tab-auto-completion-case-insensitive-in-bash

zshはqiitaにやり方が描いてあった
https://qiita.com/watertight/items/2454f3e9e43ef647eb6b
2019/10/31(木) 10:13:09.17ID:w4pP63KT
>>220
shopt -s cdspell dirspell
cdspellはcdの引数の誤字脱字が1文字なら修正する
cd /Va
cd /Var
cd /vaa
cd /ar
こんなのね

dirspellはdirの誤字脱字が1文字ならタブ補完時に修正する
 ls -l /va/logs/
ここでタブを押すとls -l /var/log/になる

あくまで一文字だけだからあまり宛にはできないけどね
shoptにはcdなしで移動できるautocdもあるからいくつか設定しとくと便利
基本は小文字で打って後はタブ補完で勝手に入力させればいいよ
2019/10/31(木) 13:43:01.73ID:ljvnXlxv
すいません質問です
SparkyLinux 5.9 Xfce 64 bit に Software Boutique というパッケージマネージャを
インストールするため 
https://snapcraft.io/install/software-boutique/debian
を参考にインストールしてみた
( ターミナルで"software-boutique 0+git.9cc961a
from Martin Wimpress (flexiondotorg) installed"まで表示されました )
のですが
どうやったら Software Boutique を起動できるのでしょうか
メニューでそれらしきところを探してみたのですが見当たりません
よろしくお願いします
2019/10/31(木) 20:19:09.63ID:HYxFHwOd
別にbash依存でよくない?
posix互換厳守にしようとすると面倒
将来bashが無くなっちゃうことってないだろ、無くなったらその時はその時だし
2019/11/01(金) 03:02:42.50ID:FRerU7gf
ノートPCを起動するとGNU GrubのBASH画面で止まるようになりました
恐らくexitと入力すれば先へ進めるのですが、あいにくキーボードが半壊していて入力できません
USBのキーボードは読み込んでくれず、BIOSに行くことも何故かできなくなりました
一応「ryodfghkl;'zxcvbnm,.」は入力することができますが何か突破口はありますか?
2019/11/01(金) 03:26:49.91ID:xK4Ryk/p
USBメモリブートやUSBCDブートもやりましたがやはり最初から認識しないようで駄目でした
PS/2キーボードは本体も刺す所もないです
2019/11/01(金) 03:27:39.73ID:R2TKQ4dq
>>227
将来世の中からbashが消えて無くなることはないが、
bashが使われてない環境ってのは存在するよ。

bashを使わなければいけないという特別な理由があるならいいけど、
必要ないのに依存させる意味がない
2019/11/01(金) 03:53:46.79ID:+wZq5vgs
自分のプログラムが巡り巡ってbashのない環境で動かすことになる可能性があるかどうかってことだけだな
結論としては不要
必要になったらまたその時考えればいい
2019/11/01(金) 05:33:45.83ID:WI3r7Akd
POSIX原理主義者はシェルスクリプトスレが引き取ったはずだし迷子かな
2019/11/01(金) 13:09:00.41ID:BMKjWeTQ
POSIX原理主義者はどこにでもいる
234228
垢版 |
2019/11/01(金) 16:20:27.36ID:oYdI1LQt
無事BIOS起動して自己解決しました
2019/11/01(金) 16:27:48.46ID:qfES3rdP
>>235
良かったな。
2019/11/01(金) 19:24:40.57ID:CYJonS8S
メールのspfって

メールサーバA グローバルIP: aaa.aaa.aaa.aaa
からリレーされて
メールサーバB グローバルIP: bbb.bbb.bbb.bbb
から各ドメインに配送する場合、

spfにはbbb.bb.bbb.bbbだけ登録しても有効?
Recievedヘッダに入っていれば、最終の配送サーバのipアドレスだけ登録しても良いの?
■ このスレッドは過去ログ倉庫に格納されています