首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows :从.bash_profile文件运行时没有这样的文件或目录的消息,而不是从终端运行的消息

Windows :从.bash_profile文件运行时没有这样的文件或目录的消息,而不是从终端运行的消息
EN

Ask Ubuntu用户
提问于 2020-02-27 09:58:11
回答 2查看 485关注 0票数 0

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

代码语言:javascript
复制
chmod 600 passwords.sh
sudo shown toot:root passwords.sh

然后,在我的.bash_profile中(在主文件夹~/)中,我有以下函数

代码语言:javascript
复制
function passwords {
     case "1$" in
          'update')
               'sudo vim ~/../passwords.sh';;
           *)
               'sudo bash ~/../passwords.sh';;
     esac
}

直接从终端运行命令,没有问题;

代码语言:javascript
复制
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]

但是运行新函数yeilds

代码语言:javascript
复制
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文件中的其他类似元素可以正常工作。谢谢你的帮助^^

EN

回答 2

Ask Ubuntu用户

发布于 2020-02-27 10:30:51

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

代码语言:javascript
复制
function passwords {
     case "$1" in
          'update')
               sudo vim ~/../passwords.sh;;
           *)
               sudo bash ~/../passwords.sh;;
     esac
}
票数 1
EN

Ask Ubuntu用户

发布于 2020-02-27 10:32:19

问题是,倾斜~不会在任何类型的引号中展开。因此,您需要以这样的方式更改相关行:

代码语言:javascript
复制
sudo vim ~'/../passwords.sh';;

或更好:

代码语言:javascript
复制
sudo vim "$HOME/../passwords.sh";; 

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

代码语言:javascript
复制
sudo vim "/home/passwords.sh";; 

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

代码语言:javascript
复制
command 'first positional parameter' 'second one' "$THE_THIRD" our\ forth\ parameter

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

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1213381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档