Когда Вы работаете google-chrome
, процесс обнаруживает, что существует открытый экземпляр Chrome и отправляет ему сообщение для открытия файла. Сообщение содержит имя файла. Firefox работает таким же образом. Процесс это запускается с оболочки, не является уже рабочим процессом браузера.
<(…)
создайте работы путем создания неименованного канала. Это передается команде с именем как /dev/fd/42
, значение “файла это уже открыто на дескрипторе 42”. К этому файлу может только получить доступ процесс, который был запущен для выполнения командной строки, не уже рабочим процессом браузера.
Для передачи данных рабочему процессу браузера данные должны быть в файле с именем, к которому могут получить доступ оба процесса. С Firefox можно использовать именованный канал:
mkfifo f
grep "simple" SimpleDoc.txt >f &
firefox f
rm f
Chrome, кажется, не может читать из канала, таким образом, необходимо создать временный файл. Вы могли бы также сделать это для Firefox также.
В zsh, различный процесс susbtitution конструкция =()
создает временный файл.
google-chrome =(grep "simple" SimpleDoc.txt)
В ударе необходимо создать временный файл вручную.
tmp=$(mktemp)
grep "simple" SimpleDoc.txt >$tmp
google-chrome "$tmp"
rm "$tmp"
Обратный слеш является экранирующим символом в синтаксисе оболочки , который:
должен сохранять буквальное значение следующего символа, за исключением
. ... <обратная косая черта> ... будет удалено
Так что \S
означает то же самое, что и S
, поскольку S
не является символом новой строки, а также не является специальным символом оболочки, который может быть удален ($
), "
, '
, {
, [
, `
, \
, |
, &
, ;
, <
, >
, (
, )
, ?
, *
, [
, #
, ~
, =
, %
, , или табуляция). Для включения буквального обратного слеша в аргумент, переданный в
echo
, необходимо по очереди экранировать его с помощью \
или любого другого оператора кавычки:
echo \\Smith
или
echo '\Smith'
или
echo "\Smith"
(\
по-прежнему сохраняет особое значение в двойных кавычках, но не в тех случаях, когда за ними следует S
, а только в тех случаях, когда за ними следует \
, `
, $
, "
или нью-лайн).
Теперь многие реализации echo
также обращаются к \
специально, когда они находятся в их аргументе (хотя обычно не сопровождаются S
, хотя нет гарантии), поэтому вы можете захотеть использовать printf
вместо:
printf '%s\n' '\Smith'
примечание: это указанное поведение для вашего примера без кавычек, но оно может измениться, если оно процитировано иначе или прочитать
из файла
\S
ускользает от S
, что не является особым характером, таким образом, дает S
. Чтобы распечатать его, необходимо удвоить обратный слеш: echo \\Smith
EDIT: Но в целом, лучше использовать printf
. См. разницу между echo x\\by
, которая выводит "y" (буква "x" перезаписывается обратным пробелом \b
) с некоторыми версиями echo
(тире, zsh), и printf "%s\n" x\\by
, которая выводит "x\by".