2013-04-04 4 views
0

Вот и все. Они просто не сработают для меня. Что я на этот раз сделал неправильно?Получение «Разрешения отказа» на имя_имя и базовое имя

# nquo is: /home/bryan/renametest/C D/y z 

    # script: 
    dirn=dirname "$nquo" 
    echo "dirn $dirn" 
    bnam=basename "$nquo" 
    echo "bnam $bnam" 

Run Результат:

./script3.sh: 208: /home/bryan/renametest/C D/y z: Permission denied 
    dirn 
    ./script3.sh: 208: /home/bryan/renametest/C D/y z: Permission denied 
    bnam 
+1

вы можете проверить права доступа к файлу/директории с ' ls -ld "$ nquo" ' – shx2

+2

Является ли это bash? Если это так, вам не хватает '$ (...)' или обратных ссылок вокруг 'dirname' и' basename' invocations. Кроме того, работа с именами файлов, содержащих пробелы, очень сложна. –

+0

@JimGarrison Нет, это не сложно, если вы знаете, что делаете. – glglgl

ответ

3

Как можно заметить, сценарий пытается запустить файл с именем в $nquo сначала с переменным окружением dirn набора к значению dirname, а затем с переменной bnam установите значение basename. Поскольку он не является исполняемым, вы получаете сообщение об ошибке о невозможности выполнить файл.

Вы предположительно предназначены для выполнения команд на имя файла, который требует либо обратно-тиков или (предпочтительно) $(...) вокруг него:

dnam=$(dirname "$nquo") 
bnam=$(basename "$nquo") 
+0

Вот и все! Еще раз спасибо Джонатан. – user2021539

+0

этот ответ также безопасен мое время –