web-dev-qa-db-ja.com

別のユーザーとして環境変数をエクスポートする方法

スクリプトを実行する前に、ユーザーセッションの環境変数を設定しようとしています。

su - myUser -c "export myVar=$toto ; sh scriptThatNeedsMyVar.sh"

スクリプトが失敗したため、myVar値をデバッグして出力しようとしました。

su - myUser -c "export myVar=$toto ; echo $myVar"

何も返しません。つまり、同じbashで作成して印刷しているにもかかわらず、env変数は作成されませんでした。次に、myUserとしてログインし、bashコンソールで各コマンドを入力すると、うまく機能します

$su - myUser
$export myVar=toto
$echo $myVar
toto

私は何かを逃していますか?
なぜこれが発生し、一時変数を別のユーザーとしてエクスポートするにはどうすればよいですか(bashrcまたは他のシステムファイルを編集することは許可されていません)

1
storm

envを使用:

su - myUser -c "env myVar=\"$toto\" scriptThatNeedsMyVar.sh"

もちろん、scriptThatNeedsMyVar.shは実行可能であり、myUserPATHにあり、#!/bin/shで始まると想定します。

2
waltinator

Byte Commanderの説明 のように、Bashが変数を展開しないようにするには、コマンドを一重引用符で囲む必要があります。 $totoを元のシェルで展開する必要がある場合は、コマンドリストの外部で引数として提供し、$0としてアクセスします。

su - myUser -c 'export myVar="$0"; echo $myVar' "$toto"
1
dessert