Я записал функцию pvim
который делает то, что Вы хотите. Если несколько строк передаются по каналу к pvim
это игнорирует все кроме первого, это могло быть расширено, хотя открыть несколько файлов в энергии.
stu@sente ~ $ function pvim() { read -r somefile; exec < /dev/fd/1; vim "$somefile"; }
stu@sente ~ $ type pvim
pvim is a function
pvim ()
{
read -r somefile;
exec < /dev/fd/1;
vi "$somefile"
}
Используйте его как:
stu@sente ~ $ find . -name "foo.txt" | pvim
который загрузит первый "foo.txt" в энергию так же, как если бы Вы ввели:
vim $(find . -name "foo.txt | head -n1")
Вы, вероятно, выполняете неправильную команду.
who
предназначен для показа, кто зарегистрирован, т.е. какой пользователь владеет терминалом. Это возвращает строку как это:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
является средним, чтобы показать Вам, что эффективный идентификатор пользователя имеет человека, выполняющего его. Это возвращает просто единственное имя, как это (и эквивалентно выполнению id -un
):
ckhan
Я думаю, что Вы, возможно, буквально ввели who am i
на терминале, который работал who
с двумя проигнорированными аргументами (am
, i
).
Посмотрите man who
и man whoami
для получения дополнительной информации.
На мою страницу справочника Ubuntu 12.04.2 для, 'кто' управляет, 'кто я' (или кто с любыми двумя аргументами) совпадает с, 'кто-m' и должен дать Вам имя хоста и пользователя, связанного с STDIN. Однако я не получаю вывода с, 'кто я'. Или страница справочника является неправильной или команда, имеет ошибку. Независимо, как ранее отвечено ckhan, команда 'whoami' даст Вам имя пользователя для Вашего эффективного идентификатора пользователя. По крайней мере, в Ubuntu 12.04.2, ни один из идентификатора, 'то, кто я' или 'whoami', даст Вам просто имя пользователя человека, не вошел в систему на текущем терминале. Как обходное решение Вы могли получить это с:
who | sed 's/ .*//'
Обходной путь:
ls -l `tty` | awk '{print $3}'
, который работает как замена who am i | awk '{print $1}'
. Пояснение ниже:
Во многих системах "who am i
" эквивалентно "who -m
". Проблема здесь в том, что с некоторыми терминалами "who -m
" ничего не возвращает!
Пример #1 запуск с терминала xfce4 -
Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ #
но Пример #2 из гнома -терминал (тот же компьютер, те же команды)
Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ #
Похоже, это следствие того, что терминал gnome -не добавляет записи utmp…
В моем случае пользовательская оболочка была /bin/false
в /etc/passwd, поэтому su не возвращала ошибку. Другими словами, su somebody
завершился без ошибок, и я все еще был пользователем root, а не кем-то еще.
Решение было su somebody -s /bin/bash
или любой другой оболочкой, которую вы хотите. И тогда, очевидно, whoami
работает так, как ожидалось.
am
иi
не проигнорированы, они даже указаны POSIX: "В локали POSIX ограничьте вывод описанием пользователя вызова, эквивалентного-m
опция". – xhienne 20.08.2017, 22:53