сокращение, не производящее что-либо

Я создал сценарий при помощи командной строки первоначально:

grep -c "Author" reviews_folder/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'

Это работало, однако я затем должен был сделать это сценарием оболочки, который позволил пользователю вводить каталог для него для поиска, таким образом, я изменил его на:

grep -c "Author" $1/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'

После того, как это было завершено, а не работа сценария, она просто распечатала много пустых строк.

2
задан 29 June 2019 в 19:27

1 ответ

Я предполагаю, что Вы запускаете свой скрипт как: script.sh dir/ или bash script.sh dir/.

Путем Вы передаете каталог, вызывает проблему.

В Вашем сценарии Вы получили a grep команда:

grep -c "Author" $1/*

Если Вы передаете каталог с концом наклонной черты, grep команда была бы выполнена как:

grep -c "Author" dir//*

Пример:

grep -c "Author" dir//somefile.dat dir//someother-file.dat

И его результат был бы подобен:

dir//somefile.dat:5

И Ваш cut команда только возвратила бы пустую строку и передала бы ее sort:

dir//somefile.dat:5   # < You are asking for second part which is empty

Таким образом, любой запускает Ваш скрипт как: script.sh dir или измените его на что-то вроде этого:

#!/bin/bash

DIR=${1%/}
grep -c "Author" ${DIR}/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'
1
ответ дан 2 December 2019 в 04:38

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

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