相关疑难解决方法(0)

如何在.bashrc中创建vim调用函数?

环境: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函数无法调用 …

vim bash function

11
推荐指数
2
解决办法
1528
查看次数

我可以在sh(Bourne shell)中导出函数吗?

是否可以在Bourne shell(sh)中导出函数?

在回答这个问题的指示如何做到这一点的bash,ksh和zsh,但没有透露是否sh支持它.

如果sh绝对不允许,我将不再花时间寻找它.

unix bash shell function sh

8
推荐指数
1
解决办法
2032
查看次数

Windows上的Bash-exe文件的别名

我在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文件,并为每次出现的事件添加一个别名,但这似乎不是一个很干净的解决方案(但我猜它会很好地达到其目的)。

有没有简单干净的解决方案来实现这一目标?

windows bash ubuntu docker windows-subsystem-for-linux

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

检查是否定义了功能

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语句之前: …

bash shell function

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

你怎么能使用纯粹的unset shell内置?你能编写一些免于篡改的shell脚本吗?

我的意思是我想使用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怎么样?

security bash zsh sh dash-shell

3
推荐指数
2
解决办法
684
查看次数