エイリアスが正しく割り当てられていません

エイリアスが正しく割り当てられていません

bash エイリアスに関して奇妙な問題が発生しています。.bashrc に次のエイリアスを定義しています。

alias rec='nano `ls slurm-* | sort -t. -k3n | tail -1`'

recただし、シェルでエイリアスを展開すると、CTRL ALT E次のようになります。

nano Remember that all constraints must be readded!

エイリアスを実行すると、同じ結果が得られます。

nano Remember that all constraints must be readded!

を使用すると、which rec正しい展開が得られます。

alias rec='nano `ls slurm-* | sort -t. -k3n | tail -1`'
/home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/nano-2.6.3-k2cwz7lwjd4zutb7r7cfo63apevyztuw/bin/nano
/home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/coreutils-8.26-icpocuezd6r7ydd73ipkehkg345372eo/bin/sort
/home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/coreutils-8.26-icpocuezd6r7ydd73ipkehkg345372eo/bin/tail

これはRemember that all constraints must be readded!私が書いた(おそらく)全く関係のないスクリプトの出力です。ここで何が起こっているのか分かりますか?

答え1

解析中ですlsそんなことしちゃダメだよ。私はそう思う5月あなたの問題の原因になります。

たとえば、ファイル名の少なくとも 1 つがslurm-*次のようなものである場合:

*\nRemember that all constraints must be readded!

または

*\nRemember that all constraints must be readded!\n*

\nが改行である場合、sort予想よりも多くの行が返されます。このファイル名のみの場合:

slurm-0.1.-5\nRemember that all constraints must be readded!

は 2 行を受け取りsort、その出力ではRemember …行が 行の後に表示されますslurm-…。ファイル名が正確にどのようになっているかはわかりませんslurm-*。実際に何が起こるかさえわかりません。私の言いたいのは、 の出力を解析すべきではないということですls


もう 1 つの弱いフラグメントは、 の引数を引用していない部分です。 これはおそらく現在の問題とは無関係ですが、は nano edit になり、 ではなく になることnanoに留意してください。nano a bab"a b"

関連情報