AutoFS может быть решением см. больше в этом руководствеhttps://www.howtoforge.com/accessing_windows_or_samba_shares_using_autofs
Или добавьте sudoers mount для cif и предоставьте пользователям возможность самостоятельно монтировать свои собственные файлы с помощью шейдерных кредитов.https://askubuntu.com/questions/67405/auto-mounting-network-shares-per-user
Ваша проблема в том, что вы добавляете двойные кавычки к тексту, выводимому git diff
. Это искажает пути и еще больше затрудняет правильный анализ списка файлов, особенно если какое-либо имя пути содержит кавычки.
Одинарные кавычки, которые вы видите в выводе трассировки, просто добавлены bash
, чтобы было проще увидеть, как разграничиваются строки (, например. чтобы показать, что "test
, file.php"
и "testfile.php"
являются тремя отдельными аргументами ). Помните, что вывод трассировки оболочки — это вывод отладки, предназначенный для того, чтобы дать вам подсказку о том, что делает оболочка, и обычно фактический код, выполняемый оболочкой, не является .
Чтобы безопасно использовать пути, которые выводит git diff --name-only
, рассмотрите возможность использования опции -z
. Это приводит к тому, что git
выводит имена путей в виде списка с нулевыми -разделителями. Затем вы можете использовать xargs -0
для выполнения любой команды над элементами этого списка:
git diff --name-only -z --diff-filter=AM develop... |
xargs -0./bin/phpcs
Вы также можете прочитать список файлов в массив. Например, в оболочке bash
:
readarray -d '' -t names < <( git diff --name-only -z --diff-filter=AM develop... )
./bin/phpcs "${names[@]}"
Очевидно, это зависит от git diff
того, что не выводится слишком много имен .
Если вы можете гарантировать, что ваши имена файлов не содержат символы новой строки, вы можете использовать их для разграничения имен файлов и помещения их в массив:
OIFS=$IFS IFS=$'\n'
files=( $(git diff --name-only --diff-filter=AM develop...) )
IFS=$OIFS
Теперь вы можете интерполировать массив как список строк в кавычках:
./bin/phpcs "${files[@]}"
Это не работает на POSIX sh
или dash
. Вам нужно использовать оболочку, такую как bash
, которая поддерживает массивы
Одинарные кавычки не добавляются. bash -x
просто показывает, какие буквальные аргументы видны. Поскольку $OUTPUT
не цитируется, разбиение слов действует на пробелы и новые строки. "
являются частью переменной и не имеют отношения к синтаксическому анализу оболочки.
Вы могли бы сделать это:
eval./bin/phpcs $OUTPUT
Подход roaima с использованием массивов выглядит лучше.