Не мог присвоить вывод команды переменной

Я пытаюсь присвоить последнее имя файла, полученное из ниже команды ls, но получаю некоторую ошибку, было бы очень хорошо, если кто-то может ответить, как может я фиксировать это!

fn=`ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1`

или

fn=$(ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1)

Ошибка добралась:

ls: 0653-341 The file pur_bom_interface_daily*.log does not exist

Примечание: pur_bom_interface_daily*.log Я использую * с тех пор существует несколько файлов, начинающих их имя с pur_bom_interface_daily и связанный с датой, в которую они создали.

0
задан 25 August 2014 в 17:09

2 ответа

Ваша вторая строка сценария должна работать, если файлы pur_bom_interface_daily*.log не существуют в Вашем текущем рабочем каталоге. Для доказательства это пробует этот блок примера кода:

mkdir logfiles
cd logfiles
touch log-{1..4}.log
fn=$(ls -lrt log-*.log)
echo "$fn"

результаты последней команды должны перечислить 4 новых файла журнала, что Вы сделали использование touch.

блок примера кода должен также работать при замене четвертой строкой с:

fn=$(ls -lrt log-*.log | cut -c1-59 | tail -4)

..., хотя Вам, возможно, придется измениться 59 на различное число для вывода каждой строки, чтобы быть значимой длины (59 длина каждой строки вывода в вышеупомянутой строке кода).

1
ответ дан 7 October 2019 в 05:05

Используя обратные галочки присвоит все stdout к Вашей переменной с пробелами между каждым аргументом, пробелы в именах файлов завинчивают это. Чтобы добраться сначала или продлиться канал в голову или хвост, попробуйте:

fn=`ls -rt -1 * | tail -1`

Опция -1 на ls является одним файлом на строку. Опция -1 на tail является последней строкой только.

0
ответ дан 7 October 2019 в 05:05

Другие вопросы по тегам:

Похожие вопросы: