以不同的用户身份运行部分 shell 脚本

kos*_*sta 3 shell-script

以前有人问过这个问题,但我似乎无法解决问题。

我尝试过的解决方案之一是使用here-document。我使用了以下代码:

#!/bin/bash
su - mv2 <<EOSU
    DELIVER_BRANCH="development"
    echo ${DELIVER_BRANCH}
    exit;
EOSU
Run Code Online (Sandbox Code Playgroud)

我试过上面的代码,位echo ${DELIVER_BRANCH}不打印任何东西。

PSk*_*cik 8

你要:

#!/bin/bash
su - mv2 <<'EOSU'
    DELIVER_BRANCH="development"
    echo "$DELIVER_BRANCH"
    exit;
EOSU
Run Code Online (Sandbox Code Playgroud)

注意第一个EOSU. 如果你省略它们,heredoc$在被传递之前会经历-interpolation,这意味着它"$DELIVER_BRANCH"被替换为当前(对调用 shell 的su)内容$DELIVERY_BRANCH,它是空的:

DELIVERY_BRANCH=production
cat <<'EOSU'
    DELIVER_BRANCH="development"
    echo "$DELIVER_BRANCH"
    exit;
EOSU
Run Code Online (Sandbox Code Playgroud)

印刷

DELIVER_BRANCH="development"
echo "$DELIVER_BRANCH"
exit;
Run Code Online (Sandbox Code Playgroud)

然而

DELIVERY_BRANCH=production
cat <<EOSU
    DELIVER_BRANCH="development"
    echo "$DELIVER_BRANCH"
    exit;
EOSU
Run Code Online (Sandbox Code Playgroud)

印刷

DELIVER_BRANCH="development"
echo production
exit;
Run Code Online (Sandbox Code Playgroud)