Bash - Получение каталога пользовательского ввода - PullRequest
0 голосов
/ 13 января 2020

В bash я прошу пользователя ввести абсолютный путь к файлу, например dir/to/the/file.txt, а затем go, к этому каталогу и выполнить некоторые команды. Но я просто не могу добраться до поставляемого каталога.

Я попробовал приведенные ниже сценарии, и если он не выдает ошибку, он просто выводит один "."

#!/bin/bash
read -p "Please Enter Path:" $r1
parent=$(dirname "${r1}")
echo "${scriptdir}"


#!/bin/bash
read -p "Please Enter Path:" $r1
parent=$(readlink -f "$(dirname "$r1")")
cd $parent


#!/bin/bash
read -p "Please Enter Path:" $r1
parent="$(basename "$(dirname "$r1")")"
echo "$parent"

Что я делаю не так?

1 Ответ

3 голосов
/ 13 января 2020

Как отметил KamilCuk, при выполнении команды read он должен поместить указанное значение в переменную r1. Это сделано без $.

Итак:

read -p "Please Enter Path: " r1

вместо:

read -p "Please Enter Path: " $r1

Кроме того, при печати переменной скобки не требуются:

echo "$parent"

вместо

echo "${parent}"

Если применить это исправлено, первый скрипт должен работать:

#!/bin/bash
read -p "Please Enter Path:" r1
parent=$(dirname "$r1")
cd "$parent"

РЕДАКТИРОВАТЬ: пользователь Adho c добавил хорошее замечание: если мы добавим Параметр -r для команды read, обратная косая черта не будет работать как escape-символы. Это изменит скрипт следующим образом:

#!/bin/bash
read -p "Please Enter Path:" -r r1
parent=$(dirname "$r1")
cd "$parent"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...