如果改成 system("su"),那么会这样:
请输入密码:
验证成功
bash: 无法设定终端进程组(54888): 对设备不适当的 ioctl 操作
bash: 此 shell 中无任务控制
可以输入密码,但是输入后便不可执行任何操作,如chmod会输出:.........不允许的操作
如果改成 system("su"),那么会这样:
请输入密码:
验证成功
bash: 无法设定终端进程组(54888): 对设备不适当的 ioctl 操作
bash: 此 shell 中无任务控制
可以输入密码,但是输入后便不可执行任何操作,如chmod会输出:.........不允许的操作
这高亮会变成红色么...
可以试试python语言的 pexpect 包
你的 C++ 程序直接以 root 用户运行不就行了吗
你的 C++ 程序直接以 root 用户运行不就行了吗
sudo su
cd /......
./test
这么执行程序跟手动差不了多少
你的 C++ 程序直接以 root 用户运行不就行了吗
python只简单学过一点点,不知道咋用
可以试试python语言的 pexpect 包
Python没咋学过,基础差不多忘没了...
sudo su
cd /......
./test
这么执行程序跟手动差不了多少
直接 sudo /path/to/test 也行,就一个命令加上密码验证
如果你这个脚本需要长期运行或自启动(听说是个 FTP 服务器?),可考虑写个 systemd unit 文档,放到 /etc/systemd/system 目录下
我不知道楼主到底是怎么做的,给的信息实在有点少。正常来说应该没问题的,system也是调用的shell,可能是楼主的用法不对。
楼主可以试试 system ("sudo 命令; sudo 命令; sudo 命令");或者 system ("sudo bash -c '命令; 命令; 命令'");这样的写法,更漂亮的方法就是像楼上说的,用systemd去启动,还省得来回输入密码。
楼上说得好,比较简单的方案是直接
sudo xxx
来执行你的程序。
或者利用systemd来更好地控制程序运行,如果你的程序有自动启动或者被其它程序调用这样的需求的话,用systemd无论如何都更加方便。
如果你不希望为整个程序赋予sudo权限,只希望针对特定的语句赋予sudo的话,那么从sudo的提示可以看出,你可以用sudo -S来从标准输入读取密码,所以:
如果是比较简单的语句,可以这样调用:
system("sudo -S 你的语句")
例如:
system("sudo -S apt update")
-S选项指示sudo从标准输入流(stdin)中读取用户密码。
如果是比较复杂的语句,你可以用bash包裹:
system("sudo -S bash -c '命令'")
这样会以管理员权限启动bash,然后在bash中执行后续指令。当然你用sh或者zsh也应该可以。
如果语句非常复杂,你还可以把命令写进脚本文件里然后调用。方法和上面类似。但是如果真是这样为什么你不直接写脚本呢?
最后,既然是从标准输入读取密码,还可以将密码硬编码进入程序中:
system("echo '你的密码' | sudo -S 你的命令")
如果你真的这么做了,记得妥善保管你的程序源代码和二进制,最好将权限设置为700,否则会导致严重的安全问题。
su命令明显不是为了在脚本或者程序中集成而设计的。这东西会切换到对应的用户并启动一个新shell,然后你的任务进程就进行不下去了……
楼上说得好,比较简单的方案是直接
sudo xxx
来执行你的程序。
或者利用systemd来更好地控制程序运行,如果你的程序有自动启动或者被其它程序调用这样的需求的话,用systemd无论如何都更加方便。
如果你不希望为整个程序赋予sudo权限,只希望针对特定的语句赋予sudo的话,那么从sudo的提示可以看出,你可以用sudo -S来从标准输入读取密码,所以:
如果是比较简单的语句,可以这样调用:
system("sudo -S 你的语句")
例如:
system("sudo -S apt update")
-S选项指示sudo从标准输入流(stdin)中读取用户密码。
如果是比较复杂的语句,你可以用bash包裹:
system("sudo -S bash -c '命令'")
这样会以管理员权限启动bash,然后在bash中执行后续指令。当然你用sh或者zsh也应该可以。
如果语句非常复杂,你还可以把命令写进脚本文件里然后调用。方法和上面类似。但是如果真是这样为什么你不直接写脚本呢?
最后,既然是从标准输入读取密码,还可以将密码硬编码进入程序中:
system("echo '你的密码' | sudo -S 你的命令")
如果你真的这么做了,记得妥善保管你的程序源代码和二进制,最好将权限设置为700,否则会导致严重的安全问题。
su命令明显不是为了在脚本或者程序中集成而设计的。这东西会切换到对应的用户并启动一个新shell,然后你的任务进程就进行不下去了……
哇,谢谢!
本蒟oier表示佩服
直接 sudo /path/to/test 也行,就一个命令加上密码验证
如果你这个脚本需要长期运行或自启动(听说是个 FTP 服务器?),可考虑写个 systemd unit 文档,放到 /etc/systemd/system 目录下
谢谢,但是貌似不太用得着,虽然是FTP,但不是服务器,本地机器而已
我不知道楼主到底是怎么做的,给的信息实在有点少。正常来说应该没问题的,system也是调用的shell,可能是楼主的用法不对。
楼主可以试试 system ("sudo 命令; sudo 命令; sudo 命令");或者 system ("sudo bash -c '命令; 命令; 命令'");这样的写法,更漂亮的方法就是像楼上说的,用systemd去启动,还省得来回输入密码。
好的,谢谢
可以用用pkexec,如果你有图形化的界面它会自动弹出窗口让你授权,比如system("pkexec rm /etc/xxx")
Popular Events
More

中文 
Deepin20.8,由于上完课要传文件,搭了个FTP,现在想写个脚本,自动同步文件及设置权限,用的方法是
cstdlib头文件下的system()命令,但是跨用户操作得有su权,有大佬知道这个怎么获取吗?直接system("sudo su")会报错...(
cstdlib好像比较老了,或者有什么更简便、稳定的方法也请指出)