探検


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

■ このスレッドは過去ログ倉庫に格納されています
2018/11/16(金) 22:58:46.21ID:KePwDHh2
まずは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 233
http://mao.5ch.net/test/read.cgi/linux/1536848825/
303login:Penguin
垢版 |
2018/12/09(日) 14:31:12.11ID:oLpqFNSA
昔はttyの1番にだけ背景にペンギンの絵とか表示されてたと思うんだけど
これっていつから無くなったの?
KMS導入後?
304297
垢版 |
2018/12/09(日) 19:39:15.97ID:4X3RO9or
openssl req -new -key hoge.example.jp.key -out hoge.example.jp.csr < 改行が入っているテキスト
をファイルを使わずにシェルスクリプトにして変数にして読み込ませたいのですが、

STD_IN="JP\nTokyo\nChuo-ku\n(省略)"
openssl req -new -key hoge.example.jp.key -out hoge.example.jp.csr < ${STD_IN}

とやっても、ファイルが見つかりませんと出てしまいました。
変数の入れ方は1行に入れるのか、ヒアドキュメントみたいな形にもできるのか、

< には変数は使えないのでしょうか?
2018/12/09(日) 20:03:18.84ID:ECj7FB1h
>>304
少し上にも出てたけど
openssl ... <<< ${STD_IN}
2018/12/09(日) 20:41:30.18ID:4X3RO9or
>>305
ありがとうございます!
bash拡張でこんなのがあるのですね。
2018/12/10(月) 00:05:25.99ID:SK07uHh5
>>292
Rubyではそんなことしない。
お前Rubyの勉強したほうがいいぞw
308295
垢版 |
2018/12/10(月) 01:47:07.69ID:iaZVXIYt
>>301-302

そういうことだったんですね
grepにパターンを分割してわたす方法は-eオプションを複数用いるのが
唯一かと思っていましたが、改行区切りでもわたせるんですね

grep $'??n'$'??n'

このようにしても同じことのようですね
ただ

grep $'??n' $'??n'

このようにスペースを挟むとスペース以降はファイルを指定する
引数とみなされ空文字なのでエラーとなるようです

ヌル文字をシェルが除去するのも知りませんでした

これですっきりしました、ありがとうございました
309295
垢版 |
2018/12/10(月) 01:48:55.68ID:iaZVXIYt
文字間違えました
?? → \
310295
垢版 |
2018/12/10(月) 07:24:44.06ID:rDY5Jm5J
1つ誤解がありましたので訂正します
grep $'\n' $'\n'
とするとスペースの後ろの改行文字自体をファイルとして指定したと
解釈されてエラーになるようです
311login:Penguin
垢版 |
2018/12/13(木) 07:59:27.16ID:BpuyFdNl
age
2018/12/13(木) 08:47:58.94ID:YYFyHPut
$ echo "
> foo
> bar"

foo
bar
引用符一つ入れると改行できたのね・・・
ヒアストリングも<<<"でできるようだし
echo -eだのprintfだの`cat -`だの色々やってたわ
2018/12/13(木) 09:47:14.64ID:g4Xg+Gp3
[[ -z $hoge ]] や [[ -n $hoge ]]
って必要ですか?

[[ $hoge ]] とか [[ ! $hoge ]] で代用できそうなんですが…

何が違うんでしょ
2018/12/13(木) 10:41:51.23ID:9d5jxDGh
>>313
もし$hogeの値が「-e /dev/null」とかだったらどうするのよ。
2018/12/13(木) 11:07:49.54ID:2p8AEIUJ
>>314
何も問題ないですよね?
316313
垢版 |
2018/12/13(木) 11:09:28.18ID:g4Xg+Gp3
>>314
自分も試してみましたが、問題ないようです
317313
垢版 |
2018/12/13(木) 12:10:25.19ID:g4Xg+Gp3
さらにいろいろ試してみましたが
変数の内容がオプションと解釈されてしまって真偽値に影響がでるケースとして

hoge='-e unknown'
[ $hoge ] || echo null

とやってみるとhogeは空でも未定義でもないのに
nullと表示されてしまい、本来の意図とは違う結果になるようです

