我有以下bash脚本为脚本的每个参数做一些事情参数传递一个bash脚本
#! /bin/sh
while (($#)); do
echo $1
shift
done
但不知何故,如果我用命令sudo ./test.sh foo1 foo2
它不会工作启动。而真正奇怪的是,如果我输入sudo bash test.sh foo1 foo2
它的作品。有人知道是什么导致了这种奇怪的行为?
我有以下bash脚本为脚本的每个参数做一些事情参数传递一个bash脚本
#! /bin/sh
while (($#)); do
echo $1
shift
done
但不知何故,如果我用命令sudo ./test.sh foo1 foo2
它不会工作启动。而真正奇怪的是,如果我输入sudo bash test.sh foo1 foo2
它的作品。有人知道是什么导致了这种奇怪的行为?
您指定/ bin/sh的为你的解释,这可能不是bash的。即使它是bash,当调用/ bin/sh时,bash也会以POSIX模式运行。
(())
命令是bash特有的功能。下面将在任何POSIX兼容的外壳工作:
while [ $# -gt 0 ]; do
echo $1
shift
done
您是否试过#!/ bin/bash而不是sh?
这里的解释差异的链接: http://www.linuxquestions.org/questions/programming-9/difference-between-bin-bash-and-bin-sh-693231/
这将在任一sh
或bash
工作:
for arg
do
echo "$arg"
done
它确实为脚本的目的是做同样的事情,而不破坏的说法名单。
脚本的权限是什么?第一次尝试什么_doesn't工作? – sarnold
如果您正在编写一个bash脚本,请在开始处输入'#!/ bin/bash'。如果您正在编写sh脚本,请勿使用任何bash扩展名。 –
请编辑您的问题以包含当前输出,预期输出和任何错误消息(完整文本)。根据你的描述,不可能调试。祝你好运。 – shellter