![将脚本添加到 /etc/profile.d 后无法登录](https://linux22.com/image/850999/%E5%B0%86%E8%84%9A%E6%9C%AC%E6%B7%BB%E5%8A%A0%E5%88%B0%20%2Fetc%2Fprofile.d%20%E5%90%8E%E6%97%A0%E6%B3%95%E7%99%BB%E5%BD%95.png)
我创建了一个小脚本,用于在 Nautilus 中添加书签,以将用户重定向到网络共享。如果我手动运行该脚本,它会运行良好,但只要我尝试将其添加到 /etc/profile.d 中,我就无法连接到计算机。似乎只要我执行循环或任何类似的“花哨”操作,脚本就会出错。以下是我当前正在运行的脚本的示例:
#!/bin/bash
# Creating gtk-bookmarks if it doesn't exists
if [[ ! -f ~/.gtk-bookmarks ]]
then
touch ~/.gtk-bookmarks
fi
# Adding bookmarks if not present
if ! grep -Fxq "smb://example.com/R03C01 Software:" ~/.gtk-bookmarks
then
echo "smb://example.com/R03C01 Software:" >> ~/.gtk-bookmarks
fi
一旦我有了这样的功能:
####
# Function find_server_by_ip()
# Desc : This function find the server to use for the current host IP Address
# Parameters : None
# Return : echo Server to use
####
function find_server_by_ip()
{
hostname_ip=$(hostname -I)
IFS="."
set -- $hostname_ip
if [[ $3 -eq 78 ]]
then
echo "Server A"
else
echo "Server B"
fi
}
...登录停止工作。令我困惑的是,使用 *bash add_shortcut.sh* 或 *./add_shortcut.sh* 运行此脚本可以正常工作...
我们可能无法在 /etc/profile 调用的脚本中创建函数、解析数组或类似内容吗?在这种情况下,我在哪里或如何为连接到计算机的所有用户执行登录脚本?哦,顺便说一下,我正在运行 Ubuntu 12.04 LTS!
提前致谢并且抱歉我的英语不好!
编辑:有一个脚本的 pastebin。我没有完整地添加它,因为脚本注释是法语的,所以...好吧,它在那里:http://pastebin.com/71XzaBk6。
答案1
/etc/profile.d 中的内容可能是您登录时窗口管理器提供的,并且可能使用 /bin/sh,因此请将 POSIX shell(而不是 bash)作为要添加脚本的目标。请注意,[[
目前在其中的脚本中找不到。
所以,
- 选择
[ ... ]
[[ ... ]]
funcname() { ... }
不使用function
关键字
dash 是一个 POSIX (唯一) shell,因此你可能会发现dash 手册页便利
评论http://pastebin.com/71XzaBk6
这是主要错误:更改
if [[ ! -f ~/.gtk-bookmarks ]]
到
if [ ! -f ~/.gtk-bookmarks ]
该
find_server_by_ip
函数可以简化:findserverbyip() { case "$(hostname -I)" in *[0-9].33.9.[0-9]*) share_server=serverB ;; *) share_server=serverA ;; esac }
此外,这个注释具有误导性:该函数不返回任何内容,它有副作用。
# Return : echo Server to use
还不如删除 shebang 行:这个脚本不会被执行,而是会被获取。