Я хочу получить размер каталога, заданного пользователем в качестве аргумента. Пример:
read -p "Enter the directory" target
du -k $target
Если пользователь указывает путь как ~/Documents/dir
, я получаю сообщение об ошибке:du: cannot access '~/Documents/dir': No such file or directory
Принимая во внимание, что если я дам команду как:
du -k ~/Documents/dir
Я получаю желаемый результат.
Почему я не могу использовать переменные вместе с командой du?
linux
command-line
bash
unix
Анурааг Кхаре
источник
источник
-x
? Также, над какой папкой работает скрипт, и предоставляет ли пользователь полный путь или относительный путь?~
. Укажите путь, относительный или абсолютный, без использования~
. Например, вместо того~/Documents/dir
, чтобы писать/home/myself/Documents/dir
.Ответы:
Он
~
не раскрывается после того, как он был прочитан поверх оболочки, или когда он помещен вdu
команду. Вы можете заставить bash выполнить расширение с помощью следующего кода:Это
${target/#\~/$HOME}
важная часть. Он заменяет~
содержимоеHOME
переменной среды.источник
~root/dir
.