
Это сводит меня с ума. У меня довольно простой сценарий
#!/bin/bash
read -p "Enter changeList.txt file name: " file_name
if [ -f $file_name ]; then
echo "Reading File..."
cat $file_name | grep "Change " | cut -d ' ' -f 2
echo "Process complete"
else
echo >&2 "File Note Found."
exit 1
fi
echo "Exiting..."
exit 0
Я передаю ему файл ~/changeList.txt, он не работает. Я передаю ему /home/james/changeList.txt, и он работает. Я пробую
file_name=~/changeList.txt
[ -f $file_name ] && echo "true" || echo "false"
из моего терминала, и он возвращает true.
Я использую Ubuntu на wsl 2, и я вошел как james.
решение1
Расширение тильды происходит до расширения переменной. В присваивании значение с правой стороны подвергается расширению тильды, поэтому переменной присваивается полный путь. man bash
Подробнее см.