Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2023-07-26 - Nix flake + direnv や nix develop で PATH 展開した bash/zsh/fish から、更に bash をインタラクティブに立ち上げると bash: complete: command not found が出まくって不快 #237

Closed
kachick opened this issue Jul 25, 2023 · 6 comments · Fixed by kachick/dotfiles#181
Labels
bug Something isn't working question Further information is requested

Comments

@kachick
Copy link
Owner

kachick commented Jul 25, 2023

覚えれば覚えるほどあれもこれも便利な Nix 環境だけど、使ってくうち必ず何かしらに躓く。しかしメリットの方が大きいのでやめる気には全くならない
今はこれ NixOS/nix#6091 に引っかかっている。 NixOS/nix#7010 で直ったはずと閉じられているが・・・?

direnv/direnv#443 も関係しているのかよくわからない

結局今は bash を普段遣いにはしていない のだけれど、シェルスクリプト書く時とか bash での挙動を確認したい事は多く、その時に使えないと困る。
基本使わないと考えて complete 系を .bashrc でごそっとコメントアウトしたらエラーは止まったけど、表示がバグる

@kachick kachick added bug Something isn't working question Further information is requested labels Jul 25, 2023
@kachick kachick changed the title 2023-07-26 - Nix flake + direnv で PATH 展開した zsh/fish から bash をインタラクティブに立ち上げると bash: complete: command not found が出まくって不快 2023-07-26 - Nix flake + direnv や nix develop で PATH 展開した bash/zsh/fish から、更に bash をインタラクティブに立ち上げると bash: complete: command not found が出まくって不快 Jul 25, 2023
@kachick
Copy link
Owner Author

kachick commented Jul 25, 2023

bash --norc で、 bashrc を一時的に読み込まず起動するのが一番良さげに感じている。これなら親から渡ってきた nix で通った path は維持されたまま、nix が用意する bash 上で、補完やプロンプトだけ飛ばした bash 環境で動作させられる。
スクリプトでの挙動にもかなり近くなるはずでは

bash --noprofile --norc で profile を飛ばす必要性はまだ感じてない

env -i bash --norc --noprofile と env から始めると、そもそも nix が通した bash ではなくシステムの bash が立ち上がる。ここには他の Nix 関係の PATH も通ってないので、使いたいシーンはあんまなさそうな。

ref: https://stackoverflow.com/a/21391035/1212807

@kachick
Copy link
Owner Author

kachick commented Jul 25, 2023

しかし面倒ではあるので、 bashrc 内で Nix devshell 上かを判別して読み込ませる読み込ませないを分ければどうか?

そもそも Nix 環境かどうかを判別する手法が微妙に無さげだったけど、 starship がうまいこと表示してくれてるのでそっち追っかけて合わせれば良い気がする。適当に NIX_ なんたらで通る ENV で判別してそうな気はするけど

@kachick
Copy link
Owner Author

kachick commented Jul 25, 2023

https://github.com/starship/starship/blob/6fc4152624ffbfb9dbb4aaf09a382f4b05afe25c/src/modules/nix_shell.rs#L18

IN_NIX_SHELL で判別してた。direnv が展開する中になさそうなんだが・・・?
NixOS/nix#3862 で議論されてたときにも上がってたENV名だけど、結局これは採用されずに close されてた気が・・・

starship/starship#4724 starship で入ったのはこれかー

NixOS/nix#3862 (comment) マジカルな何かが書いてありきになる

@kachick
Copy link
Owner Author

kachick commented Jul 27, 2023

要は nix で path 展開された shell 上から更に nix が提供する bash を立ち上げた時限定の話という理解をしたので、 kachick/dotfiles#181 こんな感じにしておいた。

不便といえば不便だけれど、そもそも bash は便利にするというよりある程度安定して動くよう諸々は突っ込まないほうが良いのかもしれない・・・(それが dash だったんちゃうんかとは思いつつ)

@kachick
Copy link
Owner Author

kachick commented Aug 1, 2023

相変わらず何もわかってないことがわかったけれど、nixpkgs で bash と現在名付けられている pkg は、一般的に僕らが触れる様な GNU Readline を含めない状態の配布物らしい。なのでシェルスクリプトの類は動くが、もろもろ interactive な機能がおかしくなると
ということで、bash という名前が readline 込みの物をポイントするようにすれば問題なくなり、その名前は bashInteractive らしい。

NixOS/nix#730 (comment) => kachick/anylang-template@92ad474

これでゴリゴリ回避するような変なコードは捨てられたけれど、しかし各リポジトリにこれ明記する必要あるの面倒では。自分のだったらまだ良いけど、人のとこ行った時面倒だな・・・と思って home-manager 側でも入れてしまったが、結局 dev shell あげる時に nix が 専用 bash を押し付けてくるし、それが優先されるので解消せんかった。

@kachick
Copy link
Owner Author

kachick commented Aug 1, 2023

過去にも幾つも issue 上がってるので、そのうちなんかオフィシャルに方向性が示されるかもしれないし、特にそういう必要性無しという結論になるのかもしれない。

最新と思しき問題提起は NixOS/nix#8764

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working question Further information is requested
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

1 participant