Ваш код оболонки має два випуски:
- Там
echo
не повинно бути.
- Змінна
$i
введена неправильно, як $1
у назві файла призначення.
Щоб зробити копію файлу в тому ж каталозі, що і сам файл, використовуйте
cp thefile thecopy
Якщо ви вставите щось інше туди, напр
cp thefile theotherthing thecopy
то передбачається, що ви хочете скопіювати thefile
і theotherthing
в каталог, який називається thecopy
.
У вашому випадку він спеціально шукає файл з назвою test.ogg
та ім'ям echo
для копіювання в каталог test$1.ogg
.
$1
, Швидше за все , розшириться до порожньому рядку. Ось чому при видаленні команди echo
з команди ви отримуєте "test.ogg і test.ogg - ті самі файли"; команда, що виконується, по суті
cp test.ogg test.ogg
Це, мабуть, непорозуміння.
Зрештою, ви хочете щось подібне:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Або, як альтернатива
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Або, використовуючи tee
:
tee test{1..100}.ogg <test.ogg >/dev/null
Примітка. Це, швидше за все, може працювати в 100 примірниках, але для тисяч примірників це може призвести до помилки "аргумент задовго". У цьому випадку поверніться до використання циклу.
echo
чого там не повинно бути, а$1
яке має бути$i
?