私のマシンの1つ(Debian Sidを実行している)でls
、スペースを含むファイル名を入力するたびに、単一引用符で囲まれていることに気付きました。
私はすぐにエイリアスをチェックしましたが、それらが無傷であることがわかりました。
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
名前に単一引用符を含むファイルを使用した別のテスト(jimmijによる要求にも応答):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
新しいcoreutils-8.26の出力で更新します(明らかに紛らわしくないですが、デフォルトではいらいらします)。このプリントアウトをしてくれたPádraigBradyに感謝します。
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
なぜこうなった?適切に停止するにはどうすればよいですか?
明確にするために、私自身はlsを自動的にカラー出力に設定しました。以前は物事を引用符で囲みませんでした。
bash
coreutils 8.25を実行しています。
編集:coreutils開発者は、最小限の驚きの原則と 46年以上のUNIXの伝統を破ったとしても、それをグローバルなデフォルトにすることは良い考えだと考えているようです(リンク)。
再コンパイルせずにこれを修正する方法はありますか?
更新-2017年10月-Debian Sidはデフォルトでシェルエスケープクォートを再度有効にしました。これはばかげている。https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
そして、以前のバグレポートへの返信チェーンの一番下に、「変更は意図的なものであり、今後も継続されます。」https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
これは解決したと思いました。どうやら。
更新:2019年4月:この変更により引き起こされたPHPでの疑わしいバグレポートが見つかりましたls
。開発者を混乱させ、誤ったバグレポートを生成している場合は、変更を再考してください。
更新:Android toybox ls
は、これと同様のことを行っていますが、引用符ではなくバックスラッシュを使用しています。-qオプションを使用すると、スペースが「疑問符文字」としてレンダリングされます(明らかにスペースではないため、それらを確認していません)。これをスクリプトに追加し、シェルを起動するときにソースとして使用します。この関数はls
、端末の場合は列を使用し、そうでない場合は1行に1つずつls
印刷しますが、パイプを介して実行されるため、逐語的に印刷スペースをtrick します。
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C "$@" |cat
else
/system/bin/ls "$@" |cat
fi
}
ls | cat
消えるかどうか試してみてください。タイムマシンがあれば、Bell Labs〜1970に戻り、ファイル名とディレクトリ名にスペースを許可するのは悪い考えだとケントンプソンに納得させようとしました。:-P
'*'
。私は私が追加周りに行きますねls
...それを取り除くためにすべての私のマシンにエイリアスを
QUOTING_STYLE=literal
は、エイリアスではなく環境変数を使用してこれを行うことができます。(それは好みの問題だと思いますが、私は変数を好みます。)
ls
コマンドを解析しない別の理由。