cmd2 `cmd1` vs cmd1 | xargs cmd2

Я пытаюсь найти файл с find а затем передать найденный путь к sqlite3 . Я просто sqlite> подсказку sqlite> если моя команда имеет форму:

 sqlite3 `find . -type f -iname "*.db" | head -n1` 

Но эти формы не работают:

 find . -type f -iname "*.db" | head -n1 | xargs sqlite3 find . -type f -iname "*.db" | head -n1 | xargs -I% sh -c 'sqlite3 %;' 

Почему последние команды просто ничего не делают?

One Solution collect form web for “cmd2 `cmd1` vs cmd1 | xargs cmd2”

В:

 ... | xargs cmd 

в зависимости от реализации, stdin cmd – либо /dev/null либо этот канал. Это не может быть внешним stdin, поскольку это потеряно из-за трубопровода.

 $ echo /proc/self/fd/0 | gnu-xargs ls -ld lr-x------ 1 me me 64 Dec 11 22:04 /proc/self/fd/0 -> /dev/null $ echo /proc/self/fd/0 | busybox-or-solaris-...-xargs ls -ld lr-x------ 1 me me 64 Dec 11 22:04 /proc/self/fd/0 -> pipe:[99839] 

В любом случае sqlite3 не сможет читать какие-либо данные от вас.

:

 sqlite3 `find . -type f -iname "*.db" | head -n1` 

команда берет первую строку первого пути к файлу, возвращаемого find , разбивает его по $IFS , выполняет подтачивание на них и передает полученные слова в виде различных аргументов sqlite3. Это мало смысла.

С GNU find (возможно, что вы используете с тех пор, как вы используете -iname ):

 sqlite3 "$(find . -type f -iname "*.db" -print -quit)" 

Мы используем -exit чтобы сказать find для выхода после печати первого найденного файла. Мы используем современную форму подстановки команд $(...) и пропускаем часть split + glob (что не имеет смысла), цитируя подстановку команд.

Вы также можете использовать (по-прежнему GNU):

 find . -type f -iname '*.db' \( -exec sqlite3 {} \; -o -true \) -quit 

(хотя вы потеряете статус выхода sqlite3 ).

С zsh :

 setopt extendedglob # best in ~/.zshrc sqlite3 ./**/*.(#i)db(D.[1]) 
  • Использовать xargs вместо псевдонимов
  • Выполнение одной и той же команды с разными аргументами параллельно
  • Используйте команду find для выполнения ряда команд
  • Пропустить входной файл через трубу в качестве аргумента?
  • ssh-add добавить все закрытые ключи в .ssh каталог
  • Как я могу предотвратить использование аргументов аргументов `xargs` в префиксах пробелами?
  • Удаление некоторых из самых больших файлов в каталоге
  • Использует xargs быстрее, чем не использует его?
  • Передача параметров mulitiple через xargs
  • использование измененного содержимого файла в качестве аргументов
  • Внутренний вызов функции с параметрами xargs
  • Interesting Posts

    Как Gnome (Cinnamon) находит значок исполняемого двоичного файла?

    Декодировать / суммировать журналы strace

    Распространяется дистрибутив Debian с Openbox

    Не удается найти работу mysql на crouton, ubuntu exact

    Невозможно изменить шлюз по умолчанию со статическим IP-адресом

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

    Как обновить Apache, чтобы позволить Pseudostreaming на CENTOS 5.5 & WHM

    Linux графические библиотеки 3D

    Как logctl подписывает журналы, если «ключ проверки должен храниться извне»??

    Как заменить определенный текст на соответствующий номер строки с помощью sed?

    Как установить Arch Linux на ноутбук с Intel GMA 4500 MHD?

    Невозможно смонтировать файловую систему под luks. Устройство не существует

    Не удается получить доступ / передача

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

    Как я могу быстро убить процесс CPU / IO?

    Linux и Unix - лучшая ОС в мире.