相关疑难解决方法(0)

我可以在 bash 中“导出”函数吗?

source some_file
Run Code Online (Sandbox Code Playgroud)

some_file:

doit ()
{
  echo doit $1
}
export TEST=true
Run Code Online (Sandbox Code Playgroud)

如果我获取 some_file函数“ doit ”和变量 TEST 在命令行上可用。但是运行这个脚本:

脚本.sh:

#/bin/sh
echo $TEST
doit test2
Run Code Online (Sandbox Code Playgroud)

将返回 TEST 的值,但会产生关于未知函数“doit”的错误。

我也可以“导出”该函数,还是必须在 script.sh 中获取 some_file 才能在那里使用该函数?

bash function

129
推荐指数
4
解决办法
9万
查看次数

将 bash 参数加入带空格的单个字符串中

我试图将 Bash 函数的所有参数连接到一个字符串中,每个参数之间用空格分隔。我还需要让字符串在整个字符串周围包含单引号。

这是我到目前为止...

$array=("$@")
str="\'"
for arg in "${array[@]}"; do
    let $str=$str+$arg+" "
done
let $str=$str+"\'"
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,但我想知道是否有办法实现这一目标?

bash shell-script

63
推荐指数
2
解决办法
9万
查看次数

别名 vs 函数 vs 脚本

这个站点说:“Shell 函数 [比别名] 更快。在函数之后查找别名,因此解析速度较慢。虽然别名更容易理解,但几乎在所有用途中,shell 函数都比别名更受欢迎。”

鉴于此(对与否),shell 函数与独立的 shell 脚本相比如何?一个比另一个有特别的优势,还是更适合某些类型的任务?

shell bash alias function

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

如何在没有空格的情况下向bash别名添加参数?

我们可以轻松做到:

myalias='command param1 param2'
Run Code Online (Sandbox Code Playgroud)

然后myalias param3运行

command param1 param2 param3
Run Code Online (Sandbox Code Playgroud)

我需要一个运行相同但没有最后一个“空格”的别名:

command param1 param2param3
Run Code Online (Sandbox Code Playgroud)

例如,我在 /24 子网中有许多服务器,需要使用 ip 运行相同的命令。所以我想要别名,command param1 192.168.0.然后运行myalias 103,命令将应用于 192.168.0.103。

我试图$1在别名的末尾添加但没有运气。

bash alias

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

bash 配置文件中解析的别名中的命令替换?

我想为随机更改我的mac地址创建一个别名

alias chrandmac="sudo ifconfig en0 ether $(openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//')"
Run Code Online (Sandbox Code Playgroud)

但是命令替换部分在执行配置文件时已经解决了。

alias chrandmac='sudo ifconfig en0 ether 83:3a:bf:fc:4e:29'
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况的任何想法?

freebsd bash alias profile command-substitution

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

如何制作别名以缩短grep命令

在我的编码中,我总是这样做 grep -rnIi "abcabc" . --color

但是,如何制作一个只能让我在搜索字符串中输入一个单词的别名?那可能吗?

shell grep alias

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

用于重定向标准输出和标准错误以及发送到后台的别名

我想创建一个alias重定向标准输出和标准错误gedit/dev/null,同时发送命令到后台。

这有效:

$ alias gedit='gedit $1 > /dev/null 2>&1'
$ gedit file.txt &
Run Code Online (Sandbox Code Playgroud)

但是,将后台指令添加&alias字符串无法正常工作,因为它会立即被解释:

$ alias gedit='gedit $1 > /dev/null 2>&1 &'
[1]+  Done                    gedit > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

我应该如何将此&后台指令添加到alias命令中?

shell io-redirection alias background-process

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

别名解释

我在.bash_aliases. 我c按如下方式定义了别名,但它不能正常工作:

...
alias cd='cd; ls -r --time=atime'
alias c='cd'
...
Run Code Online (Sandbox Code Playgroud)

.bashrc有一行:

alias ls='clear; ls --color=auto'
Run Code Online (Sandbox Code Playgroud)

命令c现在给出糟糕的输出。它应该提供与 cd; clear; ls -r --time=atime --color=auto.

其他问题:当我打字时cd dir我应该呆在里面,dir$HOME结果我在里面。

如何解决这个问题并改进定义别名?被.bash_aliases解释为regular grammar?

alias

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

Bash 别名参数

可能的重复:
如何将参数传递给别名?

我正在尝试创建一个 bash 别名,以便我快速创建当前 git 存储库的存档。

我现在的别名是:

alias gitarch="git archive master --format=tar | gzip >$@"

如果我提供一个完全相同的目标文件,这很好用,gitarch ~/Desktop/MyArchive.tar.gz但我希望能够只输入一个文件名,并且它总是以 tar.gz 扩展名保存到桌面。我试着做:

alias gitarch="git archive master --format=tar | gzip >~/Desktop/$@.tar.gz"

...但它似乎无法正常工作。

谁能告诉我让这个工作的秘诀?

bash alias

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

制作rm命令的别名

为 rm 命令创建别名,以便在rm执行命令时先复制文件/tmp/recycle_bin,然后删除文件。但我在这个过程中遇到了问题。

我执行的步骤:

  1. 我在~/.bashrc文件中写了以下命令:

    alias rm='cp $@ /tmp/recycle_bin && rm $@'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用以下命令执行它:

    . ~/.bashrc
    
    Run Code Online (Sandbox Code Playgroud)
  3. 打开新终端并执行以下命令:

    rm "/home/XXXXX/My_Programs/test_method.py"
    cp: missing destination file operand after '/tmp/recycle_bin'** got this error message 
    
    Run Code Online (Sandbox Code Playgroud)

需要了解:

  1. 即使参数作为我要删除的文件传递给 rm 命令。为什么我收到错误**缺少目标文件操作数之后/tmp/recycle_bin

  2. $@别名命令中的变量未填充?如何调试这个案例并解决?

alias cp rm bashrc

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