小编dou*_*own的帖子

如何在Vim脚本中使用Windows环境变量?

我有一个Vim脚本调用外部shell脚本并将输出读入当前缓冲区.它在Unix系统中运行良好.我正在尝试使脚本与操作系统无关,所以我希望它也适用于Windows用户.这是脚本中的相关行:

:exe ":0r !$HOME/bin/shell_script"
Run Code Online (Sandbox Code Playgroud)

根据Vim的文档,$HOME对Windows用户来说也应该很好.在命令模式下在Win XP上使用gvim,做

:echo $HOME
Run Code Online (Sandbox Code Playgroud)

确实产生了"C:\ Documents and Settings\my_user".

但是,我的Vim脚本(针对反斜杠调整)在Windows机器上失败,并在DOS cmd.exe窗口中显示消息

$ HOME\bin\shell_script"找不到.

换句话说,$HOME在将其传递给cmd.exe之前,Vim似乎没有扩展其值.

我也不能使用%APPDATA%,因为Vim解释%为当前文件并预先/附加文件名APPDATA.很奇怪,Vim 确实扩展%但不扩展$HOME.

如何$HOME正确扩展?是因为我exe在vim脚本中使用了吗?

windows vim environment

8
推荐指数
2
解决办法
3477
查看次数

为什么大写字母出现在ASCII表中的小写字母之前?

在我的一次采访中,面试官问我为什么大写字母在ASCII表格中的小写字母之前,我在google.com上搜索但没有找到任何内容,有人能给我答案吗?多谢!

ascii lowercase uppercase

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

删除下划线并在其后大写字符

我只是想知道是否有办法替换文件夹中每个文件中的每个下划线(比如.java文件)并将下一个字符转换为大写,如

  • getEmployee_NamegetEmployeeName
  • us_employee_nameusEmployeeName

如果我们有什么id,我们希望利用两ID,如

  • us_employee_idusEmployeeID

自从我还在学习以来,我还没有尝试过任何东西.我可以做类似的事情s/_/\U\1/g,sed还是可以使用某些脚本来执行此操作?

unix awk command-line replace sed

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

if语句始终求值为TRUE

无论我的进程是启动还是停止,是否有任何理由为什么此脚本始终返回"正在运行"?

if ps ax | grep -v grep | grep "processName" > /dev/null
then
   echo $"running"
else
   echo $"not running"
fi
Run Code Online (Sandbox Code Playgroud)

非常感谢你

更新: 我添加了我的脚本的完整示例,也许其他地方有问题.

case "$1" in
  start)
    # Start daemons.

    echo -n $"Starting daemon: "
    ;;

  stop)
    # Stop daemons.
    echo -n $"Shutting down: "
    echo
    ;;
  status)
    pgrep -f "ProcessName" > /dev/null
    if [ $? -eq 0 ]; then
        echo $"ProcessName is running"
    else
        echo $"ProcessName is not running"
    fi
    ;;
  restart)
    $0 stop
    $0 start
    ;;

  *) …
Run Code Online (Sandbox Code Playgroud)

unix linux bash process

7
推荐指数
1
解决办法
3741
查看次数

从sh或bash脚本运行/调用windows批处理脚本

我有一个sh/bash脚本需要调用带参数的批处理文件(参数是文件名,并以DOS/Windows格式给出).

基本上我有: script.sh

#!/bin/sh
declare var1=$1
declare var2=$2
dosomething var1 var2
...
<invoke batch script> var1 var2
...
dosomethingelse
Run Code Online (Sandbox Code Playgroud)

我正在使用GNU bash, version 3.1.0(3)-release (i686-pc-msys)shell作为shellmsysgit

问题是,当我从脚本运行时: $COMSPEC /c batchfile param1 param2 要么我得到一个看似bash的"空提示",但是控制台上没有显示命令结果,要么cmd.exe启动,要么不执行脚本.

我试过引用这些参数来像这样猛击:

$COMSPEC /c \"batchfile param1 param2\"
$COMSPEC /c \"\"batchfile param1 param2\"\"
$COMSPEC /c \"\"batchfile \"param1\" \"param2\"\"\"
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何结果.

bash cmd batch-file msysgit

7
推荐指数
1
解决办法
5257
查看次数

如何将自定义片段添加到zen-coding?

我正在尝试如何为Notepad ++添加自定义片段到Zen Coding(ZC)插件.我找到了ZC存储其片段的文件

C:\Program Files\Notepad++\plugins\NppScripting\includes\Zen Coding.js

