环境:debian9 + vim7.4.
cat .bashrc
add(){
echo $(expr $1 + $2)
}
Run Code Online (Sandbox Code Playgroud)
现在在vim中编辑一个文件
add 1 5
Run Code Online (Sandbox Code Playgroud)
在命令模式下运行它:w !bash,发生错误.
bash: line 1: add: command not found
shell returned 127
Run Code Online (Sandbox Code Playgroud)
1. set shellcmdflag=-ic 在/ etc/vim/vimrc和.bashrc以及.vimrc中添加.
2.reboot
3.vim test.sh
进入命令模式
:verbose set shellcmdflag
shellcmdflag=-ic
Last set from ~/.vimrc
Run Code Online (Sandbox Code Playgroud)
4.在test.sh中输入两行
ls
add 5 6
:w !bash
a1.sh test.py
bash: line 2: add: command not found
shell returned 127
Run Code Online (Sandbox Code Playgroud)
:execute '! source ~/.bashrc; source '.expand('%:p')可以发出两个命令:ls并add运行.
重启后,
1.add函数无法调用 …
我在Windows上的Ubuntu上使用Bash,在Windows 10上运行bash的方式。我安装了Creators更新,而Ubuntu版本是16.04。
我最近在玩npm,node.js和Docker,对于docker,我发现可以在Windows中安装并运行它,而仅使用bash的客户端部分,直接从Windows的Program Files中调用docker.exe文件文件文件夹。我只是更新了path变量,将docker的路径包括为PATH=$PATH:~/mnt/e/Program\ Files/Docker/(放在.bashrc中),然后可以通过bash call运行docker docker.exe。
但是,嘿,这个bash,我不想在命令(程序)的末尾写.exe。我可以简单地添加一个别名alias docker="docker.exe",但是接下来我想使用docker-compose,我必须添加另一个。我当时正在考虑向.bashrc中添加一个脚本,该脚本将遍历路径变量,并在该路径变量中指定的每个路径中搜索.exe文件,并为每次出现的事件添加一个别名,但这似乎不是一个很干净的解决方案(但我猜它会很好地达到其目的)。
有没有简单干净的解决方案来实现这一目标?
rbenv当我键入以下内容时,我有一个简单的脚本来检查是否为函数:
$ type rbenv | grep "rbenv is a function"
进入外壳,得到肯定的结果,外壳响应为。rbenv is a function
然后,我想在脚本中执行此操作,因此在文件中编写:
#!/bin/bash
if type rbenv | grep -q "rbenv is a function" ;
then
echo "success!"
else
echo "something went wrong."
fi
Run Code Online (Sandbox Code Playgroud)
我无法为我工作,此脚本的结果是something went wrong.我想让它正常工作,并且也许知道是否有更好的解决方案可以完成此任务。
我也尝试过此版本的脚本,但没有成功。
if [[ $(type rbenv | head -1) == "rbenv is a function" ]] ;
...
Run Code Online (Sandbox Code Playgroud)
type rbenv | head -1在shell中编写会输出rbenv is a function。我不知道自己在做什么错,请指出我的错误。
解决此问题的部分方法是export -f rbenv在运行脚本之前在外壳中运行,但这不是正确的方法吗?
完全解决方案显然,我需要从安装rbenv重复我的步骤,因为它要放在if语句之前: …
我的意思是我想使用unset它本身不是shell函数.如果我能做到这一点,我可以command通过跑步来确保它是纯粹的
#!/bin/sh
{ \unset -f unalias command [; \unalias unset command [ } 2>/dev/null;
# make zsh find *builtins* with `command` too:
[ -n "$ZSH_VERSION" ] && options[POSIX_BUILTINS]=on
Run Code Online (Sandbox Code Playgroud)
如果我使用的是Debian Almquist shell(破折号),我认为我可以依赖它\unset是纯粹的.至少我不能定义一个名为shell函数unset在dash.而在我bash或之中zsh我可以定义unset() { echo fake unset; },然后我无法取消该功能:\unset -f unset输出"假未设置".
与此相关,在bash脚本中,可以导出函数,export -f <function name>以便可以在bash脚本调用的脚本中使用它.但是,这在dash脚本中不起作用.我想知道,如果我不得不担心一个命令被定义为我写的脚本文件外的shell函数,如果我正在使用dash?其他POSIX兼容的shell怎么样?