Назад | Перейти на главную страницу

Подстановочные знаки не заменяются

#!/bin/bash
loc=`echo ~/.gvfs/*/DCIM/100_FUJI`
rm -f /mnt/fujifilmA100
ln -s "$loc" /mnt/fujifilmA100

По какой-то причине переменная * не заменяется единственным возможным значением и получает значение /home/chris/.gvfs/*/DCIM/100_FUJI. Кто-нибудь знает, почему?

Пожалуйста, обратите внимание:

эхо /home/chris/.gvfs/*/DCIM/100_FUJI

loc = / home / chris / .gvfs / * / DCIM / 100_FUJI

rm -f / mnt / fujifilmA100

ln -s /home/chris/.gvfs/*/DCIM/100_FUJI/mnt/fujifilmA100

В своем ответе на Tactical Vim вы упомянули, что запускаете это под sudo - '~'будет по-разному расширяться под sudo и под вашим обычным пользователем. Измените его на '~chris'или жестко закодируйте свой домашний каталог.

Вы уверены, что ввели файл .sh точно так, как показано здесь? Я только что сделал тестовый сценарий, делающий то же самое, что и вы, и он работает у меня.

Может быть, что-то связано со странным именем каталога с пробелами, знаками% и запятыми?

Попробуйте запустить свой скрипт под 'sh -x', чтобы увидеть некоторые отладочные данные, возможно, они подскажут. Я никогда не видел, чтобы эхо использовалось подобным образом, это могло быть связано с этим; это работает, если вместо этого вы замените 'echo' на 'ls -d' (или что-то подобное, не уверен в вашем выводе)?

Хорошо, я изменил свой сценарий следующим образом:

loc=`echo ~chris/.gvfs/*/DCIM/`
sudo rm -f /mnt/camera
sudo ln -s "$loc" /mnt/camera

Обратите внимание, что sudo находятся внутри скрипта