Помилка неоднозначного перенаправлення для простого відлуння


0

Я натрапив на диваку, коли виконував простий echo команду. Чи можна пояснити, що відбувається? Ось сценарій, є точно три файли в папці, і я хочу замінити їх вміст пустим символом. Файли:

ev_tracker.css  ev_tracker.html  ev_tracker.js

Я спробував просту команду, щоб повторити пробіл у всіх файлах

$ echo \  > *

і я отримав таку помилку:

bash: *: ambiguous redirect

Отже, я намагався бути більш конкретним ...

$ echo \  > ev_tracker.*
bash: ev_tracker.*: ambiguous redirect

А ще конкретніше…

$ echo \  > ev_tracker.{css,html,js}
bash: ev_tracker.{css,html,js}: ambiguous redirect

Нарешті, я виконав дію на кожному файлі, окремо, без помилок.

$ echo \  > ev_tracker.css
$ echo \  > ev_tracker.html
$ echo \  > ev_tracker.js
$

Хто-небудь може пояснити, чому я отримав помилку? Я використовую Ubuntu 14.04 і будь-який типовий sh Варіант, який він мав би.


Таким чином, ви повторюєте зворотну косу риску, не вилучаючись (так що це буде порожнім) для файлів, так що просто лунайте кожен файл окремо, а не використовуйте символи, і він повинен працювати. В іншому випадку вам може знадобитися побудувати цикл або масив, щоб зробити це для всіх один за одним таким чином з ітераціями. мабуть, інакше він не може зрозуміти один за одним.
Pimp Juice IT

Вихід для переадресації єдине місце призначення . Якщо ви подаєте три різних назви файлів як один пункт призначення, оболонка буде скаржитися. (і з цим не можу сперечатися, 3! = 1).
Hennes

Право на, @hennes, я просто дивувався, що & gt; операція не могла зрозуміти, що за допомогою шаблону я хотів, щоб висновок відправлявся до всіх трьох файлів. однак, тепер, коли я знаю, що він очікує, що одна ціль, я буду впевнений, що такі дії в майбутньому, або використовувати трійник, як зазначено нижче.
Madcarrots

Відповіді:


2
echo a > *

буде розширено на bash на

 echo a > ev_tracker.css ev_tracker.html ev_tracker.js

згідно з man bash (REDIRECTION)

Слово, що слідує оператору перенаправлення в наступних описах, якщо не зазначено інше, піддається (...) розширенню шляху (...)

Якщо він розширюється до більш ніж одного слова, bash повідомляє про помилку.

можна використовувати

echo a | tee * > /dev/null

подивитися man tee, команда команди призначена для того, щоб робити те, що ви шукаєте.

Відзначимо також, що

echo \ | tee * > /dev/null

волі ні вивести зворотну косу риску до файлів.


дякую, @archemar, це, здається, найбільш інформативна відповідь; я не знав, що & gt; може бути направлено лише до однієї мети. що стосується вашої нотатки, я посилав порожній простір до файлів; Я не впевнений, що надіслане питання точно відображає обидва символи простору після зворотного слеса в моїй початковій команді.
Madcarrots

-2

Ви просто не можете це зробити:

$ echo ' ' > ev_tracker*

Згідно з коментарем нижче, це те, що я зробив.

$ touch bla blaa blaaa
$ echo ' 1' > bla*
$ cat bla
 1
$ cat blaa
 1
$ cat blaaa
 1

Він працює тільки з простором, але це важко показати.


Я перевірив його на своїй машині він працює, я використовую arch-linux.
mstruebing
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.