我正在运行 TinyCore Linux,当我尝试安装 RVM(需要一个用于 QA 自动化的便携式 Linux 发行版)时,我不断收到错误消息sh: syntax error:unexpected redirection
。
我不确定为什么会收到此错误,因为该echo $SHELL
命令返回 BASH。
关于如何让这个工作或获得有关该问题的更多详细信息的任何想法?
答案1
您的 Tiny Core Linux 安装可能只安装了一个最低限度的 shell。这大概是忙碌盒。您可以通过检查是否/bin/sh
符号链接到其他内容来验证这一点:
ls -l /bin/sh
lrwxrwxrwx 1 root root 7 Dec 15 20:52 /bin/sh -> busybox
由于 Tiny Core Linux 将最低限度的操作系统加载到 RAM 中,因此这是可取的。但是,如果您需要功能更齐全的 shell,您可以通过应用程序浏览器(参见此处可用的应用程序列表,应用程序浏览器的命令行版本是tce-ab
)。 Tiny Core Linux 目前有:bash
和tcsh
.
要安装 bash:
tce-load -wi bash.tcz
默认 shell 仍然是,但是您可以通过在其中/bin/sh
运行来生成 bash shell 。bash
设置tcuser
的默认 shell:
which bash | sudo tee -a /etc/shells > /dev/null
sudo sed -i "/$(cat /etc/sysconfig/tcuser)/ s#:[^:]\+\$#:$(which bash)#" /etc/passwd
coreutils
如果您正在寻找更多用于 bash 脚本的 GNU 标准实用程序,您可能还想安装 GNU:
tce-load -wi coreutils.tcz
答案2
看起来其中一个脚本正在运行,/bin/sh
但使用了 bash 的扩展功能,可能是<<<
或<(
.您可能有灰烬/bin/sh
:这是合法的(并且 ash 明显比 bash 更快并且使用更少的内存,这就是为什么许多发行版不将 bash 作为/bin/sh
),但偶尔您会遇到依赖 bash 但以#!/bin/sh
.
您$SHELL
设置为 bash 是无关紧要的,每个脚本都由第一行指示的 shell 执行(舍邦, 这里#!/bin/sh
)。我快速浏览了 RVM 脚本,看起来所有依赖 bash 扩展的脚本都正确地以#!/usr/bin/env bash
.您之前有现有的吗~/.rvm
?如果是这样,请尝试将其移开。
您可以通过使用该选项运行 shell 来获取 shell 脚本的执行跟踪-x
。于是运行一下bash -x ./rvm
看看哪里出错了。如果错误发生在从主rvm
脚本间接调用的脚本中,请尝试添加set -x
其他脚本(紧邻该#!
行下方),以查看它们的执行跟踪。这应该有助于找到有问题的脚本。