Проблема заключается в кавычках вокруг имени файла. Они не позволяют вашей оболочке расширить ~
до вашей домашней папки. Итак, sed
ищет папку с именем ~
.
Убедитесь, что $filename
не содержит кавычек, или используйте реальный путь вместо ~
.
Вы обнаружили причину, по которой по традиции переменные, используемые оболочкой или установленные как часть конфигурации инструмента, называются в верхнем регистре (PATH
, DISPLAY
, LESS
,... ), со всеми именами в нижнем регистре, доступными для пользователя.
Переменные среды (, за исключением специальных переменных оболочки (IFS
, PS1
, OLDPWD
, PWD
,... )), все хранятся в одной структуре данных в вашей оболочке. Переменные среды представляют собой такой динамический набор данных, что сохранение истории было бы слишком накладным.
Вы можете наблюдать за созданием среды, следя за выполнением «файлов запуска» вашей оболочки вручную или вставляя отладочный код в сценарии.
Если у вас есть sudoedit
доступ к сценариям (или вы просто владеете ), вы можете сделать их управляемо подробными, вставив что-то вроде:
[[ -f /tmp/debug ]] && source /tmp/debug
в сценарии. Затем в /tmp/debug
можно set +x
, env | sort >/tmp/debug.out
и т. д.
Если вы хотите остановить поток отладки, просто rm /tmp/debug
.
Прочитайте страницу man
для вашего $SHELL
.