关闭。此问题不符合堆栈溢出准则。它目前不接受答案。
<hr class=“my12大纲无baw0 bb bc-POWER-400”/
想改进此问题吗?更新问题,使其成为堆栈溢出的主题。
已于4个月前关闭
改进这个问题
我已经在我们的一个开发RedHat linux机器上获得了sudo访问权,我似乎发现自己经常需要将输出重定向到一个我通常没有写访问权的位置
问题是,这个人为的例子不起作用:
sudo ls-hal/root/>;/root/test.out
我刚刚收到答复:
-bash:/root/test.out:权限被拒绝
我怎样才能让它工作
您的命令不起作用,因为重定向是由您的shell执行的,它没有写入/root/test.out的权限。输出的重定向不是由sudo执行的
有多种解决方案:
-
使用sudo运行shell,并使用
-c选项向其发出命令:sudo sh-c'ls-hal/root/>;/root/test.out' -
使用命令创建脚本,并使用sudo运行该脚本:
#!/bin/sh ls-hal/root/>;/root/test.out运行
sudo ls.sh。如果不想创建临时文件,请参阅Steve Bennett的答案 -
使用
sudo-s启动shell,然后运行命令:[[email protected]]$sudo-s [[email protected]]#ls-hal/root/>;/root/test.out [[email protected]]#^D [[email protected]]$ -
使用
sudo-tee(如果您在使用-c选项时不得不逃避很多):sudo ls-hal/root/| sudo-tee/root/test.out>;/dev/null需要重定向到
/dev/null,以停止tee输出到屏幕。到追加,而不是覆盖输出文件
(>;),使用tee-a或tee-append(最后一个特定于GNU coreutils)
感谢Jd、Adam J.Forster和Johnathan提供第二、第三和第四种解决方案