我知道以前可能有人问过这个问题,但我在 Google 上找不到。
给定的
会~ == $HOME是真的吗?
当我打开一个 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.
下面的命令有什么问题?
$ 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 多年后我会问这样的问题......
由于~,.和..是特殊目录,为什么在以下示例中对它们的处理方式不同?
$ echo ~
/home/tim
$ echo ..
..
$ echo .
.
Run Code Online (Sandbox Code Playgroud)
~ 扩展到目录中,但其他两个没有。~不是。我是 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)
我很确定我所做的只是评论/取消评论!根据我的谷歌搜索,这似乎是定义函数的语法。
此文件中的语法错误是什么?我看不出来
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:答案可能很明显,但不适合我。
> 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?
我想编辑我的$PATH环境变量。根据几个教程和其他来源(例如这个问答),最常见的方法是编辑~/.profile. 但是,对我来说,不存在这样的文件。我能做什么?(在某些系统上是否有不同的名称?我应该创建它吗?那里需要什么?还有其他方法吗?)
我是网络集群上的用户,显然我不想编辑任何全局环境变量。我之前编辑~/.bashrc过为我的用户更改了一些内容,并且有几个 -~/.文件,但不是~/.profile.
我使用的是 Ubuntu 16.04.2 LTS 代号:Xenial。echo $PATH只给了我一些全局 bin 目录,但是在安装了一些用户特定的 bin(到/path/to/home~/expanded/.local/bin/)之后,我只想将它添加到 PATH。
我正在使用名为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 …
设想
我在 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 的位置可用的脚本吗?或者还有其他原因导致这不起作用?