ただこれも解決方法があり
[ "$hoge" ] || echo null
とすれば意図したテストができるようです
もとより[[を使えば引用符もいらないみたいですね
[ ]の中で変数を二重引用符で囲むのは常識(?)のようなので
やはり-nや-zの必要性がない気がします

[[が無い時代(そんな時代があるのか知りませんが)の産物なんですかね
2018/12/13(木) 12:33:39.42ID:2p8AEIUJ
>>317
[[ は POSIX非標準。古い新しいではなくbashによって追加された拡張構文
POSIX標準のシェルは対応しない。POSIX標準のシェルには、debianの
デフォルトシェルであるdashやyashやposhがある
どのシェルでも動くようにするならば、[[ は使ってはいけない
319313
垢版 |
2018/12/13(木) 12:39:41.77ID:g4Xg+Gp3
>>318
そうなんですね
じゃあやはりPOSIXの範囲内では[の後に-nや-zを使った方が
変数の内容を意図せずオプションと解釈されてしまう場合でも
エラーになって気づくので安全と言えば安全なのかもしれませんね
うっかり変数を引用符で囲み忘れる場合もあるだろうし
2018/12/13(木) 12:47:43.62ID:2p8AEIUJ
> じゃあやはりPOSIXの範囲内では[の後に-nや-zを使った方が

俺は使わない。ダブルクォート忘れで困るのは、ここだけじゃない
コマンド呼び出しの、foo "$hoge" "$hage" "$tsuru" "$pika" とかも全部そう。
忘れるとか、そんなもんshellcheckを使えばすぐに解決するんだから気にすることじゃない
そもそもダブルクォートをつけ忘れは、-nや-zを使っても解決しない。
2018/12/13(木) 12:52:21.57ID:2p8AEIUJ
まあ-zは使うけどな。単に読みやすさのため。
否定というのは場合によっては分かりづらくなる

「空文字なら」 は -z(ゼロの長さなら)で読みやすい
「文字があるの否定」は分かりづらい

「文字がある」はわかりやすいが
-n は no? 文字がノーってことか?で分かりづらい
文字があるという状態を示すために、nを割り当てたやつはセンスがない
322313
垢版 |
2018/12/13(木) 13:11:04.56ID:g4Xg+Gp3
最近の言語を何かしらやってる人間にとっては変数の空文字列チェックを
変数そのものでやるというのも馴染みがあってわかりやすいので
できればそうしたいと思ったんですよね

最初の質問の趣旨に戻りますが、-zや-nを使わなくても同等のテストが
できるということで間違いないなら

[[ $hoge ]] [[ ! $hoge ]]

[ "$hoge" ] [ ! "$hoge" ]
の方が個人的には読みやすいかな

よくよく考えたら自分はbashしか使わないので便利な[[で事足りそう
2018/12/13(木) 13:17:06.99ID:9d5jxDGh
-zや-nは文字列長を判定するのに対して<string>は文字列そのものを判定するっていう違いがあるけど
引用符で囲った場合においてこれらに動作上の違いがあるのか俺には分からん。
少なくとも今のところない。
2018/12/13(木) 14:50:24.14ID:YYFyHPut
testが[としてbashに内蔵されてて驚く
両方ともなぜか外部コマンドもあって驚く
[[が機能多いのにただのbashの方言で驚く

$ type -a test [ [[
test はシェル組み込み関数です
test は /usr/bin/test です
[ はシェル組み込み関数です
[ は /usr/bin/[ です
[[ はシェルの予約語です
2018/12/13(木) 16:04:43.42ID:2p8AEIUJ
> testが[としてbashに内蔵されてて驚く

[ が内蔵されてないシェルなんて知らんのだが?
そんなもん現実に存在するのか?
2018/12/13(木) 16:21:22.10ID:9d5jxDGh
>>325
https://www.unix.com/man-page/v7/1/sh/
2018/12/13(木) 16:33:21.95ID:2p8AEIUJ
>>326
マニュアルが有るのはわかったが、
シェルはどこに存在してるんだ?
2018/12/13(木) 16:40:17.41ID:2p8AEIUJ
もはや神話の世界だな

testが組み込みでないシェルは、コメントも使えないシェルということか

https://ja.wikipedia.org/wiki/Bourne_Shell

> UNIX System III(1981年)
> test コマンドを組み込み。
> # でコメントを書き込めるようになった。

さらに関数数定義も出来ず、Unicodeも扱えないようだ
そんなもん現存してないだろう

> SVR3(1986年)
> 現在のような "$@" の用法
> getopts 組み込み
> パラメータ処理を改善し、関数の再帰呼び出しが可能となった。
> 8ビットクリーン
2018/12/13(木) 17:17:18.77ID:9d5jxDGh
「手元にない」ということと「存在を考えなくていい」とは別物だからね。
2018/12/13(木) 17:22:00.60ID:YYFyHPut
globも元は外部コマンドとかも調べなきゃ分からんわ
フィルタをグロブと呼ぶ変わった宗教って認識だったからな
2018/12/13(木) 17:24:32.47ID:2p8AEIUJ
>>329
だからどこに存在しているんですか?
2018/12/13(木) 18:43:38.57ID:5CGSaiem
>>331
我が家のSun OS 4の/bin/sh。
2018/12/13(木) 19:03:57.29ID:2p8AEIUJ
https://ja.wikipedia.org/wiki/SunOS
> SunOS 4.1.4 1994年11月

俺が生まれる前かよw
2018/12/13(木) 19:05:54.68ID:2p8AEIUJ
> SunOS 4.1.1インストール媒体(磁気テープ)

この画像に驚愕した
ビデオテープかよw
335login:Penguin
垢版 |
2018/12/13(木) 19:16:08.14ID:2U4H8MIt
いや磁気テープは現役ですし……
2018/12/13(木) 19:16:28.93ID:Zfs8AO7d
2018/12/13(木) 19:22:26.58ID:2p8AEIUJ
sunos 4.1 4 download でぐぐったら出てきた
x86用があったから解凍してみたら、
拡張子img(フロッピーディスク?)のファイルが36個でてきた
これ動くのか? 確認したくてもよくわからん

https://winworldpc.com/product/sunos/4x
338login:Penguin
垢版 |
2018/12/13(木) 20:01:43.60ID:Kpl2TedD
cshにもtcshにも組み込まれてないが
testも[も
2018/12/13(木) 20:06:06.97ID:2p8AEIUJ
$ csh
solaris% type test
test is a shell builtin
solaris% tcsh
> type test
test is a shell builtin
2018/12/13(木) 20:15:29.66ID:FwJygUTm
>>337
VMWareでもVirtualBoxでも用意してやってみろ
インテルなら多分動く
341login:Penguin
垢版 |
2018/12/13(木) 21:22:46.92ID:Kpl2TedD
>>339
その"type"ってのも無いんだけど?
command not found って出る
2018/12/13(木) 21:24:27.86ID:2p8AEIUJ
劣化版なのでは?
2018/12/13(木) 21:36:41.38ID:rsnZtD/M
磁気テープ知らん奴がいるのか・・・
俺も歳を取るわけだ・・・ ハーー
2018/12/13(木) 21:39:29.69ID:rk530vyH
磁気テープがバックアップ媒体でバリバリ現役なんだぜ。
345login:Penguin
垢版 |
2018/12/13(木) 22:44:49.64ID:jQhV0FO+
>>343
オープンリールのテープならともかくqicなんてddsの前位だろ。あんたも俺もまだ若造だよ。ハー。
2018/12/14(金) 00:56:12.74ID:Dwi6kCsC
フラッシュメモリや円盤の耐用年数は、5年だろ

一方、磁気テープは、30年とかだろ
2018/12/14(金) 02:31:43.32ID:WFElEHpX
磁気テープってなんかロマンあるよね。実際見たことないけどw
2018/12/14(金) 03:07:09.17ID:GpLUKSLa
俺も知らなかった
当時高価なUNIXとは無関係なごく一般的なパソヲタはこういう流れだから特殊なものだと思った方がいい
オーディオ用アナログカセットテープ → 5インチフロッピーディスク → 3.5インチフロッピーディスク → 3.5インチMO → CD-R/RW → USBメモリ
2018/12/14(金) 03:23:33.89ID:vny8+/a7
オーディオ用カセットテープ??
2018/12/14(金) 03:37:12.47ID:GpLUKSLa
あれ?mz700とかの媒体ってオーディオ用のやつでしょ?キーガーとか音出しながらアナログからデジタルに変換して読み込むの
2018/12/14(金) 03:47:46.28ID:CQSYnmf/
勘違いしとるな
 
ドライブ本体が安けりゃ欲しい
2018/12/14(金) 03:53:05.65ID:GpLUKSLa
そりゃ誰だって欲しいw
2018/12/14(金) 07:09:46.63ID:tfnsNf0y
>>349
PC6001の時代だよ。
16KBの増設メモリーが8トラのカセット位の大きさ。
データはカセットでメモる。
2018/12/14(金) 08:28:09.81ID:WFElEHpX
sudoeditで起動したエディタに元のファイルの名前を渡す方法ってありますか。
sudoeditでファイルを読み込むと/var/tmp/以下に一時的なファイルが作成されるんだが
VimやEmacsなどの一部のエディタは設定ファイルの名前をもとにシンタックスの種類を決定することがある。
だから/var/tmp/にファイルが作成されるとその機能が使えなくなってしまう。
例えば/etc/fstabを編集するとき、エディタは「/etc/fstab」というファイルの名前からfstab用のシンタックスを適用してくれるんだけど
$ sudoedit /etc/fstab
とやって編集するとファイルが/var/tmp/XXXXXXXに移動してしまいfstab用のシンタックスが適用されなくなってしまう。
2018/12/14(金) 08:32:28.30ID:JQUDZnsy
磁気テープが現役でしかもTB単位とかロマンを感じる
カセットやVHSは知っててもで大型用は写真でしか知らんからな
でかいリール使ってるあれって速度的にはどうなん
2018/12/14(金) 08:46:11.55ID:ovdRZLka
LTOはそれなりに速い
2018/12/14(金) 10:10:30.61ID:ikwr+G0A
普通のHDDより速いね
バックアップなんてどうせシーケンシャルアクセスしかしないし
2018/12/14(金) 15:27:57.27ID:WFElEHpX
>>357
まじで?
カセットテープの話だよね? あれがHDDに読み出し速度で勝るとは思えないんだけど
構造が特殊なのかな。パソコン用のカセットテープは。
2018/12/14(金) 16:10:21.55ID:ikwr+G0A
LTOすら知らんのかよ・・・
2018/12/14(金) 16:25:29.45ID:mnvRUogY
tape archivesのテープってひょっとしてそれのこと?
2018/12/14(金) 18:01:54.87ID:4OG2vapp
ここ4〜5レスは、レベルが違いすぎて議論が噛み合っていない。
見ていて楽しいwww
2018/12/14(金) 18:39:29.51ID:WFElEHpX
見ていて楽しい(話についていけない)
2018/12/14(金) 18:59:48.09ID:C13Zox/x
Sun のが 2400ボーだったら気が遠くなりますw
2018/12/14(金) 19:01:50.13ID:Wd54hADz
ハタボーだふぉーん
2018/12/14(金) 20:34:41.75ID:Ek1UBBLm
>>358
読み書き位置を決める動作はHDDのシークとかよりテープの方が簡単
だと素人目にも感じない?
2018/12/14(金) 21:05:02.67ID:t7Qx0ST8
>>355
こんな奴の話ならテープの絶対速度はかなり早くて120inch(3mちょい)/s程度
ただ記録密度が低いからデータ転送速度はたいしたことなくて200kb/s程度
http://museum.ipsj.or.jp/computer/device/magnetic_tape/images/0017_01_l.jpg
2018/12/14(金) 21:07:11.37ID:t7Qx0ST8
すまん200kB/sだ
2018/12/14(金) 22:31:25.17ID:JweqMLAi
>>366
どうせ貼るなら詳細が書かれているhtmlページの方を貼ってほしかった
http://museum.ipsj.or.jp/computer/device/magnetic_tape/0017.html
1971年の製品か
2018/12/15(土) 00:06:51.68ID:SNg57Q0S
>>354
https://vi.stackexchange.com/questions/6784/how-can-i-automate-filetype-detection-when-using-sudoedit
2018/12/15(土) 15:05:37.62ID:+Je+pouF
LinuxでつかえるUSB経由でHDMIキャプチャできる機器ってありますか?
この手の機器をつかったことがないのでセットアップ方法まで参照があると嬉しいです。
2018/12/15(土) 15:17:43.20ID:yMwJjzRz
>>370
画面記録ソフトウェアのこと?
Kazamとかじゃだめなん?
2018/12/15(土) 15:19:15.58ID:+Je+pouF
>>371
メインはハードウェアとして、です。
ただソフトウェアもどんなものがあるかはよく知らないです。
2018/12/15(土) 17:54:53.40ID:2dFVGCpB
データセンターでのバックアップ磁気媒体はLTOが主体だと思うんだが
2018/12/15(土) 18:27:40.50ID:nBxd7crP
https://blog.shiftky.net/linux-lto-tape-drive-management-commands/
元々のtarは記録用だったのか
随分意味合いが変わったもんだな
2018/12/15(土) 19:40:36.94ID:KHYgPvB0
iconvのiってどういう意味?
2018/12/15(土) 20:22:21.71ID:PhlF7L7j
>>375
[I]nternational Codeset [Conv]ersion Library
2018/12/16(日) 02:11:05.50ID:sSzOptpz
bashについてお伺いします
ファイルの各行を1つの要素とする配列を簡単に作る方法を模索しています
データには空白文字が含まれている可能性があり、そこで要素に分割されないように
空白文字を保護する必要があります
ループ回して1行読み込んでは配列に追加するという方法なら確実かと思いますが
簡潔にできないかと考えたあげく出たのが次のコードです

eval array=( $( cat file | sed "s/.*/'&'/" ) )

各行の先頭と末尾にシングルクォートを追加した上で、evalに再解釈させるという方法です
(話の単純化のためデータには元々シングルクオートが含まれていないとします)

この方法は一見うまくいったようでした
空白文字の箇所で区切られることなく1つの要素に収まりました
しかし連続するスペースが1つのスペースに圧縮されていることに気づきました
これはevalが実行される前に、連続するスペースが要素の区切りと見なされ
1つのスペースに整形されてしまうのが原因ではないかと考えています

そこで質問としては、うまくいかない理由の認識はあっていますか?
それと他にこの目的を簡単に達成できるような方法はありますか?
2018/12/16(日) 02:28:50.33ID:08XRGqAB
ループ回して1行読み込んでは配列に追加しろ
つーか、1行読んで1行ずつ処理すれば?
379login:Penguin
垢版 |
2018/12/16(日) 03:14:23.64ID:648j88pB
>>377
> うまくいかない理由の認識はあっていますか?

あってると思う
evalの引数を引用符で括れば良さげ

eval "array=( $( cat file | sed "s/.*/'&'/" ) )"

> 他にこの目的を簡単に達成できるような方法はありますか?

mapfile -t array <file
380377
垢版 |
2018/12/16(日) 03:47:54.79ID:sSzOptpz
>>379
ありがとうございます
勉強になりました
2018/12/16(日) 04:43:24.46ID:84KMWPj3
mapfileなんて知らんかったわ
すげえな
382377
垢版 |
2018/12/16(日) 05:08:03.31ID:sSzOptpz
mapfileというのはbash4.0からの機能みたいですね

mapfileがない場合は最終的に次のコードに落ち着きました

eval "array=( $( cat file | sed "s/'/'\\\''/g; s/.*/'&'/" ) )"
(シングルクォート保護版)

しかし無駄な努力に終わってしまった…
2018/12/16(日) 09:19:31.69ID:zwcjpbmB
http://ppa.launchpad.net/papirus/papirus/ubuntu/dists/bionic/InRelease
↑ここに接続できないって言われてPapirusアイコンのパッケージ更新ができないんだけど、みなさんそうですか?
2018/12/16(日) 11:24:56.34ID:/MO3Edke
>>376
おお!ありがとう!
2018/12/16(日) 18:29:41.10ID:Cph6qf5U
つまんねー ぜんぜん「くだらねえ」くないから
2018/12/17(月) 12:08:05.90ID:lR+oH8eb
つまんねーならおまえがくだらねえ質問するんやで
2018/12/17(月) 18:39:30.04ID:ChQv8TkK
1から10までのループとして

for i in {1..10} ; do
echo ${i}
done

と書いてますが、このループの終端の数字をシェルスクリプト実行時に指定しようと思い

for i in {1..$1} ; do
echo ${i}
done

とし、コマンドラインパラメータとして$1に10を与えたところ、出力が

{1..10}

となってしまい、期待通り動かせません

うまく動作させる方法を知りたいです

seqコマンドを用い、 seq 1 $1 と書き換えると動くことは分かったのですが、上記{}を使った記法を知りたいです
2018/12/17(月) 21:59:33.57ID:rOWm4H3m
>>387
処理順序が {}の展開→変数の展開 の順になっているからevalするしか無さそうだけど
面倒だし、ファイル名に対してはスペースの扱い怖いな
$ echo $(eval echo abc\{1..$hoge\})
abc1 abc2 abc3
2018/12/17(月) 22:06:52.90ID:mLXh0j4T
i=1
while [ $i -le 10 ]; do
echo ${i}
i=$((i+1))
done
2018/12/17(月) 22:25:31.98ID:2bzO2+ne
>>387
https://gist.github.com/tgck/5427200
391login:Penguin
垢版 |
2018/12/18(火) 00:52:52.26ID:gFEfARad
age
2018/12/19(水) 00:45:56.58ID:DG5csFsk
manページを開いたときにターミナルエミュレータのタイトルを変更することって可能ですか?
具体的にはmanページのタイトルを取得して,printf '\e]0;%s\e\\' '<タイトル文字>'
みたいな出力をかます。
2018/12/20(木) 12:57:12.93ID:eVBCtBcV
>>388
>>390
情報どうもです

evalが必要なようですね

スクリプト見直しの参考にします
2018/12/22(土) 14:00:39.65ID:b6LODgj3
ディレクトリを移動するときのcdとカレントディレクトリを表示するpwdってそれぞれ何の略ですか?
2018/12/22(土) 14:20:22.97ID:Kggs6Gd8
change directory
print working directory
じゃね?
2018/12/22(土) 14:23:52.44ID:oWNfAzIV
>>394
man や info に書いてありますよ
2018/12/22(土) 14:25:13.37ID:PtT8lgYE
>>394
man
2018/12/22(土) 17:27:14.00ID:Kggs6Gd8
ITに限らず略語の意味は
what pwd (stands) for
でググっても見つかる
2018/12/22(土) 20:12:35.93ID:TtAeAAdm
シェルスクリプトで

touch $LOGERR
exec 2> $LOGERR
コマンド
$LOGERRがあるならメール送ったり、$LOGERRを削除

みたいな部分があるのですが、

2> $LOGERR はエラーログを記録するのはわかるのですが、
execコマンドはそもそも何をしているのでしょうか?

コマンド 2> $LOGERR はコマンドを実行してそのエラーログを格納するのは理解できるのですが、
execというものを使ったことがないので、よくわかっていません。
2018/12/22(土) 21:01:13.58ID:0mXx4pJn
>>399
exec以降のコマンドの標準エラー出力が$LOGERRにリダイレクトされるようになる
2018/12/23(日) 04:58:50.78ID:GaOF1T9V
execはシェルを引数部分に置換する
$ exec lsをやるとls実行後に端末が閉じてしまう
$ exec bashをやるとシェルの再起動が出来たり
exec 2> $LOGERRはエラーを$LOGERRに向けるからそのファイルにエラーが保存される

端末を2つ使ってこんなことができたり
端末1で$ exec > tmp.txt
$ echo foo
$ ls
見た目は変わらないけど実行内容が全てtmp.txtに向くからechoをやっても表示されない

端末2で$ tail -f tmp.txt
foo
tmp.txt
これでtmp.txtが開きっぱなしになるから端末1で何かを実行する度表示される

端末番号ならファイルを使わず直接画面をリダイレクトできたり
ttyで端末番号を調べて端末2が/dev/pts/2として端末1からこうする
$ exec > /dev/pts/2
これで端末1の操作内容が端末2で表示される
$ echo hello > /dev/pts/2なんてやると相手に文字が送れる
他にも名前付きパイプとかscriptとか
2018/12/23(日) 05:37:56.93ID:HJ+H2evR
>>399
シェルスクリプトのexecは、カーネルのexecシステムコールを呼び出すもの
機能としては外部コマンド呼び出しに近いが、外部コマンドが終了しても処理が戻ってくることはない
callではなくgotoといったらわかるかもしれないな
プロセスの入れ替え。だからpidも変わらないし、プロセスツリーが深くなったりもしない

これがexecの機能なのだが、補足としてexecで呼び出す外部コマンドを指定しなかった場合は
エラーになったり終了するのではなく、現在のプロセス(カレントシェル)の処理が
そのまま続行するという仕様がある

この仕様を利用し、execで(外部コマンドを書かずに)リダイレクトのみを書いておくことで
カレントシェルの出力先を変更して処理を続行することが出来る
(もちろん外部コマンドを書くと、リダイレクト先を変更した上で外部コマンドが実行される)

/bin/foo >/tmp/foo # fooコマンドを呼び出し、fooコマンドが終了したら戻ってくる(fooコマンドの出力はすべて/tmp/fooに書き込まれる)
exec /bin/foo >/tmp/foo # fooコマンドを呼び出し、fooコマンドが終了しても戻ってこない(fooコマンドの出力はすべて/tmp/fooに書き込まれる)
exec >/tmp/foo # (外部コマンドが指定されてないので)そのまま続行する。(以降のカレントシェルの出力はすべて/tmp/fooに書き込まれる)

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

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