Как я могу отправлять символы в команду, как если бы они были получены из файла?

Обычно (автоматически) смонтированные диски находятся в /media. Поэтому, чтобы cd на ваш диск, вы должны:

cd /media/

То же самое относится и к другим командам, например:

find /media//

Подробнее здесь.

22
24.01.2017, 03:28
5 ответов

В оболочках, поддерживающих здесь строки , включая bash , zsh и ] ksh93 , вы можете использовать

wc <<< "apple pear orange"
32
27.01.2020, 19:42

Два других подхода (которые позволяют вводить несколько строк без дополнительных усилий):

  1. Используйте «здесь документ»:

     $ wc << EOF 
    яблоко груша апельсин 
    EOF 
    1 3 18 
     $ 

    Строка EOF является разделителем. Вы можете использовать любую строку; EOF - это обычный выбор.

  2. Используйте tty в качестве входных данных:

     $ wc 
    яблоко груша апельсин 
      Ctrl  +  D  
    1 3 18 
     $ 

    У этого есть недостаток, заключающийся в том, что программа запускается, и начинает читать ввод, как только вы вводите ее имя. Это может сбивать с толку; например:

     $ grep v 
    Быстрая коричневая лиса  (напечатано)  
    перепрыгивает через  (напечатано)  
    перепрыгивает  (Вывод команды grep!) ​​
     ленивый пес.  (напечатано) 
     Ctrl  +  D  
      (здесь нет вывода)  
     $ 
18
27.01.2020, 19:42

Возможно, вы захотите использовать что-то подобное, чтобы ожидать. Ниже приведен простой пример открытия удаленного сеанса telnet, ожидания запроса, отправки некоторых данных, ожидания ответа, сна и выхода.

#!/usr/bin/expect
spawn telnet localhost 8555
expect "Escape character is '^]'."
send "Hello World\n"
expect "Connection closed by foreign host."
sleep 1
1
27.01.2020, 19:42

вы можете использовать трубу

echo "apple pear orange" | wc
8
27.01.2020, 19:42

Хотя здесь есть несколько правильных решений, другой синтаксис, который иногда может быть полезен, - это выполнение команды в <(). Это позволит вам создать более одного объекта файлового дескриптора в командной строке.

Это может быть полезно, когда вы делаете что-то вроде сравнения длинных строк текста, или если вы хотите сравнить содержимое, которое не находится в файле.

Например, сравнение файлов hosts на двух узлах без необходимости копировать файл hosts на localhost:

diff -Naur <(cat /etc/hosts) <(ssh -q otherhost 'cat /etc/hosts')

Символ < перенаправляет файл на STDIN, а () создает подпрограмму для выполнения команды между скобками. Именно STDOUT из подпрограммы передается в STDIN выполняемой команды.

Это более простой способ создать более одного входного "файла" для команды, чем пытаться использовать несколько here docs, или пытаться передать несколько команд в конвейер для конечной команды.

10
27.01.2020, 19:42

Теги

Похожие вопросы