相关疑难解决方法(0)

如何将命令行参数传递给shell别名?

如何将命令行参数传递给别名?这是一个示例:

alias mkcd='mkdir $1; cd $1;'

但在这种情况下,$ xx将在别名创建时转换,而不是在运行时转换.但是,我创建了一个使用shell函数的解决方法(在googling之后),如下所示:

function mkcd(){
  mkdir $1
  cd $1
}

只是想知道是否有办法制作接受CL参数的别名.
顺便说一句 - 我使用'bash'作为我的默认shell.

shell alias

278
推荐指数
7
解决办法
19万
查看次数

什么是“git restore”命令,“git restore”和“git reset”有什么区别?

当我想取消暂存文件时,我所有的 Git 教程都显示如下内容:

$ git add *
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README
    modified:   CONTRIBUTING.md
Run Code Online (Sandbox Code Playgroud)

此提示告诉我们git reset用于取消暂存文件。

但是,在我的终端中,我看到:

git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    renamed:    cat.js -> catcat.js
    renamed:    tolendo.gogo -> tolendo.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    readme (copy).md
    tolendo (copy).txt
    zing (copy).html
Run Code Online (Sandbox Code Playgroud)

我的终端告诉我使用,git …

git restore git-reset unstage

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

当bash函数具有相同名称时调用程序

我的bash脚本中有以下功能:

make() {
    cd Python-3.2
    make
}
Run Code Online (Sandbox Code Playgroud)

在此脚本中调用make时,将调用此函数,该函数将进行递归.到呼叫make的函数内部实际上应该调用外部make实用程序.除了重命名我的make函数之外,最简单的方法是什么?

bash shell

24
推荐指数
2
解决办法
4323
查看次数

在bash参数中保留引号

我正在制作一个bash脚本,它将打印并将复杂的参数传递给另一个外部程序.

./script -m root@hostname,root@hostname -o -q -- 'uptime ; uname -a'
Run Code Online (Sandbox Code Playgroud)

如何打印原始参数:

-m root@hostname,root@hostname -o -q -- 'uptime ; uname -a'
Run Code Online (Sandbox Code Playgroud)

使用$@$*删除uptime ; uname -a可能导致意外结果的单引号.我的脚本不需要解析每个参数.我只需要打印/记录参数字符串并将它们传递给另一个程序,确切地说它们是如何给出的.

我知道我可以用类似的东西来逃避引号, "'uptime ; uname -a'"但我无法保证用户会这样做.

linux bash

17
推荐指数
3
解决办法
9101
查看次数

循环数组,防止通配符扩展(*)

我试图找出我认为在BASH中一个微不足道的问题,但我很难找到正确的语法.我想循环遍历一组值,其中一个是星号(*),我不希望在此过程中发生任何通配符扩展.

 WHITELIST_DOMAINS="* *.foo.com *.bar.com"
 for domain in $WHITELIST_DOMAINS
 do
    echo "$domain"
 done
Run Code Online (Sandbox Code Playgroud)

我有上面的内容,我正在尝试获得以下输出:

 *
 *.foo.com
 *.bar.com
Run Code Online (Sandbox Code Playgroud)

取而代之的是,我在当前目录中获得了一个目录列表,后跟*.foo.com和*.bar.com

我知道我需要一些逃避或引用某个地方......清晨的阴霾在我的脑子里仍然很厚.

我已经回顾了这些问题:

如何在bash中的变量中转义通配符扩展?

停止shell通配符扩展?

variables bash wildcard expansion

5
推荐指数
1
解决办法
2425
查看次数

停止将命令行参数中的通配符扩展为Java

我的程序必须监视与掩码匹配的文件.文件夹名称和掩码通过命令行参数传递.但是在我使用之前,面具会被第一场比赛取代!

双引号也没有效果,也没有其他符号.我尝试使用\'保护输入.然而,这个符号将被添加到args中,这是我不想要的.知道怎么解决它?

public static void main(String[] args) throws IOException {
    File dir = new File(args[0]);
    String mask = args[1];
    System.out.println(dir.getAbsolutePath());
    System.out.println(mask);
    String regex = args[2];
    System.out.println(regex);
}
Run Code Online (Sandbox Code Playgroud)

正则表达式args[2]也替换为文件夹中的某些文件.

Input: "E:\Programming\Java\Task7" *.??? ...
Ouput: E:\Programming\Java\Task7 .git Task7.iml

Input: "E:\Programming\Java\Task7" *.????* [a-zA-Z]
Output: E:\Programming\Java\Task7 .idea [a-zA-Z]

Input: "E:\Programming\Java\Task7" '.???' ...
Output: E:\Programming\Java\Task7 '.???' ...

Input: "E:\Programming\Java\Task7" \\'.???'\\ ...
Output: E:\Programming\Java\Task7 \'.???'\ ...
Run Code Online (Sandbox Code Playgroud)

我知道使用引号或反斜杠并不是一个坏主意,但我认为存在更好的方法.

java shell cmd wildcard-expansion

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

如何告诉 bash 在 Python 脚本中专门转义通配符

我有一个脚本。它需要参数,但我希望它在收到字符串“ *”时将其自动完成为列表变量中的匹配字符串。

不幸的是,如果用户不使用反斜杠转义通配符来转义星号,这是不可能的:

foo.py ba\*  # Will expand to "bar"
Run Code Online (Sandbox Code Playgroud)

不这样做会导致 bash 将其扩展为工作目录中的文件,然后将其传递给我的脚本。

告诉 bash 不自动扩展星号并将其传递给我的脚本需要什么。也许是安装脚本?

python bash shell wildcard

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