Я столкнулся с некоторыми проблемами при записи файла в unix
[ -s $PWD/MEN/*sub.wav ] && echo "File there" || echo "File Not there" > temp.csv
Я пробую эту команду unix но он не пишет в файл temp.csv.
Единственное, что пишет в temp.csv
в вашей команде, — это последний echo
, который выполняется только в том случае, если тест -s
или первый echo
терпит неудачу.
Для корректного вывода в файл выполните
if [ -s MEN/*sub.wav ]; then echo "File there"; else echo "File not there"; fi >temp.csv
или (не совсем равнозначно ),
[ -s MEN/*sub.wav ] && echo "File there" >temp.csv || echo "File not there" >temp.csv
Также обратите внимание, что если ваш шаблон MEN/*sub.wav
соответствует более чем одному имени файла, это вызовет синтаксическую ошибку в вашей программе.
Хотите проверить, хотя бы одно имя соответствует шаблону и не является ли -пустым (тестом -s
), затем используйте
set -- MEN/*sub.wav
# Loop over the matching names (if any).
# Stop when we find a non-empty file.
while [ "$#" -gt 0 ] && [ ! -s "$1" ]; do
shift
done
if [ -s "$1" ]; then
echo File exists
else
echo File not there
fi >temp.csv
Хотите проверить, все ли имена, соответствующие шаблону, не -пусты:
set -- MEN/*sub.wav
# Loop over the matching names (if any).
# Stop when we find an empty file.
while [ "$#" -gt 0 ] && [ -s "$1" ]; do
shift
done
if [ "$#" -eq 0 ]; then
echo File(s) exists
else
echo File(s) not there
fi >temp.csv
Этот последний фрагмент кода основан на том, что оболочка сохраняет нерасширенный шаблон в случае отсутствия совпадающих имен.
Если вы нарушите свою команду, то они эквивалентны
[ -s $PWD/MEN/*sub.wav ]
Он будет выполнен в любом случае, если ваш шаблон "$PWD"/MEN/ *sub.wav не соответствует более чем одному имени файла. Затем идет
echo "File There"
Оболочка пытается выполнить эту команду, и в вашем случае она была выполнена успешно, а затем появляется ||
Это означает, что если левая часть не удалась, то выполнить правую часть. Поскольку наша левая часть выполняется, правая часть никогда не будет выполнена. Если вы хотите записать File там в temp.csv, тогда ваша команда будет выглядеть как
[ -s $PWD/MEN/*sub.wav ] && echo "File there" > temp.csv || echo "File Not there" > temp.csv
или если вы хотите написать обе части, то
[ -s $PWD/MEN/*sub.wav ] && echo "File there" > temp.csv && echo "File Not there" > temp.csv