Проблема с использованием команды cd с & ldquo; ~ & rdquo; или & ldquo; $ HOME & rdquo; в сценариях bash

Можете ли вы использовать Sublime Text, например, многоплатформенную и высокую, рекомендованную профессиональными разработчиками, и создавать плагины очень легко.

1
задан 13 August 2014 в 14:55

2 ответа

Вот пример, который работает.

Как уже говорилось, расширение переменных из ввода является ключевым.

#!/bin/bash
echo -n "Dir:"
read dir1
dir2=`eval echo $dir1`
cd $dir2
pwd

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

3
ответ дан 24 May 2018 в 04:43
  • 1
    @Pandya Да меняет рабочий каталог. Но не в оболочке вызывающей оболочки. Зачем вам нужен скрипт, который делает то, что делает cd? – Run CMD 12 August 2014 в 15:46
  • 2
    Да, он работает, но проще с ответом @nux! – Pandya 12 August 2014 в 16:05
  • 3
    @Pandya. Вы знаете, как и я, что мой комментарий ссылался на ваш предыдущий комментарий, который вы удалили тем временем, в котором вы утверждали, что мое решение не работает. – Run CMD 12 August 2014 в 20:15

Проблема в расширении тильды происходит до расширения переменной (подробнее см. man bash). Расширение переменной происходит только один раз, поэтому $dir1 расширяется, но строка $HOME внутри него отсутствует.

Может быть проще указать путь к каталогу в качестве аргумента командной строки вместо использования read, чтобы прочитать его с консоли: оболочка расширит его для вас:

#!/bin/bash
dir1=$1
cd "$dir1"
pwd

и вызовет его как

./script ~/Desktop

Другой альтернативой является использование диалогового окна файла вместо вводя путь вообще:

dialog --dselect / 20 20
2
ответ дан 24 May 2018 в 04:43

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

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