2016-03-09 3 views
0

Я пишу сценарий, который будет символизировать все мои dotfiles, связанные с bash, в домашний каталог. Я хочу, чтобы скрипт проверял, существуют ли имена файлов, чтобы я мог переименовать/переместить их.bash переменное имя файла с подчеркиванием непризнанным?

По какой-то причине не удается получить мою тестовую команду if, чтобы распознать имена файлов, в которых есть символ подчеркивания.

При проверке файлов, которые уже существуют, этот сценарий:

#!/bin/bash 
for name in bashrc bash_profile bash_aliases 
do 
    filename=$HOME"/."$name 

    if [ -e "$filename" ]; then 
    echo "${filename} exists" 
    else 
    echo "${filename} doesn't exist" 
    fi 
done 

Выходы:

/home/xavier/.bashrc exists 
/home/xavier/.bash_profile doesn't exist 
/home/xavier/.bash_aliases doesn't exist 

Что именно подчеркиванием, что является причиной такого поведения, и как это исправить?

+2

Его работа для меня. Вы проверяли, что у вас есть эти файлы? – Ritesh

+0

поместите переменную '$ HOME' внутри' '/." 'Так что это должно быть как' '$ HOME /." 'Оно должно работать правильно сейчас. –

+2

Обратите внимание, что '-e' не удастся, если файл существует, но является сломанной символической ссылкой –

ответ

1

Код верный как указано, а подчеркивание не является проблематичным персонажем в целом.

Вы упомянули о том, что вы символизируете файлы - если вы уверены, что файлы там, убедитесь, что они не сломаны символическими ссылками. -e file будет ложным, если конечная цель ссылки не существует.

Других вещей, которые могут вызвать это являются:

  • , не имеющие разрешениями
  • невидимых символов Юникода как нулевой шириной пространства
  • подобных выглядящими символов Юникода как bаsh_profile который имеет Полноширинную низкую линию вместо подчеркивание.
  • Запуск сценария в chroot или sandbox
  • проверка наличия файла в другом терминале, чем тот, который используется для запуска скрипта - его можно было chrooted, SSH'd на другой компьютер или запустить до того, как каталог был и поэтому имеют другой вид на fs
+0

Спасибо, что уведомил меня об этом эксцентриситете с '-e'. Теперь имеет смысл подумать об этом. Я закончил использование 'ln --symbolic --force', чтобы сломанные символические ссылки были перезаписаны. – coffeecola

Смежные вопросы