2010-01-24 2 views
2

Если предположить, что:О составе команды Linux

  1. путь файла F является ~/F
  2. "который ф" показывает "~/п",

Затем

which f | cat~/f. Таким образом, cat здесь применяется к котировке ~/f, которая отличается от cat ~/f.

Мой вопрос: как я мог использовать одну команду из which и cat для достижения результата cat ~/f? Когда я не знаю результат which f заранее, использование этой композиции может быть очень удобным. В настоящее время, если я не знаю результат which f заранее, я должен сначала вызвать which f, а скопировать-вставить результат для подачи less.

Связанный вопрос: как я могу присвоить результат which f переменной?

Большое спасибо!

+0

Спасибо всем! – zzhang

ответ

0

Как и в bash:

cat "$(which f)" 
var="$(which f)" 
2

Try:

cat `which ~/f` 

Для связанный с этим вопрос:

foo=`which ~/f` 
echo $foo 
0

В bash, вы можете использовать:

cat "$(which f)" 

для вывода содержимого f что which находок. Это, как и обратное решение, выводит команду команды в пределах $(...) и использует это как параметр для команды cat.

Я предпочитаю метод $(...) методу обратной связи, так как первый может быть вложен в более сложные ситуации.

Назначение выхода which к переменной выполняется аналогично:

full_f="$(which f)" 

В обоих случаях лучше использовать кавычки в случае f, или это путь, содержит пробелы, а гнусное, как преступление :-)

Я часто использовал подобный трюк, когда я хочу, чтобы изменить небольшую группу файлов с похожими названиями при данном подкаталоге:

vim $(find . -type f -name Makefile) 

, который даст мне одну сессию vim для всех make-файлов (очевидно, если бы было большое число, я бы использовал sed или perl, чтобы изменить их в masse вместо vim).

0

В which f | cat программа cat получает выход which f на стандартном входе. Затем он просто пропускает этот стандартный ввод, поэтому результат будет таким же, как и обычный which f. В вызове cat ~/f данные передаются в качестве параметра в команду. cat затем открывает файл ~/f и отображает его содержимое.

Чтобы получить выход which f в качестве параметра cat вы можете, как и другие ответили, используйте кавычку или $():

cat `which f` 
cat $(which f) 

Здесь оболочка берет выходной which f и вставляет его в качестве параметра для cat.

0

cat echos содержимое файлов на стандартный вывод. Когда вы пишете stuff | cat, файл cat работает на стандартном входе, который подключен к выходу stuff (потому что трубы - это файлы, как и все остальное в unix).

Не существует цитирования в том смысле, что программист lisp использовал бы это слово.

+0

Да, я действительно думал о Лиспе :-) – zzhang

Смежные вопросы