#!/bin/bash
loc=`echo ~/.gvfs/*/DCIM/100_FUJI`
rm -f /mnt/fujifilmA100
ln -s "$loc" /mnt/fujifilmA100
По какой-то причине переменная * не заменяется единственным возможным значением и получает значение /home/chris/.gvfs/*/DCIM/100_FUJI. Кто-нибудь знает, почему?
Пожалуйста, обратите внимание:
Если глобальное расширение не удается, образец не заменяется. Я выполнил команды:
chris @ comp2008: ~ $ loc = `` эхо ~ / .gvfs / * / DCIM / 100_FUJI
chris @ comp2008: ~ $ echo $ loc
/home/chris/.gvfs/gphoto2 смонтировать на usb% 3A001,008 / DCIM / 100_FUJI
Итак, мы видим, что расширение должно работать
Теперь я перешел на использование:
loc = `` найти ~ / .gvfs -name 100_FUJI
Мне просто любопытно, почему он не работает как есть.
Вывод отладки с использованием sh -x
эхо /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 находятся внутри скрипта