如何将命令行参数传递给别名?这是一个示例:
alias mkcd='mkdir $1; cd $1;'
但在这种情况下,$ xx将在别名创建时转换,而不是在运行时转换.但是,我创建了一个使用shell函数的解决方法(在googling之后),如下所示:
function mkcd(){
mkdir $1
cd $1
}
只是想知道是否有办法制作接受CL参数的别名.
顺便说一句 - 我使用'bash'作为我的默认shell.
当我想取消暂存文件时,我所有的 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 …
我的bash脚本中有以下功能:
make() {
cd Python-3.2
make
}
Run Code Online (Sandbox Code Playgroud)
在此脚本中调用make时,将调用此函数,该函数将进行递归.到呼叫make的函数内部实际上应该调用外部make实用程序.除了重命名我的make函数之外,最简单的方法是什么?
我正在制作一个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'"但我无法保证用户会这样做.
我试图找出我认为在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
我知道我需要一些逃避或引用某个地方......清晨的阴霾在我的脑子里仍然很厚.
我已经回顾了这些问题:
我的程序必须监视与掩码匹配的文件.文件夹名称和掩码通过命令行参数传递.但是在我使用之前,面具会被第一场比赛取代!
双引号也没有效果,也没有其他符号.我尝试使用\或'保护输入.然而,这个符号将被添加到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)
我知道使用引号或反斜杠并不是一个坏主意,但我认为存在更好的方法.
我有一个脚本。它需要参数,但我希望它在收到字符串“ *”时将其自动完成为列表变量中的匹配字符串。
不幸的是,如果用户不使用反斜杠转义通配符来转义星号,这是不可能的:
foo.py ba\* # Will expand to "bar"
Run Code Online (Sandbox Code Playgroud)
不这样做会导致 bash 将其扩展为工作目录中的文件,然后将其传递给我的脚本。
告诉 bash 不自动扩展星号并将其传递给我的脚本需要什么。也许是安装脚本?