Манипулирование строками в оболочке bash - PullRequest
1 голос
/ 20 мая 2011

Я использую сценарий для перемещения определенного файла из одного места в другое, который извлекает это имя из файла журнала. Когда я запускаю эту команду в командной строке, все в порядке.

Example: When I run this command:

tail -2 /pretupsvar/pretups_weblogs/DirectPayOutErrorLog.log |
    grep 'MESSAGE: SQL Exception:Invalid column index' |
    sed 's/.*FILE NAME: //;s/].*//;s/ /\\ /g'

вывод:

userList1305816669650_PB_PBZONE_DLMP_RLMP_ETOPUP_WEEL\ ONE\ PAYOUT.xls

However, when I run this command:

cp `tail -2 /pretupsvar/pretups_weblogs/DirectPayOutErrorLog.log |
    grep 'MESSAGE: SQL Exception:Invalid column index' |
    sed 's/.*FILE NAME: //;s/].*//;s/ /\\ /g'` /pretupshome/

вывод:

cp: cannot stat `userList1305816669650_PB_PBZONE_DLMP_RLMP_ETOPUP_WEEL':
    No such file or directory
cp: cannot stat `ONE': No such file or directory
cp: cannot stat `PAYOUT.xls': No such file or directory

Actually, I do the same in script which is like:

fname=`tail -2 /pretupsvar/pretups_weblogs/DirectPayOutErrorLog.log |
    grep 'MESSAGE: SQL Exception:Invalid column index' |
    sed 's/.*FILE NAME: //;s/].*//;s/ /\\ /g'`

mv /pretupsvar/pretups_weblogs/BulkComissionPayout/UploadOffline/$fname
    /pretupsvar/pretups_weblogs/BulkComissionPayout/Errorfile/

Но он не может переместить этот файл, показывая ту же ошибку в выше.

Пожалуйста, помогите мне: как я могу переместить то же самое в сценарии?

Ответы [ 2 ]

5 голосов
/ 20 мая 2011

Попробуйте поместить его в кавычки:

fname=`tail -2 /pretupsvar/pretups_weblogs/DirectPayOutErrorLog.log |
    grep 'MESSAGE: SQL Exception:Invalid column index' |
    sed 's/.*FILE NAME: //;s/].*//'`

mv "/pretupsvar/pretups_weblogs/BulkComissionPayout/UploadOffline/$fname"
    /pretupsvar/pretups_weblogs/BulkComissionPayout/Errorfile/

Путь /pretupsvar/pretups_weblogs/BulkComissionPayout/UploadOffline/$fname имеет пробелы при разрешении.

Я думаю, что помещение этого утверждения в кавычки должно сработать.

0 голосов
/ 20 мая 2011

Я думаю, вам не следует заменять пробел (s/ /\\ /g), если вы хотите выполнить свою команду таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...