
ls -l
カスタム列でコマンドを変更できるかどうか疑問に思います。
たとえば、この列に$(CustomCommand FILE)
。
答え1
これは非常に基本的な概念証明です。特に強力ではありませんが(たとえば、空白のあるファイル名は壊れる可能性があります)、アイデアを得ます。
$ export CustomCommand=file
$ alias ls=/tmp/test/myls
$ ls
a b c myls
$ ls -l
-rw-rw-r-- 1 steve steve 0 Sep 22 19:17 a a: empty
-rw-rw-r-- 1 steve steve 0 Sep 22 19:17 b b: empty
-rw-rw-r-- 1 steve steve 0 Sep 22 19:17 c c: empty
-rwxr-xr-x 1 steve steve 127 Sep 22 19:18 myls myls: POSIX shell script, ASCII text executable
$ cat /tmp/test/myls
#!/bin/sh
if [ "$1" = "-l" ]
then
shift
ls -l $* | awk 'NF>2{ printf "%s ",$0 ; system("$CustomCommand " $NF) }'
else
ls $*
fi
$
答え2
Paste、sed、lsを組み合わせてbashrcに保存する方法です。これには2つの主要部分があります。
- ここで、「custom_command」はパラメータを受け入れますが、渡された各パラメータに「YYY」を追加し、「ZZZ」を追加します。 OPの実際のCustomCommandだけでなく、他のタスクも実行します。
- custom_command への呼び出しを含む「ls1」というエイリアス。私たちはまだ「ls」に依存しているので、「ls」との競合を避けるために「ls1」という名前を付けます。
したがって、~/.bashrcに以下を追加してください。
custom_command ()
{
for i; do
echo "YYY${i}ZZZ"
done
}
alias ls1='paste <( ls -lh | sed 1d ) <( custom_command * )'
次に、. ~/.bashrc
現在の端末に適用するようにします。
現在のディレクトリに 'dir1' 'file1' 'file2' と 'file 3' (空白のファイルテスト) が含まれている場合は、エイリアスを実行して次のことをls1
確認できます。
$ ls1
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1 YYYdir1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1 YYYfile1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2 YYYfile2ZZZ
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3 YYYfile 3ZZZ
説明する
custom_command ()
{
for i; do
echo "YYY${i}ZZZ"
done
}
- 何も指定しないと、
for i
forループは位置引数を使用します。 - i 変数を区別するには中かっこが必要です。それ以外の場合、bashは$ iZZZを変数として誤って解釈します。
出力例:
$ custom_command a b c
YYYaZZZ
YYYbZZZ
YYYcZZZ
*
Bash拡張で使用する場合:
$ custom_command *
YYYdir1ZZZ
YYYfile1ZZZ
YYYfile2ZZZ
YYYfile 3ZZZ
"ls -lh"は通常、次のことを行います。
$ ls -lh
total 16K
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3
sedを使用してください。 1 は行 1 を意味し、d は削除を意味し、最初の行を削除します。
$ ls -lh | sed 1d
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3
手続き的paste
およびプロセス置換は、これらの別々<(...)
の出力を組み合わせるための鍵です。 Pasteには通常、ファイルが引数として必要ですpaste data1 data2
。たとえば、bashのプロセスオーバーライドを使用するため、コマンドの出力は利用可能な一般ファイルとして表示されます。
$ paste <( ls -lh | sed 1d ) <( custom_command * )
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1 YYYdir1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1 YYYfile1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2 YYYfile2ZZZ
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3 YYYfile 3ZZZ
bashrcを使用してこのコマンドを保存すると、新しい. ~/.bashrc
端末または再ロードバスを実行している既存の端末で簡単に再利用できます。