在ubuntu

时间:2016-09-28 09:30:31

标签: bash ubuntu

我尝试在Ubuntu中以其他用户身份运行命令。但它无法找到命令。

$ sudo su - hbase -c "echo $JAVA_HOME"
/usr/local/jdk

$ sudo su - hbase -c "echo $PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/jdk/bin

$ sudo su - hbase -c "java -version"
-su: java: command not found

$ sudo su - hbase -c "/usr/local/jdk/bin/java -version"
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

我在centos中测试过,没有问题。我不知道为什么?我怎样才能在其他用户中运行java?

我的JAVA_HOME设置在/etc/bash.bashrc,Ubuntu版本是ubuntu服务器14.04.1。

实际上,我试图在hadoop用户中启动/停止hbase

$ sudo su - hbase -c "/usr/local/hbase-1.1.5/bin/hbase-daemon.sh stop regionserver"
no regionserver to stop because no pid file /tmp/hbase-hbase-regionserver.pid

此错误是因为它无法获取我在export HBASE_PID_DIR="/data/hadoop/run/hbase"中设置的环境/etc/bash.bashrc

我做了更多测试,首先,我将export ENVTEST=hello添加到/etc/bash.bashrc,然后进行了以下测试。

$ echo $ENVTEST

$ sudo su - hbase -c "echo $ENVTEST"

$ source /etc/bash.bashrc
$ sudo su - hbase -c "echo $ENVTEST"
hello

看来,当你执行sudo su - hbase -c "echo $ENVTEST"时,它正在使用我的用户环境而不是hbase。

1 个答案:

答案 0 :(得分:0)

看起来/usr/local/jdk/bin hbase PATH不在/usr/local/jdk/bin。在PATH/etc/bash.bashrc/home/hbase/.bashrc中将sudo su - hbase -c "echo $PATH" 添加到$PATH

因为双引号,这个测试没有你想象的那样:

sudo su - hbase -c
双引号内的

sudo su - hbase -c "echo `whoami`" sudo su - hbase -c 'echo `whoami`' sudo su - hbase -c 'echo $JAVA_HOME' sudo su - hbase -c 'echo $PATH' .run(["$rootScope", "$state", function($rootScope, $state) { $rootScope.$on('$locationChangeStart', function(event, next, current) { if (!$rootScope.loggedUser == null) { $state.go('home'); } }); }]) 运行之前将其值替换为。

尝试这些测试:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>