bash:当它是进程重定向的结果时执行$ 0

时间:2015-12-27 13:10:40

标签: linux bash shell unix sh

我有一个脚本on GitHub,通常是作为流程重定向的结果执行的,如下所示:

sh <(curl -sSL http://git.io/sinister)

如果没有从Windows运行脚本本身可能需要root权限,所以我添加了以下代码行,以便在需要时以root身份重新执行:

on_windows()
{
    uname | grep -q '[CYGWIN|MINGW|MSYS]'
}

if ! on_windows && [ "$USER" != 'root' ]; then
    exec sudo "$0"
fi

然而,这似乎与流程重定向并不顺利。运行sh -x会产生以下结果:

(trusty)james@localhost:~$ sh -x <(curl -sSL http://git.io/sinister)
+ set -e
+ ...
+ on_windows
+ grep -q [CYGWIN|MINGW|MSYS]
+ uname
+ [ james != root ]
+ exec sudo /dev/fd/63
sudo: /dev/fd/63: command not found

为什么会发生这种情况?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以查看以下答案:https://unix.stackexchange.com/a/156088

您可以尝试以下操作:将curl命令的结果存储在临时文件中并执行此文件。像这样:

curl -sSL http://git.io/sinister > file.temp
chmod u+x file.temp
./file.temp