【问题标题】:Whats wrong with my shell script when run with sudo?使用 sudo 运行时我的 shell 脚本有什么问题?
【发布时间】:2012-03-03 22:38:00
【问题描述】:

这里是代码

#file is named getpack2
count=0
while [ -n "$*" ] ; do
    ARRAY[${count}]=$1
    shift
    count=`expr $count + 1`
done

for t in "${ARRAY[@]}"; do
    mkdir $t
    cd $t
    touch hello
    cd ..
done

我用来运行它的行是:

getpack2 vocals-doo flute-wood

这将创建所需的目录和文件

这也可以:

./getpack2 vocals-doo flute-wood

但是,当我在命令前加上 sudo:

sudo ./getpack2 vocals-doo flute-wood

它给了我以下错误

./getpack2: 7: ARRAY[0]=vocals-doo: not found
./getpack2: 7: ARRAY[1]=flute-wood: not found
./getpack2: 15: Bad Substitution

我对 shell 脚本很陌生。今天刚开始学。是否存在某种范围界定错误?

【问题讨论】:

  • 为什么要计算参数计数?它在 $# 中可用
  • 你可以在子shell中cd而不是“cd ..”:mkdir $t; (cd $t;触摸你好;)。 cd 和 touch 发生在不同的 shell 中,原始 shell 保留在同一目录中。这更不容易出错(随着脚本变得越来越复杂,跟踪原始目录变得越来越困难,并且确保 cd 返回可能变得具有挑战性。)

标签: bash shell terminal sudo


【解决方案1】:

您的超级用户 (root) 可能有一个不支持数组的不同 shell(例如 dash 或其他一些小型 shell。)尝试仅使用标准 bourne shell 结构进行编程。或者在脚本的标题中包含要使用的解释器:

#! /bin/bash

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2014-08-11
    • 2021-01-11
    • 2017-10-20
    • 2010-12-10
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多