閲覧ありがとうございます。最近zshの勉強を始めたコマンドライン初学者です。
環境はwindows10、Windows Terminal、ubuntu-20.04、zsh、linuxbrewを使用しています。
補完関数にてとあるディレクトリのファイル一覧を表示したいのですが、うまくいきません。
以下のように記述したのですがなにか間違えているでしょうか。
zshrc
1function testcat() { 2 cat "/とあるディレクトリのパス/$1" 3} 4#compdef testcat 5function _testcat() { 6 _values \ 7 `ls -F /とあるディレクトリのパス/ | grep -v /` 8} 9compdef _testcat testcat
とあるディレクトリのパス内にファイル名に半角スペースが入っていた場合に表示されるファイル名がおかしくなってしまいます。
例として、とあるディレクトリのパス内に「a」「e c b」「d(ディレクトリ)」というファイルがあったとして、
補完時に「a 'e c b'」と表示したいです。しかし、上記のようにls -F /とあるディレクトリのパス/ | grep -v /を使うと、「a* b* c e」と表示されてしまいます。
スペースごとに区切られて別のファイルであるかのように表示され、また、ファイル名の末尾にアスタリスクが付いてしまい、また、補完から選択すると末尾にスラッシュが付いてしまいます。
補完のaを選択するとa/となってしまいます。
ちなみに関数とは関係なくただls -F /とあるディレクトリのパス/ | grep -v /を出力するとスペースごとに区切られることはなく
「
a*
e c b*
」と表示されます。しかし、なぜか改行され、アスタリスクは付いてしまいます。
ファイル名のみを表示する方法を調べてもls -F path | grep -v /以外の情報がなかなか見つからないのですがなにか解決策はないでしょうか。
wslを使用している環境上、どうしてもスペースが名前にはいったフォルダやファイルが多いため悩んでいます。
どうかご回答よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/17 12:21