相关疑难解决方法(0)

~ 总是等于 $HOME

我知道以前可能有人问过这个问题,但我在 Google 上找不到。

给定的

  • Linux内核
  • 没有改变 $HOME 的配置
  • 猛击

~ == $HOME是真的吗?

shell bash environment-variables home

42
推荐指数
2
解决办法
8415
查看次数

~/Mary 是相对路径吗?

让我们假设Mary是一个目录。下面的路径是~/Mary相对的吗?

directory syntax

36
推荐指数
3
解决办法
1万
查看次数

如何扩展波浪号 ~ 作为变量的一部分?

当我打开一个 bash 提示符并输入:

$ set -o xtrace
$ x='~/someDirectory'
+ x='~/someDirectory'
$ echo $x
+ echo '~/someDirectory'
~/someDirectory
Run Code Online (Sandbox Code Playgroud)

我希望上面的第 5 行会出现+ echo /home/myUsername/someDirectory。有没有办法做到这一点?在我的原始 Bash 脚本中,变量 x 实际上是从输入文件中的数据填充的,通过这样的循环:

while IFS= read line
do
    params=($line)
    echo ${params[0]}
done <"./someInputFile.txt"
Run Code Online (Sandbox Code Playgroud)

尽管如此,我得到了类似的结果,echo '~/someDirectory'而不是echo /home/myUsername/someDirectory.

shell bash shell-script quoting variable

16
推荐指数
2
解决办法
7971
查看次数

mkdir: 无法创建目录: 没有那个文件或目录

下面的命令有什么问题?

$ var1="~/Music/$(date +%d%m%y)"
$ echo "$var1"
~/Music/240118
$ mkdir "$var1"
mkdir: cannot create directory ‘~/Music/240118’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

然而

$ mkdir ~/Music/240118
Run Code Online (Sandbox Code Playgroud)

作品。

没想到在使用 bash 多年后我会问这样的问题......

bash

9
推荐指数
1
解决办法
1万
查看次数

展开 ~, . 和`.`

由于~,...是特殊目录,为什么在以下示例中对它们的处理方式不同?

$ echo ~
/home/tim
$ echo ..
..
$ echo .
.
Run Code Online (Sandbox Code Playgroud)
  1. ~ 扩展到目录中,但其他两个没有。
  2. 其他两个从字面上扩展,但~不是。

shell directory

7
推荐指数
1
解决办法
444
查看次数

Bash 函数,发生了一些奇怪的事情!

我是 bash 函数的新手,但刚刚开始编写一些零碎的东西来加快我的工作流程。我喜欢在进行过程中测试这个,所以我发现自己经常编辑和采购我的 ~/.profile 并且发现~/.输入有点尴尬......

所以我想我要做的第一件事是:

sourceProfile(){
    source ~/.profile
}

editProfile(){
    vim ~/.profile && sourceProfile
}
Run Code Online (Sandbox Code Playgroud)

运行 editProfile 时,我在 sourceProfile 调用中遇到问题。最初我收到错误:

-bash: ~./profile: No such file or directory
Run Code Online (Sandbox Code Playgroud)

请注意我的函数中没有错字!

但是,如果我使用别名,它会起作用。

alias sourceProfile='source ~/.profile'
Run Code Online (Sandbox Code Playgroud)

但是,在添加该别名然后将其注释掉并取消注释该函数后,我开始收到语法错误:

