在运行sudo bash的脚本中运行没有sudo的特定命令

时间:2016-12-28 16:27:01

标签: git bash shell ubuntu sudo

我有一个bash脚本,我与sudo一起运行:sudo NewScript

在脚本中,我有一个git命令,我不希望与sudo一起运行。目前,由于整个脚本都使用sudo运行,因此此命令也会与sudo一起运行,这就是我想要抑制的内容。

这样的事情是否可能,或者我是否需要在没有sudo的情况下运行脚本,并为脚本内的每个命令添加sudo而不是git命令?

3 个答案:

答案 0 :(得分:4)

请注意,root将程序作为不同的用户运行,不一定是root; git只是默认值。因此,您的目标可能不是在没有sudo的情况下运行您的特定the_user命令,而是以与其他用户不同的用户身份运行它。

如果您希望git命令由硬编码用户sudo -u the_user <your git command> 运行,请填写

git
脚本中的

(当以root身份运行脚本时,这不会提示您输入密码。)

如果您事先不了解用户,而是希望sudo newScript使用<{p>}打电话给sudo -u $SUDO_USER <your git command> 命令

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/', 'BlogController@all')->name('post.all');

Route::match(['get', 'post'], '/article/create', 'BlogController@create')->name('post.create')
     ->middleware('auth');

Route::get('/article/{id}', 'BlogController@single')->name('post.single');

Route::match(['get', 'post'], '/article/{id}/delete', 'BlogController@delete')->name('post.delete')
     ->middleware('auth', 'author');

Route::match(['get', 'post'], '/article/{id}/edit', 'BlogController@edit')->name('post.edit')
     ->middleware('auth', 'author');

Route::get('/author/{id}', 'BlogController@author')->name('post.author');

Route::get('/category/{id}', 'BlogController@category')->name('post.category');

Route::match(['get', 'post'], '/user/create', 'UserController@create')->name('user.create')
     ->middleware('auth');

Route::get('/home', 'HomeController@index');

代替(感谢@thatotherguy提示)。

答案 1 :(得分:2)

一种使用方法是使用su切换到普通用户权限并动态运行它而不是实际更改访问权限。

在脚本中运行具有正常git权限的$USER命令。

su - "$USER" -c "git_command1; git_command2;"

根据-c页面将命令传递给shell的man su标志,

  

-c, - command = command               使用-c选项将命令传递给shell。

答案 2 :(得分:0)

要在以sudo身份运行的脚本中以非sudo身份运行命令:

sudo -u $SUDO_USER yourcommand

例如:

sudo -u $SUDO_USER whoami

请注意,如果脚本以非sudo的身份运行,则此操作将无效。所以一定要先检查一下。