Назначение переменных Bash - PullRequest
0 голосов
/ 18 июля 2011

У меня есть базовый скрипт для редактирования файлов конфигурации в ~ / .config - он работает со строками cd, но это выглядит избыточно:

dir=$HOME/.config/$1
if [ ! -d "$dir" ]; then :
    else 
    cd "$dir" && 
    for file in * ; do
        case "$file" in
        conf | config | *.cfg | *rc)  $EDITOR "$file" ;;
        *)  :  ;;
        esac
    done
    cd - 1>/dev/null;
fi

Изменить его на использование переменной "$dir" не удалось. Что я делаю не так?

dir=$HOME/.config/$1
if [ ! -d "$dir" ]; then :
    else 
    for file in "$dir" ; do
        case "$file" in
        conf | config | *.cfg | *rc)  $EDITOR "$file" ;;
        *)  :  ;;
        esac
    done;
fi

Ответы [ 3 ]

1 голос
/ 18 июля 2011

Вы не копируете файлы внутри $dir, а просто перечисляете $dir. Попробуйте $dir/*.

0 голосов
/ 18 июля 2011

Вы не можете использовать только «$ dir», потому что это дает только один элемент: каталог.Вам нужен $ dir / *, но он также включает в себя и путь, поэтому вы должны удалить его, чтобы сравнить только имя файла:

...
for file in $dir/*; do
    filename=`basename $file`
    case $filename in
    ...
0 голосов
/ 18 июля 2011

Ваша первая версия делает * для каталога, получая список всех файлов в каталоге. Ваша вторая версия имеет только одну запись в списке - сам каталог, а не его содержимое.

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