ディレクトリを渡すときに内容を一覧表示しますが、ファイルの場合は内容を出力するコマンドはありますか?
たとえば、通常、ディレクトリ構造を検索すると、次の内容の入力が開始されます。
ll /etc/path/ # I see a file in tab-completion that interests me, called myfile.txt
ll /etc/path/myfile.txt # I do the auto-completion to get it into the command line
less /etc/path/myfile.txt # Now I have to go back and change 'll' to 'less'
またはファイルを探している場合は、まず始めましょう。
less /etc/path # I see in tab-completion several files that might interest me, so I need to know more
ll /etc/path # See more info about file sizes, etc, so I can choose the file I want. Have to change 'less' to 'll'
less /etc/path/myfile.txt # Now that I know which file I want, I have to go back and change 'll' to 'less'
これは私が一日に何十回もやっていることです。最も可能性の高いシナリオを満たすことができるコマンドやスクリプトはありますか?例えば
some-program /etc/path/to/file/or/directory
ターゲットがテキストファイルまたはテキストファイルへのシンボリックリンクの場合、「less /etc/path/to/.....」が実行されます。しかし、ディレクトリ、バイナリファイル、ブロックデバイスなどの他のものであれば、「ll /etc/path/to/...」を実行します。
もちろん、ファイルシンボリックリンクの「less」などの望ましくない操作を実行しますが、「ll」を使用してシンボリックリンク自体を表示したい場合は、手動で「ll」を実行できます。
そのようなことがありますか(おそらくそこにあります。一般的な作業のようです)?それとも私はLinuxコマンドラインを非効率的な方法で使用していますが、それを探索するより良い方法があるかもしれません...どうすればそれをしましたか?それとも、コマンドラインで「less」と「ll」の間を続けて行ったり戻ったりする唯一の人ですか?
some-program() {
if [[ $# > 1 ]]; then
echo "Only one argument supported at this time"
exit 1
fi
if [[ $# == 0 ]]; then
ELEMENT="."
else
ELEMENT="$1"
fi
if [[ -d $ELEMENT ]]; then
ls --color=auto -alF "$ELEMENT"
else
less "$ELEMENT"
fi
}
答え1
less
このようなことができる非常にきれいな組み込み関数があります。lesspipe
マニュアルページを参照してください。
この機能を使用してディレクトリのディレクトリリストを自動的に表示するには:
lesspipe
マニュアルページに従って設定してください。eval "$(lesspipe)"
~/.lessfilter
以下を使用して作成し、実行可能にします。#!/bin/sh if [ -d "$1" ]; then ls -alF "$1" else # We don't handle this format. exit 1 fi exit 0
lesspipe
これにより、ファイル形式を処理するために実行中のフィルタスクリプトが設定されます。表示するものがディレクトリであることを確認し、ディレクトリであればls
実行します。
あなたの初期リクエストには色が含まれています。残念ながら、less
デフォルトでは色が表示されず、フィルタスクリプトの出力がまだパイプに接続されているため、これは少し難しいですless
。-R
これを行うには、デフォルトのオプション(バイナリを見ている場合は良い考えではないかもしれません)を使用する必要があります。 lessfilterスクリプトにless
新しいオプションを追加するように指示する方法がないと思います。