スクリプトを実行する前に、ユーザーセッションの環境変数を設定しようとしています。
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または他のシステムファイルを編集することは許可されていません)
env
を使用:
su - myUser -c "env myVar=\"$toto\" scriptThatNeedsMyVar.sh"
もちろん、scriptThatNeedsMyVar.sh
は実行可能であり、myUser
のPATH
にあり、#!/bin/sh
で始まると想定します。
Byte Commanderの説明 のように、Bashが変数を展開しないようにするには、コマンドを一重引用符で囲む必要があります。 $toto
を元のシェルで展開する必要がある場合は、コマンドリストの外部で引数として提供し、$0
としてアクセスします。
su - myUser -c 'export myVar="$0"; echo $myVar' "$toto"