Как определить, какой параметр передается команде с оператором перенаправления?

Моим всем фаворитом времени является, вероятно, "Sudo xkcd, делают меня тестовым" комиком, но существует СТОЛЬКО хороших webcomics там, что я думал, что выведу некоторых других для забавы:

коллега А указал на меня на Палки и Камни , который просто начал симпатичный недавно. Это - вид xkcd грабежа, но там существует некоторый хороший материал. сопроводительный текст http://www.arcanology.net/sticksandstones/comics/comic-10.gif

Перья часто о программировании. Это, вероятно, мой фаворит: Перья, Drake Emko & Jen Brodzik http://hackles.org/strips/cartoon334.png Это - не совсем комик программирования, но я также действительно вырыл эту полосу от Полный Лобный Nerdery:

Полный Лобный Nerdity Aaron Williams http://nodwick.humor.gamespy.com/ffn/strips/2008-03-12.jpg

8
задан 20.05.2020, 06:12

2 ответа

Вы используете две разных вещи здесь и должны использовать одну треть.Давайте посмотрим:

  1. |: Это канал оператор, он служит для передачи вывода одного процесса, как введено другому:

    foo | bar
    

    Это выполняет программу foo и передает ее вывод как вход к программе bar.

  2. >, <, >> и <<: Это операторы перенаправления , они служат для отправки данных в [1 141] файлы :

  3. <<< оператор, Здесь Строка , похож Здесь Документ, но это разворачивает переменные. Так, например:

    grep foo <<< "$bar"
    

    команда выше эквивалентна [1 126].

  4. то, Что Вы на самом деле ищете, называют замена процесса и является другим способом передать вывод команды другому. Это состоит из [1 127].

    foo <(bar) 
    

    Так, для Вашего at пример, Вы могли сделать

    at now < <(echo "notify-send HELLO")
    

    вышеупомянутые работы, потому что замена процесса на самом деле создает файл (прочитайте ссылку выше для получения дополнительной информации), и это - дескриптор файла того файла, который передается с [1 129] [1 130].

<час>

<глоток> 1 поведение по умолчанию должно перезаписать, это может быть изменено путем установки noclobber опция колотить. Если установлено, echo foo > bar перестанет работать, если bar будет существовать. В этом случае это может быть вызвано с помощью [1 134] вместо этого. Посмотрите раздел 3.6.2 здесь .

0
ответ дан 20.05.2020, 06:12
  • 1
    Вы могли также расшириться для включения некоторой информации [приблизительно 110] и <<< (который @steeldriver упомянул в его ответе). Кроме того, там более - что-то как >>>>>> или <<<<<<<<<<? – Dan Robertson 20.05.2020, 06:13
  • 2
    @steeldriver aww, скорлупки, спасибо:) И так был это под ценившим драгоценным камнем. Мне жаль, что я, возможно, не дал Вам +1 для каждой из различных ловушек, которых тихо избегает Ваше решение. – zero_coding 20.05.2020, 06:13
  • 3
    @Aditya сделан. И don' t беспокойство, это останавливается в <<<:) – Dan Robertson 20.05.2020, 06:13
  • 4
    Хороший ответ! очень полный (особенно включая различия между редиректорами файла) – Dan Robertson 20.05.2020, 06:14

В этом случае, echo "notify-send HELLO" процесс не файл - таким образом, Вам нужно замена процесса , а не перенаправление файла

at now < <(echo "notify-send HELLO")

, Вы, возможно, также использовали здесь строка для предотвращения эти echo команда полностью

at now <<< "notify-send HELLO"
0
ответ дан 20.05.2020, 06:13
  • 1
    @terdon: то же самое для гольфистов жемчуга? – zero_coding 20.05.2020, 06:13
  • 2
    Видя вид вопросов, которые Вы склонны любить (те же я делаю) я думаю, что необходимо провести еще некоторое время на Unix & Linux . Мы живем и умираем за прохладные приемы оболочки там.. – chepner 20.05.2020, 06:14
  • 3
    @SylvainPineau ох да. Очень так:). Серьезно, вид вопроса, которым Вы, steeldriver и я наслаждаюсь, намного более распространен там. Место полно фанатов командной строки [приблизительно 110] из , кого нелепо хорошо осведомлены. – Zandor Smith 20.05.2020, 06:14