在bash中运行命令作为给定用户运行

时间:2015-08-13 17:02:21

标签: bash openedx

我正在使用edx开源代码库,我正在整理一个dotfile,以便更轻松地在服务器上执行各种任务。 我在使用以下bash函数时遇到问题

edx-compile_assets() { 
    sudo -H -u edxapp bash
    source /edx/app/edxapp/edxapp_env
    cd /edx/app/edxapp/edx-platform
    paver update_assets cms --settings=aws
    paver update_assets lms --settings=aws
}

当运行sudo -H -u edxapp bash时,函数暂停并且没有任何反应,当我从该env退出时,其余的函数不是作为edxapp用户执行,而是作为普通用户执行,这导致命令失败。

基本上,看起来sudo -H -u edxapp bash启动一个单独的进程,当该进程结束时,函数的其余部分执行 我想我正在寻找的simple方法可以edxapp user方式运行命令sudo -H -u edxapp bashviewAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); String fileName = "/Notes/info"; File myFile = new File(baseDir + File.separator + fileName); try { FileInputStream fIn = new FileInputStream(myFile); BufferedReader myReader = new BufferedReader( new InputStreamReader(fIn)); String text = ""; String aDataRow = ""; while ((aDataRow = myReader.readLine()) != null) { text += aDataRow + "\n"; } } catch (IOException e) { } welcomeText.setText("Welcome, " + text); } });

感谢任何帮助,谢谢:)

1 个答案:

答案 0 :(得分:0)

IIRC,bash采用-c选项,允许您调用bash并立即执行命令/脚本。因此,我将额外的陈述(来源,广告管理系统,摊铺机等)放入脚本中,并在-c myRemainingScript.sh行的末尾添加sudo