
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 b
a
b
"a b"