ubuntu腳本沒有這樣的檔案/etc/init.d/腳本

ubuntu腳本沒有這樣的檔案/etc/init.d/腳本

我試圖在啟動時運行這個腳本,但這不斷給我錯誤/etc/init.d/put_ubuntu_users: 14: /etc/init.d/put_ubuntu_users: cannot open ~/data.txt: No such file

這是我的腳本

#!/bin/sh

### BEGIN INIT INFO
# Provides:          Updates Password at Login
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: script for updating password
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

                while IFS=: read f1 f2
                        do
                                user=$(sudo grep "$f1" /etc/shadow | cut -d':' -f 1);
                                pwd=$(sudo grep "$f1" /etc/shadow | cut -d':' -f 2);

                                        if [ -n "$user" -a "$f2" != "$pwd" ]; then
                                                #search for password, and repalce it with new one
                                                sudo sed -i 's@'$pwd'@'$f2'@' /etc/shadow
                                        fi

                done < ~/data.txt

我已經運行了這組命令

sudo chmod 755 put_ubuntu_users
sudo update-rc.d put_ubuntu_users defaults
sudo service put_ubuntu_users start

順便說一句,如果我通過鍵入手動運行該腳本,則該腳本可以正常工作./put_ubuntu_users

請告訴我我做錯了什麼

答案1

該錯誤告訴您找不到檔案 ~/data.txt。原因很簡單:/etc/init.d 腳本以 root 身分執行,我非常確定 root 的主目錄 /root 中沒有檔案 data.txt。您可以透過使用absolute路徑而不是relative路徑來解決這個問題。

另一方面,我發現很難理解done語句後重定向的作用。你到底想做什麼?

答案2

此錯誤表示無法找到/存取檔案 data.txt(針對使用者主目錄)。解決此問題的最簡單方法是編輯腳本的最後一行並將 ~/data.txt 變更為 /home/{username_here}/data.txt

答案3

服務沒有主目錄。所以~/data.txt在這種情況下它不會做你認為它會做的事情。您需要將該文件放在您使用靜態文件名引用的位置。

答案4

可能是沒有為 init 進程用戶設定主資料夾(這是正常的)。

在腳本的開頭添加setuid myuser,這將以該用戶身份運行腳本。目前 init 使用者沒有設定主資料夾(猜測,否則它會寫入主資料夾位置)。一個令人驚訝的有用維基百科頁面對這個。

相關內容