-bash: /home/jonathanramsden/.profile: line 45: syntax error near unexpected token `('
-bash: /home/jonathanramsden/.profile: line 45: `sourceProfile(){'
Run Code Online (Sandbox Code Playgroud)

程序是:

alias sservice='sudo service'
Run Code Online (Sandbox Code Playgroud)

我很确定我所做的只是评论/取消评论!根据我的谷歌搜索,这似乎是定义函数的语法。

bash function

6
推荐指数
1
解决办法
116
查看次数

为什么`source ~/.bash_aliases` 退出时出现语法错误?

此文件中的语法错误是什么?我看不出来

set-k8s-azure() { 
  export KUBECONFIG=~/.kube/config.azure-1 
}

set-k8s-minikube() { export KUBECONFIG=~/.kube/config.minikube }

minikube() {
  if [[ $@ == start* ]]; then
    set-k8s-minikube
  fi
  command minikube "$@"
}

alias pulr='if output=$(git status --porcelain) && [ -z "$output" ]; then git pull --rebase; else git stash save "pulr WIP saved" && git pull --rebase && git stash pop; fi'
alias vi=nvim
Run Code Online (Sandbox Code Playgroud)

source ~/.bash_aliases 产生:

bash: /home/niel/.bash_aliases: line 1: syntax error near unexpected token `('
bash: /home/niel/.bash_aliases: line 1: `set-k8s-azure() { '
Run Code Online (Sandbox Code Playgroud)

bash syntax

5
推荐指数
2
解决办法
1092
查看次数

读取链接文字与变量

使用 BASH:答案可能很明显,但不适合我。

> echo $PWD
/root/fcm
> readlink -f ~
/root
> # but then with a variable or literal
> a='~'
> readlink -f $a
/root/fcm/~
> readlink -f "~"
/root/fcm/~
Run Code Online (Sandbox Code Playgroud)

我期待收到'/root/';
谁在进行替换 bash 或 readlink?

shell bash quoting variable-substitution tilde

4
推荐指数
1
解决办法
743
查看次数

当 .profile 不存在用于编辑 PATH 时该怎么办?

我想编辑我的$PATH环境变量。根据几个教程和其他来源(例如这个问答),最常见的方法是编辑~/.profile. 但是,对我来说,不存在这样的文件。我能做什么?(在某些系统上是否有不同的名称?我应该创建它吗?那里需要什么?还有其他方法吗?)

我是网络集群上的用户,显然我不想编辑任何全局环境变量。我之前编辑~/.bashrc过为我的用户更改了一些内容,并且有几个 -~/.文件,但不是~/.profile.

我使用的是 Ubuntu 16.04.2 LTS 代号:Xenial。echo $PATH只给了我一些全局 bin 目录,但是在安装了一些用户特定的 bin(到/path/to/home~/expanded/.local/bin/)之后,我只想将它添加到 PATH。

path environment-variables profile

4
推荐指数
1
解决办法
1万
查看次数

在 Bash 的字符串变量中使用 ~ 和不使用 ~ 有什么不同?

我正在使用名为dotdrop的 dotfile 管理软件。使用名为 的配置文件.env,内容如下:git_folder="~/code/Git".

在第一次使用它之前,也使用脚本来设置这个dotfile工具,如下所示,

#!/bin/bash

env1="~/Dropbox/.env"
env2="/mnt/d/Dropbox/.env"

if [ -f $env1 ]; then
    echo "Found dotdrop env file, installing dotfiles..."
    source $env1
    eval $(grep -v "^#" $env1) dotdrop --cfg=${git_folder}/dotfiles/config.yaml install
elif [ -f $env2 ]; then
    echo "Found dotdrop env file, installing dotfiles..."
    source $env2
    eval $(grep -v "^#" $env2) dotdrop --cfg=${git_folder}/dotfiles/config.yaml install
else echo "Pls sync environment files first!"
fi
Run Code Online (Sandbox Code Playgroud)

如果我将我的配置文件存储在~/Dropbox/.env,当我运行脚本时,我就会得到"Pls sync environment files first!"(如果条件是预期的,则运行)。如果配置文件存储在/mnt/d/Dropbox/.env,脚本将通过 elif …

shell bash quoting home tilde

3
推荐指数
1
解决办法
691
查看次数

命令“which”不显示自定义路径位置的输出

设想

我在 GitHub 上有一个 ProductivityScripts 项目,当我安装 Linux (Debian 9) 时,我将此文件夹添加到PATH以方便使用。

即,我将以下行添加到~/.bashrc

export PATH="~/Dev/ProductivityScripts:$PATH"
Run Code Online (Sandbox Code Playgroud)

有用。我现在可以从任何地方按名称从该文件夹内运行脚本。

alec@my_host:~$ capsalt
SUCCESS!
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入,则which capsalt没有输出。

which大多数事情都有效。

alec@my_host:~$ which git
/usr/bin/git
Run Code Online (Sandbox Code Playgroud)

不应该which也跟踪手动添加到 PATH 的位置可用的脚本吗?或者还有其他原因导致这不起作用?

terminal which

2
推荐指数
1
解决办法
256
查看次数