但我有一些问题:

  1. "片段"和"缩写"之间有什么区别?
  2. ZC在不同的上下文中以不同的方式扩展了类型缩写.例如Z,随后Ctrl+ E有时膨胀,z-index:|;并且有时<z></z>.ZC如何识别背景?

notepad++ emmet

7
推荐指数
1
解决办法
2590
查看次数

适用于Linux文件权限的正则表达式(数字表示法)

我不能为我的生活找到适当的正则表达式.

我正在寻找的是匹配Linux文件权限的有效数字表示的正则表达式(例如,740表示全部读取,777表示全部全部).到目前为止,我已经尝试了以下内容:

strtotest=740
echo "$strtotest" | grep -q "[(0|1|2|3|4|5|7){3}]"
if [ $? -eq 0 ]; then
    echo "found it"
fi
Run Code Online (Sandbox Code Playgroud)

与上面的问题是,正则表达式匹配任何事1-57在里面,不管在任何其它字符.例如,如果strtotest要更改为709,则条件为真.我也试过了[0|1|2|3|4|5|7{3}],[(0|1|2|3|4|5|7{3})]但那些效果不好.

我正在使用正则表达式错误,还是我错过了必须处理的内容grep

regex linux bash grep

7
推荐指数
2
解决办法
1650
查看次数

双管道后Bash中冒号的含义

我试图理解这段代码:

. functions.sh || { : ; echo "Error while loading the specified file" >&2; exit 2; }
Run Code Online (Sandbox Code Playgroud)

我知道当指定的文件不可用时,会调用括号中的代码.但这: ;意味着什么?此外,当您删除它时,脚本不起作用.

bash

7
推荐指数
1
解决办法
4042
查看次数

join()函数返回的是类型后跟十六进制数而不是连接字符串

本质上,我想获取一个数组并创建一个单独的字符串,所述数组的元素由换行符分隔.

我有一个名为的数组$zones.输出引用以$zones确认它是一个数组.

以下代码:

print_log(Dumper($zones));
print_log('-------');
print_log(Dumper(join("\n",$zones)));
Run Code Online (Sandbox Code Playgroud)

得到以下输出

  [2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = [
          'fake.com25',
          'fake.com2',
          'fake.com27',
          'fake.com43',
          'fake.com41',
          'fake.com40',
          'fake.com39',
          'fake.com37',
          'fake.com36',
          'fake.com35',
          'fake.com31',
          'fake.com56',
          'fake.com55',
          'fake.com54',
          'fake.com53',
          'fake.com52',
          'fake.com51',
          'fake.com50',
          'fake.com49',
          'fake.com48',
          'fake.com42',
          'fake.com38',
          'fake.com34',
          'fake.com33',
          'fake.com32',
          'fake.com30',
          'fake.com29',
          'fake.com28',
          'fake.com26',
          'fake.com24',
          'fake.com23',
          'fake.com69',
          'fake.com68',
          'fake.com67',
          'fake.com66',
          '0',
          'fake.com44',
          'fake.com45',
          'fake.com46',
          'fake.com278'
        ];

[2013-06-15 16:23:29 -0500] info [dnsadmin] -------
[2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = 'ARRAY(0x170cf0d8)';
Run Code Online (Sandbox Code Playgroud)

我真的不想手动循环这个数组.有人可以解释为什么join()函数返回类型的名称和十六进制数字?

perl

7
推荐指数
3
解决办法
175
查看次数

Powershell ISE似乎与交互式命令挂起.

我刚刚下载了Powershell 2.0,我正在使用ISE.总的来说我真的很喜欢它,但我正在寻找一个解决方法.有很多遗留命令是交互式的.例如xcopy,如果告知用户覆盖文件,则会默认提示用户.

在Powershell ISE中,这似乎悬而未决

mkdir c:\tmp                                                                                       
cd c:\tmp                                                                                          
dir > tmp.txt                                                                                      
mkdir sub                                                                                          
xcopy .\tmp.txt sub # fine
xcopy .\tmp.txt sub # "hang" while it waits for a user response.
Run Code Online (Sandbox Code Playgroud)

第二个xcopy是提示用户允许覆盖C:\ tmp\sub\tmp.txt,但提示不会显示在ISE输出窗口中.我可以从cmd.exe运行这个很好但是ISE有什么用?我怎么知道什么时候需要哪一个?

powershell-2.0

6
推荐指数
2
解决办法
2074
查看次数