zsh その7
誰しも失敗はあるし、フェイルセーフはやっぱほしいよ。 >>642 > 補完offにしとくか、HISTSIZEを2-3ぐらいにしとけば それだと普段の作業がちょっと不便では。 >>641 は毎回mv,sedとかが走るのはパフォーマンス的にどうなんだ HISTFILE=~/my_history みたいに換えとくのが単純でいいか。 >>642 ヒストリ展開は便利だけど、ファイル編集した後なんか適当なコマンドを思いつきで打ってしまうとやりにくい。 >>643 いやこのためだけに、$HISTFILEをファンシーな名前にするのはなんだか環境が汚れた感じがする。 これで行けるわ zstyle ':completion:*' ignored-patterns '.zsh_history' .zshrc あたりに追加すればいい 書き直した。ヒストリのバックアップは別でやるべきだわ function ensure-file-head(){ [[ $(< $1 | read -re) == $2 ]] && return < =(print -r -- $2;< $1) > $1 } # ensure preventing `source .zsh_history`. ensure-file-head $HISTFILE 'echo '"'"'Cannot source `'$HISTFILE'`, Abort.'"'"' >&2;return 1' ファイル直接編集を避けるためにヒストリ関連の組み込み命令 fc -R, -W とかを使ってやる方法も考えてみたが、オプションの具合によってはファイルに追記しかしないし、デフォルトでは詳細なタイムスタンプがつかなかったりするので、 「この指定はsetopt 〜 の後で行う必要がある」のような条件がついて美味しくない。 >>645 補完よく知らないのだが、そっちに手を入れるほうが良さそうだね。 試してみたところその指定では tail .zsh_history のようなものも弾かれてしまわない? source だけに限定するのは難しいだろうか >>647 fc のこと? history == fc -l で、リストアップに限定したコマンド。 問題の対策は他にもEnterキーのアクションである accept-line ウィジェットを置き換えるとか、 コマンドライン実行前に呼ばれる preexecフックとかで止める方法がある。後者は記事のブックマークコメントの先で紹介されてた。 でも言われてた通り機構をあらたに作る必要があって煩雑になるし、その辺は元々弄りたい需要が多すぎるのでただでさえゴチャついてるところに手を入れがたい。 インタラクティブシェルだけ source を関数で置き換える方針はどうだろう。 .zsh_historyが引数のときだけ実行を警告するように。これも軽い修正になってよさそうじゃないかな source ~/.zshrcはエイリアスに入れてるわ これで誤爆の心配もないね! >>648 いや history じゃなくてわざわざ tail .zsh_history を使うのってどういう時なの? 何にせよ .zsh_history を開きたいときは command $HISTFILE<tab> でもいいと思うけど >>651 確かに忘れるけど、セーフティ的な意味なら充分役立ってくれるかなと思って…… >>652 ヒストリ関連のオプションをいじってたとき、内部ヒストリがファイルに保存されているかを確認するために tail .zsh_history と history を見比べてた。 テンポラリのヒストリファイルを複数作って実験していたので、tail $HISTFILE はその用途では使いにくい。 このような需要はあまりないとは思うけど、補完を絞る方法がもしあるならモアベターだと思うんだ。 >>651 ひょっとしてサフィックスエイリアスかな? それはよさそう $ alias -s zshrc=source $ ~/.zshrc (source ~/.zshrc が行われる…) HISTFILE=~/.zsh/history_zsh って感じで場所と名前変えてる zshクソ。誰もが使いそうな変数名を特殊扱いすんな statusとかpathとかsecondsとか 遅レスですまないけど、.zhistoryって行頭が:になってるからsourceしてもスルーするんじゃないの? :って何もしないって機能だよね EXTENDED_HISTORY <C> Save each command's beginning timestamp (in seconds since the epoch) and the duration (in seconds) to the history file. The for‐ mat of this prefixed data is: `: <beginning time>:<elapsed seconds>;<command>'. : ... : ... ; rm -rf / いかんでしょw >>660 > :って何もしないって機能だよね なにも "出力しない" 機能であって何もしない機能ではない。 : $(touch /tmp/ttttt) は実際にファイルを作成する。コメントの代わりには使えない。 そもそも>>661 が言ってる通り、;で区切られてるから動く まあ、: コマンド自体が何もしないってのはそのとおりだけど 一行全体で見ると、引数部分を実行するという話 :はなにもしないし引数をすべて無視するけどシェルが:の引数と解釈しなかった部分が実行される よって;とか&&とか$()とか<()とかいろいろ実行される : を使うシーンって何? 意味は知ってたが使ったことない そういや普通にwhile : ;do〜みたいに手癖で使ってたわ あと昔書いてたシェルスクリプトでも冒頭でset -eを設定しておきつつ エラーで止まってほしくない箇所で : を使ってた てかzsh関係ないですねすんません zshが馴染みすぎるとbash、それも素の設定を使わざるを得ない状況になるとストレスがすごいよね 鯖缶の方とかそういうシチュエーション多そうだけどどうやって折り合いつけてるんだろう >>670 zshは基本入ってないんで、bashに戻りつつあるw 自作のZpluginプラグインのほぼ全てが壊れたまま運用していて、 むしろスッピンより不便なはずだが、何も感じなくなってしまった インタラクティブ環境は、慣れやすいものなのかも Macのデフォルトシェル採用って結構影響でかいような 問題なければ追従するUnixやLinuxの鳥も出てくるじゃないかと それはないなー bashとの互換性がね。shwordsplit、あれが最悪だね。 理屈はわかるんだけどね。互換性の点から見れば最悪。 うん。互換モードはあるよ。でもデフォルトじゃないんで代替にできない。 そこまでして変える必要性がない。 そもそもさ、みんな潔癖だからね。POSIX準拠。そっち優先。 debianとかubuntuは bashよりも機能が低いdashとかにしようとしてるぐらい ログインシェルはまあ自由に使っとくれって感じだろうけど デフォルトシェルはPOSIX準拠。これ一択なんでzshにはならんよ 遅いしね。 Macのログインシェルは、はたから見ると、あぁ可哀想 bashのライセンスが受け入れられなかったから 消去法でzshなんだね。ぐらいにしか思ってない。 zshを選びたくて選んだなんて誰も思ってないんだよ。 zshで何も困らない 強いて言うならQiitaとかのzsh初めて使った人の記事が初心者すぎて目障りなくらいw Macユーザのウザさ、もとい声のデカさを信じようじゃないか plugin managerをzinitに変えたら起動が爆速になった オススメ 単なる興味なんですがzshの2系より前って手に入らないですかね? zshの2系、やっと見つかりました。 https://web.archive.org/web/19990828203220/http ://www.cs.elte.hu/pub/zsh/old/?919318967 zshにBASH_ENVに相当する機能はありますか? つまりzshでシェルスクリプトを非対話型で実行した時に 任意の処理を先立って実行したいのです。 >>683 ~/.zshenv かな http://zsh.sourceforge.net/Doc/Release/Files.html スクリプト実行時に限らず対話シェル起動時にも読まれるけど INTERACTIVEオプションの状態をチェックするifで括ればよさそう if [[ ! -o INTERACTIVE ]]; then echo non-interactive fi >>684 ありがとうございます 既存の ~/zshenvは修正できないという制約があるのでINTERACTIVEの チェックは出来ませんが、ZDOTDIRを書き換えればなんとかなりそうなきがします つまりBASH_ENVをセットして起動の代わりに /tmp以下に一時的にファイルを作ってZDOTDIRをセットして実行 初期化処理の中で一時ファイルを削除したりZDOTDIRを元に戻したりとかです 10より大きいファイルディスクリプタを使うにはどうすればいいの? あー、もうやだ、クソzsh。なんでこんなこともできねーんだよクソ しかも5.5?ぐらいから挙動変わってるし、バグなんかこれ changelogみてもなにもわからねーしー、どうすればちゃんと取得できるんだよ うるせーばーか、こっちはzshがクソで困ってるんだ bashの方がいいな zshは機能が多すぎて覚えられない お勧め設定をAI的に徐々に教えてくれたらいいのに 「そのやり方、こんなふうにもできますよ?次回からこうします?」って 互換性を切り捨ててるものは結局デフォルトになることはないしね zshも互換性が完璧とは言えないから驚かれたぐらい bashがライセンス上の都合で選択できない以上どうしようもなかったんだろうが 下記はとある本にのってる zsh のプロンプトの設定なんですが、一番右の % はなんなのでしょうか? いらない気がするのですが? 誤植? # プロンプトの右はじに、false なら終了ステータスを表示。 RPS1="%(?..(%?%))" >>698 %( に対応する閉じ括弧だと解釈されるのを防ぐエスケープ >>700 kshはメンテも終わった終わったシェルだから >>703 AT&Tがそれを全て取り消して93u+をベースに最初からやり直し、だがそれも頓挫かな ksh2020はkshの派生の別物扱い。zshもksh(tchs)の派生だから兄弟のようなもんかw >>704 zshはコード自体は全く別物だったか。フォークという派生とはちょっと違うか 最凶 最凶と呼べるほどにもない全然 使えない おもちゃか パッケージ: ksh (2020.0.0+really93u+20120801-6) https://packages.debian.org/bullseye/ksh これはksh2020なのか93uなのか Debian offers ksh2020[20] in its testing version.[21] ksh2020は完全に放棄されてんな ASTからバグフィックスのためだけにフォークしたおじいちゃんが一番地道に現在活動的 >>711 >>704 AT&Tからフォークしてあくまでもメンテナンスだけを現在熱心にやってるのは https://github.com/ksh93/ksh かな。それの冒頭に>>711 のことも書いてる 一体いくつあるんだよw オリジナルはまあいいとして そこからの派生 オリジナル : 頓挫、終了 オリジナルのちゃんとしたメンテ : 無い、まだ無い 色々やった 2000 : 頓挫 地道に一人で : 地道に継続中 だけだよ。てか、いい加減過疎ってる ksh スレに行けよw zshなんも関係ないぞ >>478 oh my zshとかGrmlの話題もまったくなく何話してたんだここ >>479 使ってないわけないんだが 何故かこんなのしかいなかったからこのざまだったんだろうな zshで拡張した部分を使えば便利だが、zshしか使えない体になってしまうからなw MacでCUIアプリをダブルクリックした際の挙動と、 インタラクティブシェルで起動した際の挙動を変えたいのだけれどフラグとなる 環境変数がなになのかわからん。 bashしか使ったことなかったけど Macがzshなものでドキュメントみてたけど ページ量多すぎだろ 機能が豊富ですから 機能が豊富なzsh固有のに慣れてしまうと他が使えない体質になりそうで使わないけどw ここzshの本スレですか?随分人いないですね。 どこか別にコミュニティあるんですか? >>717 今だとzinitがホットかな でもまぁフレームワークなんて流行り廃りがあるのだし、ライトユーザが無理に使う必要もないよね oh my zshとかzinitってなんのために使うんだろう? プロンプト決めるだけでしょ? 一通り環境作り上げて不満なくなると更新とか動向全くチェックしなくなってしまう せめて数年に一度は見直さないといかんわな この腰の重さは老化のバロメータか 人が書いたやつはちゃんと追いかけておかないといつまにか別物になってる可能性があるな お前のようにここに書くようなネタが無いだけ 使ってるヤツはそれなりにいる 5chだけが世界の全てのお前にはわからんだろうけど zshのそのものの更新が一年無いって話か それでオワコンだって言ってるのか それもまたあたおかな発想だな https://news.mynavi.jp/itsearch/series/devsoft/powershell_core_-.html これ見ながらpowershellを普段のzshのようにしようかと企んだけど途中でアホ臭くなってやめた ちっとも好きになれんわpowershell 普段のユーザとしては zsh と (pd)ksh しか使ってない。 tcsh から乗り換えて zsh はもう17年だよ… そろそろ bash 勉強しなきゃダメかな… zsh を Mac のデフォルトシェルとして使う https://support.apple.com/ja-jp/HT208050 macOS Catalina から、Mac は zsh をデフォルトのログインシェルおよびインタラクティブシェルとして使うようになります。 それ以前のバージョンの macOS でも、zsh をデフォルトにすることができます。 ZLE使えばコマンドライン入力を編集できますが、 ZLEウィジェットとして登録した関数を直接呼び出して zle を呼び出すとエラーが発生します。 外部からコマンドラインを編集する方法はないのでしょうか? pashなんてあるのか いい感じならzshもパクってくれ psprint死んだらしいな Rest in Hell read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる