私たちの大学には、Linuxで作業環境を設定するスクリプトがあります。私は怠惰で、source /setup/script
このプロセスをシェル初期化に追加することにしました.cshrc
。しかし、今やったので、それほど使用することはできません。less somefile
そのスクリプトの出力を実行すると、あまり表示されません。代わりにコンテンツsomefile
。
私は以下を使ってこの問題を解決しました。source /setup/script > /dev/null
質問は次のとおりです。
- 間違っています/より良い方法がありますか
source initscript
?.cshrc
- 引き続き使用するにはどうすればよいですか
less
(出力リダイレクトなしでスクリプトは役に立つと思われる使用情報の一部を再表示します)。 - なぜこれが起こるのですか?
編集する:わかりました。スクリプトを追加するのは不便なので、以下は私に影響を与えない最小限の例です。
.cshrc
:
source ~/test
~/test
:
echo "test"
今これを行うと、代わりless test
に、私が確認したところによると、他のファイルの出力は同じです。出力はless環境にあります(コンソールに戻るにはタップします)。test
echo "test"
q
修正する:そしてもう一つの迷惑な点は:
less imaginaryPathToNonexistingFile
- 動作しますが、同じ結果が出ます。 lessには一種のメモリがあります。ファイルを変更するたびに、私が開くディスプレイは、コンソールの下部のすぐ上にtest
来るまで画面上の1行下に移動します。filename(END)
修正するLESSOPEN
:set to |/usr/bin/lesspipe.sh %s
(thx vonbrand)という環境変数があることがわかりました。
#!/bin/sh -
#
# To use this filter with less, define LESSOPEN:
# export LESSOPEN="|/usr/bin/lesspipe.sh %s"
lesspipe() {
case "$1" in
*.[1-9n]|*.man|*.[1-9n].bz2|*.man.bz2|*.[1-9].gz|*.[1-9]x.gz|*.[1-9].man.gz)
case "$1" in
*.gz) DECOMPRESSOR="gunzip -c" ;;
*.bz2) DECOMPRESSOR="bunzip2 -c" ;;
*) DECOMPRESSOR="cat" ;;
esac
if $DECOMPRESSOR -- "$1" | file - | grep -q troff; then
if echo "$1" | grep -q ^/; then #absolute path
man -- "$1" | cat -s
else
man -- "./$1" | cat -s
fi
else
$DECOMPRESSOR -- "$1"
fi ;;
*.tar) tar tvvf "$1" ;;
*.tgz|*.tar.gz|*.tar.[zZ]) tar tzvvf "$1" ;;
*.tar.bz2|*.tbz2) bzip2 -dc -- "$1" | tar tvvf - ;;
*.[zZ]|*.gz) gzip -dc -- "$1" ;;
*.bz2) bzip2 -dc -- "$1" ;;
*.zip) zipinfo -- "$1" ;;
*.rpm) rpm -qpivl --changelog -- "$1" ;;
*.cpi|*.cpio) cpio -itv < "$1" ;;
*.gif|*.jpeg|*.jpg|*.pcd|*.png|*.tga|*.tiff|*.tif)
if [ -x "`which identify`" ]; then
identify "$1"
else
echo "No identify available"
echo "Install ImageMagick to browse images"
fi ;;
*)
case "$1" in
*.gz) DECOMPRESSOR="gunzip -c" ;;
*.bz2) DECOMPRESSOR="bunzip2 -c" ;;
esac
if [ ! -z $DECOMPRESSOR ] ; then
$DECOMPRESSOR -- "$1" ;
fi
esac
}
if [ -d "$1" ] ; then
/bin/ls -alF -- "$1"
else
lesspipe "$1" 2> /dev/null
fi
ベストアンサー1
あなたの問題は、lessコマンドのFAQページで解決されているようです(セクションを参照)。「.cshrc、.profile、またはENVファイルが出力を生成する場合、なぜ問題が発生するのですか?」):
LESSOPEN関数を使用している場合は、シェルに出力を生成させると他の問題が発生する可能性があります。 lessはLESSOPENフィルタを呼び出すためにシェルを使用するため、シェルの出力はフィルタプログラムの出力の先頭に表示され、ファイルの一部であるように見えます。