user1の作曲家。sh:

user1の作曲家。sh:

ルート以外のユーザーとして作曲家を実行したいです。だから私はメインライターの実行可能ファイルの名前をに変更しcomposer-callcomposer

#composer.sh
su nginx -c "composer-call ${@}" 

今すぐ実行するとcomposer --version機能しますが、より複雑なパラメータを渡している間にcomposer create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interactionエラーが表示されます。

+ su nginx -c 'composer-call create-project' drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction
su: unrecognized option: stability

アップデート1

以下のジェフの答えに基づいて彼の答えを試しましたが、別のエラーが発生しました。より良いソリューションを期待します。

composer-call: line 2: can't open ?php: no such file
composer-call: line 3: /bin: Permission denied
+ su nginx -- composer-call composer-call docker-php-entrypoint docker-php-ext-configure docker-php-ext-enable docker-php-ext-install docker-php-source drupal drush pear peardev pecl phar phar.phar php php-config phpdbg phpize This file is part of Composer.
su: must be suid to work properly
+ su nginx -- composer-call composer-call docker-php-entrypoint docker-php-ext-configure docker-php-ext-enable docker-php-ext-install docker-php-source drupal drush pear peardev pecl phar phar.phar php php-config phpdbg phpize
su: must be suid to work properly
composer-call: line 6: syntax error: unexpected word (expecting ")")

注:作曲家の呼び出しはPHP cliスクリプトです。

ベストアンサー1

追加の引数が解析されないように、ターゲットユーザーを区別する--ために使用されるコマンド:su

#composer.sh
su nginx -- composer-call "${@}" 

たとえば、

user1の作曲家。sh:

#!/bin/sh
set -x
su otheruser -- /home/otheruser/composer-call "$@"

/home/otheruser/composer-call:

#!/bin/sh
echo Hi, I am composer-call, with arguments:
printf '%s\n' "$@"

実行中:

./composer.sh create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction
+ su otheruser -- /home/otheruser/composer-call create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction
Password:
Hi, I am composer-call, with arguments:
create-project
drupal-composer/drupal-project:8.x-dev
some-dir
--stability
dev
--no-interaction

おすすめ記事