記錄在shell指令碼中使用sudo echo x > 時,拋Permission denied錯誤
1.場景
在一個非root且帶有sudo許可權的使用者,使用shell指令碼(單獨手工執行命令不會拋錯,是成功的):會拋錯
2.錯誤
3.分析
在shell指令碼中,bash 拒絕這麼做,說是許可權不夠.
這是因為重定向符號 “>” 也是 bash 的命令。sudo 只是讓 echo 命令具有了 root 許可權,但是沒有讓 “>” 命令也具有root 許可權,所以 bash 會認為這個命令沒有寫入資訊的許可權。
4.解決方法
echo "nameserver $DNS_SERVER" | sudo tee /etc/resolv.conf;
在一個非root且帶有sudo許可權的使用者,使用shell指令碼(單獨手工執行命令不會拋錯,是成功的):會拋錯
點選(此處)摺疊或開啟
-
#!/bin/bash -x
-
-
DNS_SERVER=10.xx.xx.xx;
-
echo "Add DNS Server";
-
sudo chattr -i /etc/resolv.conf;
-
sudo echo "nameserver $DNS_SERVER" > /etc/resolv.conf;
- sudo chattr +i /etc/resolv.conf
2.錯誤
點選(此處)摺疊或開啟
-
[hadoop@emr-header-1 WNE-2280FFD89A744E81]$ ./init-emr-env.sh
-
+ DNS_SERVER=10.xx.xx.xx
-
+ echo 'Add DNS Server'
-
Add DNS Server
-
+ sudo chattr -i /etc/resolv.conf
-
+ sudo echo 'nameserver 10.xxx.xx.xx'
-
./init-emr-env.sh: line 7: /etc/resolv.conf: Permission denied
-
+ sudo chattr +i /etc/resolv.conf
- + echo 'remove hive2.0'
3.分析
在shell指令碼中,bash 拒絕這麼做,說是許可權不夠.
這是因為重定向符號 “>” 也是 bash 的命令。sudo 只是讓 echo 命令具有了 root 許可權,但是沒有讓 “>” 命令也具有root 許可權,所以 bash 會認為這個命令沒有寫入資訊的許可權。
4.解決方法
echo "nameserver $DNS_SERVER" | sudo tee /etc/resolv.conf;
利用管道和 tee 命令,該命令可以從標準輸入中讀入資訊並將其寫入標準輸出或檔案中,
具體用法如下:
echo a |sudo tee 1.txt
echo a |sudo tee -a 1.txt // -a 是追加的意思,等同於 >>
tee 命令很好用,它從管道接受資訊,一邊向螢幕輸出,一邊向檔案寫入。
參考:http://blog.csdn.net/hejinjing_tom_com/article/details/7767127
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30089851/viewspace-2132326/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- git push出現Permission denied (publickey)錯誤Git
- Android Permission denied(不允許連線Socket) 錯誤Android
- nginx部署(13:Permission denied)報錯Nginx
- shell指令碼中如何報錯即刻退出以及如何獲取子shell指令碼的錯誤資訊:set -o errexit指令碼
- 使用 sudo 命令出現錯誤
- 關於shell中的pl/sql指令碼錯誤排查與分析SQL指令碼
- 9、在Shell指令碼中呼叫其他指令碼指令碼
- 在 Linux 命令列指令碼中執行 sudo 時自動輸入密碼Linux命令列指令碼密碼
- PHP中 mkdir: Permission denied 問題PHP
- Python 指令碼中呼叫 Java 程式時 Classpath 錯誤Python指令碼Java
- 解決shell指令碼錯誤$’r’ command not found指令碼
- shell指令碼執行錯誤 $‘\r‘:command not found指令碼
- Shell指令碼中cd命令使用指令碼
- 陣列-在Shell指令碼中的基本使用介紹陣列指令碼
- 記錄shell指令碼程式設計相關指令碼程式設計
- shell基礎教程二十一: shell指令碼中echo顯示內容帶顏色指令碼
- Jenkins中構建(Build)Docker映象時出現permission deniedJenkinsUIDocker
- Nginx 日誌 failed (13: Permission denied) 錯誤(13:許可權被拒絕)NginxAI
- 使用shell指令碼在Linux中管理Java應用程式指令碼LinuxJava
- 8、在Shell指令碼中使用函式指令碼函式
- Nginx報錯:Permission denied,沒有許可權!Nginx
- shell中使用sudo不輸入密碼密碼
- 切換使用者時提示:cannot change directory to /home/oracle: Permission deniedOracle
- 【Shell】使用Shell指令碼快速完成SQL指令碼中重複枯燥的任務指令碼SQL
- Bash 指令碼中的錯誤處理指令碼
- dbstart&dbshut指令碼中的錯誤指令碼
- Hexo deploy git permission deniedHexoGit
- 什麼是Shell指令碼?Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- Python 執行報錯 PermissionError: [Errno 13] Permission denied: '***.***'PythonError
- [記錄]在高光譜影像分類中遭遇的愚蠢錯誤
- 【踩坑筆記】專案出現Permission denied筆記
- k8s在掛載持久盤(Volume)時,若許可權不投,則可能會: 容器啟動報錯: Permission denied_nfs permission denied(許可權不夠用時),也可能不會報錯K8SNFS
- 記錄一次錯誤的使用當前時間new Date()引發的錯誤
- Docker使用-v掛載主機目錄到容器後出現Permission deniedDocker
- shell指令碼報錯:[: missing `]‘指令碼
- postgresal使用錯誤解決 (記錄篇)
- 使用ajax.dll時js指令碼錯誤-XXX未定義JS指令碼
- 執行指令碼寫入中間表錯誤返回錯誤資訊指令碼