На мою страницу справочника Ubuntu 12.04.2 для, 'кто' управляет, 'кто я' (или кто с любыми двумя аргументами) совпадает с, 'кто-m' и должен дать Вам имя хоста и пользователя, связанного с STDIN. Однако я не получаю вывода с, 'кто я'. Или страница справочника является неправильной или команда, имеет ошибку. Независимо, как ранее отвечено ckhan, команда 'whoami' даст Вам имя пользователя для Вашего эффективного идентификатора пользователя. По крайней мере, в Ubuntu 12.04.2, ни один из идентификатора, 'то, кто я' или 'whoami', даст Вам просто имя пользователя человека, не вошел в систему на текущем терминале. Как обходное решение Вы могли получить это с:
who | sed 's/ .*//'
Определите функцию оболочки, которая выводит конец строки после каждого файла и использует его вместо cat
:
endlcat() {
for file in "$@"; do
cat -- "$file"
echo
done
}
тогда вы можете использовать endlcat *
.
Цикл for
перебирает все предоставленные аргументы ( $ @
), которые уже экранированы оболочкой при использовании подстановочных знаков типа *
. -
требуется, чтобы не подавлять имена файлов, начинающиеся с тире. Наконец, echo
выводит новую строку.
Если вы хотите, чтобы имя файла было между файлами, используйте tail
:
tail -n +1 ./*
(Если вы хотите tac
вместо cat
], некоторые реализации хвоста
имеют параметр -r
для эквивалентного tac
функционала)
Просто используйте цикл вместо простого cat
:
for file in /path/to/targetdir/*; do
echo "-------- $file -------"
cat "$file"
done
Подобно ответу @terdon , если вы предпочитаете видеть имя файла и в будущем, вы можете использовать head
команда:
$ head *file*
==> file_1 <==
file 1 content
==> file_2 <==
file 2 content
==> file_3 <==
file 3 content
head
по умолчанию использует первые 10 строк, поэтому использование ее без параметров команды для вашего случая (одно предложение на файл) вполне нормально. В противном случае вам понадобится опция -n X
.
Это будет работать:
sed '' -- *
Вам не нужны никакие циклы оболочки или что-то еще, и это всегда будет следовать за выводом файла с \n
ewline - за исключением, возможно, самого последнего.
Иначе, если вы хотите, чтобы между выводами каждого файла выводилась пустая строка, это может сработать:
bpaste(){
eval "paste -'sd\n' -- $(x=0;for f do printf "\"\${$((x+=1))}\" - ";done)"
} </dev/null
Это всегда будет следовать за выводом файла с \n
ewline и дополнительной пустой строкой.
Вы можете назвать это так:
bpaste *
Другой способ - использовать grep -h
для простого поиска пустой строки в каждом файле. Это будет соответствовать всем строкам, независимо от того, сколько строк завершается символом новой строки или нет. Результаты grep всегда заканчиваются новой строкой. Параметр -h
подавляет префикс каждой строки вывода с именем файла, из которого оно было получено:
$ printf 'a' > a
$ printf 'b\nB' > b
$ printf 'c\n' > c
$ ls
a b c
$ cat -- *
ab
Bc
$ grep -h '' *
a
b
B
c
$
Или вы можете использовать GNU paste
в -s
erial mode с новая строка в качестве разделителя:
$ paste -s -d '\n' -- *
a
b
B
c
$