Ошибка при выполнении команды «sed», использующей переменные оболочки

Ошибка при выполнении команды «sed», использующей переменные оболочки

Это сводит меня с ума...

Я хочу вывести список файлов в каталоге и, основываясь на числе взаимодействий со всеми файлами, кроме последнего, вот фрагмент кода


FILECOUNT=$(ls -lt [dir]*.log | grep -c .log )
for (( c=2; c<=$FILECOUNT; c++ ))
do
FILEDIR=$("ls -1t [dir]*.log | sed -n '$c p'")

У меня возникли проблемы с $cинтерпретацией, формат выше работает, но команда sed не работает... хотя ввод последней строки журнала в cli работает как часы


 FILECOUNT=24

 (( c=2 ))

 (( c<=24 ))

C is : 2

 'ls -1t [dir]*.log | sed -n '\''2 p'\'''

 line 41: ls -1t [dir]*.log | sed -n '2 p': No such file or directory

Любая помощь будет высоко оценена!

очевидно, что [dir]это допустимый каталог

решение1

Основная проблема заключается в том, что вы заключаете все данные в подстановку команды в двойные кавычки:

FILEDIR=$("ls -1t [dir]*.log | sed -n '$c p'")

Это даст указание оболочке найти исполняемый файл сдословное название ls -1t [dir]*.log | sed -n '$c p'"и без аргументов, в отличие от выполнения команды lsс опциями -1tи операндом [dir]*.log, вывод которой должен быть передан исполняемому файлу sedс опцией -nи аргументом '$c p'. Попробуйте удалить двойные кавычки, как в

FILEDIR=$(ls -1t [dir]*.log | sed -n '$c p')

Однакото вы столкнетесь с проблемой, что расширение переменной отключено в вашей sedкоманде в одинарных кавычках. Одинрекомендуемый способзаключается в том, чтобы разорвать аргумент в одинарных кавычках и поместить переменную в междометие в двойных кавычках, как в

FILEDIR=$(ls -1t [dir]*.log | sed -n "$c"' p')

Также я должен вынести обязательное предупреждениене анализировать выводls. ;)

Связанный контент