Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sudo猫<&书信电报;EOF>;文件不存在';我不工作,苏多工作_Bash_Shell_Sudo - Fatal编程技术网

Bash sudo猫<&书信电报;EOF>;文件不存在';我不工作,苏多工作

Bash sudo猫<&书信电报;EOF>;文件不存在';我不工作,苏多工作,bash,shell,sudo,Bash,Shell,Sudo,我在bash的命令提示符下尝试了以下操作: sudo cat << EOF > /etc/yum.repos.d/some-name.repo #Content #.... #... EOF 然后我做了sudo su,除了cat之前的sudo之外,我尝试了完全相同的事情,它工作起来没有任何问题。上面我遗漏了什么?输出重定向(例如>)是由bash执行的,而不是由cat执行,同时使用UID运行。要使用root的UID运行,请使用sudo: sudo bash -c 'cat &l

我在bash的命令提示符下尝试了以下操作:

sudo cat << EOF > /etc/yum.repos.d/some-name.repo
#Content
#....
#...
EOF
然后我做了
sudo su
,除了
cat
之前的
sudo
之外,我尝试了完全相同的事情,它工作起来没有任何问题。上面我遗漏了什么?

输出重定向(例如>)是由bash执行的,而不是由cat执行,同时使用UID运行。要使用root的UID运行,请使用sudo:

sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
sudo bash-c'cat/etc/yum.repos.d/some-name.repo
第1行
第2行
第3行
EOF'
在使用UID运行时,输出重定向(例如>)由bash执行,而不是由cat执行。要使用root的UID运行,请使用sudo:

sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
sudo bash-c'cat/etc/yum.repos.d/some-name.repo
第1行
第2行
第3行
EOF'

正如其他人指出的,shell重定向是由当前shell完成的,而不是由cat完成的。sudo只更改执行的程序的权限,而不更改执行重定向的shell的权限。我的解决方案是避免重定向:

sudo dd of=/etc/yum.repos.d/some-name.repo << EOF

sudo dd of=/etc/yum.repos.d/some-name.repo正如其他人指出的那样,shell重定向是由当前shell而不是cat完成的。sudo只更改执行的程序的权限,而不更改执行重定向的shell的权限。我的解决方案是避免重定向:

sudo dd of=/etc/yum.repos.d/some-name.repo << EOF
sudo dd of=/etc/yum.repos.d/some-name.repo另一个选项是tee

cat << EOF | sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF
cat另一个选项是tee

cat << EOF | sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF

cat作为@Yuriy Nazarov答案的一个变体,只需要通过
sudo提升管道输出。管道输入可以保持不升高:

sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
line1
line2
line3
EOF

sudo bash-c'cat>/etc/yum.repos.d/some name.repo'作为@Yuriy-Nazarov答案的一个变体,只需要通过
sudo提升管道输出。管道输入可以保持不升高:

sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
line1
line2
line3
EOF

sudo bash-c'cat>/etc/yum.repos.d/some name.repo'如果您在文本中使用了“”,则可以使用:

$ sudo bash -c "cat > /etc/postfix/mysql-virtual_forwardings.cf << EOF
user = mail_admin
password = password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
EOF
"

$sudo bash-c“cat>/etc/postfix/mysql-virtual_forwardings.cf如果您在文本中使用了”,那么您可以使用:

$ sudo bash -c "cat > /etc/postfix/mysql-virtual_forwardings.cf << EOF
user = mail_admin
password = password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
EOF
"

$sudo bash-c“cat>/etc/postfix/mysql-virtual_forwardings.cf我不明白的是我已经在使用bash提示符,那么为什么我需要
bash-c
。因为在这种情况下,重定向将由以“root”开头的bash执行具有足够权限写入/etc/yum.repos.d/的uid。您可以使用重定向输出的任何其他实用程序。例如,“cat我不理解的部分是我已经在使用一个bash提示符,那么为什么我需要一个
bash-c
。因为在这种情况下,重定向将由bash执行,该bash以“root”uid启动,该uid具有足够的权限写入/etc/yum.repos.d/。您可以使用任何其他重定向输出的实用程序。例如”猫这是猫的无用用途。最好这样做:sudo-tee-a/etc/yum.repos.d/some-name.repo@BrunoBronosky这实际上只是因为你把
放在了cat的无用用法上。更好的做法:sudo-tee-a/etc/yum.repos.d/some-name.repo@BrunoBronosky这实际上只是因为你把
可能的重复放在了可能的重复上,这比我的案例中被接受的答案有了巨大的改进,因为我的管道输出充满了变量和shebang之类的东西。这比我的案例中被接受的答案有了巨大的改进,因为我的管道输出充满了变量和shebang之类的东西。