Windows Ubuntu:从 .bash_profile 文件运行时出现“没有此文件或目录”消息,但从终端运行则不出现

Windows Ubuntu:从 .bash_profile 文件运行时出现“没有此文件或目录”消息,但从终端运行则不出现

因此,我使用 Windows Bash 创建了一个 .sh 文件(位于 ~/../ 中的 passwords.sh),并在其上运行了以下命令:

chmod 600 passwords.sh
sudo shown toot:root passwords.sh

然后在我的.bash_profile(位于主文件夹〜/)中我有以下功能

function passwords {
     case "1$" in
          'update')
               'sudo vim ~/../passwords.sh';;
           *)
               'sudo bash ~/../passwords.sh';;
     esac
}

直接从终端运行命令不会产生任何问题;

ruben@DESKTOP-4RTTB0B:/home$ sudo bash ~/../passwords.sh
[sudo] password for ruben:
[content displayed as intentionally]
ruben@DESKTOP-4RTTB0B:/home$ sudo vim ~/../passwords.sh
[open with vim editor]

但运行新功能会产生

ruben@DESKTOP-4RTTB0B:/home$ passwords
-bash: sudo bash ~/../passwords.sh: No such file or directory
ruben@DESKTOP-4RTTB0B:/home$ passwords update
-bash: sudo vim ~/../passwords.sh: No such file or directory

为什么它在终端中有效,但在 .bash_profile 文件中无效?.bash_profile 文件中的其他类似功能可以正常工作。感谢大家的帮助^^

答案1

你不应该引用命令。这样写:

function passwords {
     case "$1" in
          'update')
               sudo vim ~/../passwords.sh;;
           *)
               sudo bash ~/../passwords.sh;;
     esac
}

答案2

问题是,波浪号~不会在任何类型的引号中展开。因此,您需要按如下方式更改相关行:

sudo vim ~'/../passwords.sh';;

或更好:

sudo vim "$HOME/../passwords.sh";; 

并且为什么不(在这种情况下)使用完整路径而不是相对路径:

sudo vim "/home/passwords.sh";; 

命令中的引号用于分隔命令位置参数的值,否则您需要转义每个空格或任何其他特殊字符:

command 'first positional parameter' 'second one' "$THE_THIRD" our\ forth\ parameter

注意,大多数 shell 只会扩展双引号内的变量,在单引号内,变量名称将被视为字符串,不会扩展。

相关内容