通过从 /etc/profile 复制代码并更改路径来复制 ~/.profile.d 下的 /etc/profile.d

问题描述 投票:0回答:1

我试图通过复制在我的

/etc/profile.d
中运行脚本的
/etc/profile
的片段来复制
profile.d
的功能,并让它在
~/.profile
下运行脚本。
这是我的

~/.profile.d

~/.profile

这是该错误中提到的
# ~/.profile: executed by the command interpreter for login shells. # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login # exists. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package. # the default umask is set in /etc/profile; for setting the umask # for ssh logins, install and configure the libpam-umask package. #umask 022 # if running bash if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi # set PATH so it includes user's private bin if it exists if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi ## Begin user section: ## Add $HOME/.profile.d if [ -d "$HOME/.profile.d" ]; then for i in '$HOME/.profile.d/*.sh'; do if [ -r $i ]; then . $i fi done unset i fi

golang.sh

我还将 
GOPATH=$(go env GOPATH) export PATH=$GOPATH/bin:$PATH unset GOPATH

中的第 33-35 行复制到名为

~/.profile
的单独脚本中,并将其作为
test.sh
运行以确认这些行符合我的预期:
i="$HOME/.profile.d/golang.sh

确实如此。我真的很困惑。我的理解是我从 
if [ -r $i ]; then echo "Can read ${i}" # Prior line is checking if the script file can be read, so if it does echo it here. . $i # this is what it originally did, sourcing the scripts inside a for loop. fi

复制的部分迭代给定路径中的每个文件(原始版本中的

/etc/profile
,我的版本中的
/etc/profile.d
),并检查是否可以读取它们,然后获取它们(这是不同的)正常运行它们)如果可以的话。
我已经按照 

$HOME/.profile.d

标签的建议通过 ShellCheck 运行此脚本,并且它说在 for 语句中使用单引号,因为双引号会破坏这些。这修复了登录 Cinnamon 时的错误,但它仍然没有像我期望的那样在

bash
中获取脚本。
正如您可能已经了解到的,我是一个 shell 脚本新手。

我应该注意

~/.profile.d

尚未可执行。我认为没有必要,因为它是被获取而不是执行的,并且

golang.sh
脚本也没有
/etc/profile.d
设置。另外,做
+x
. $HOME/.profile.d/golang.sh
仍然会像我期望的那样设定我的道路。
    

linux bash shell go sh
1个回答
0
投票

source $HOME/.profile.d/golang.sh

产生

for i in '$HOME/.profile.d/*.sh'; do > echo "$i" > done

因为你有单引号,所以它没有扩展。
删除单引号。

© www.soinside.com 2019 - 2024. All rights reserved.