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 函数的所有参数连接到一个字符串中,每个参数之间用空格分隔。我还需要让字符串在整个字符串周围包含单引号。
这是我到目前为止...
$array=("$@")
str="\'"
for arg in "${array[@]}"; do
let $str=$str+$arg+" "
done
let $str=$str+"\'"
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,但我想知道是否有办法实现这一目标?
这个站点说:“Shell 函数 [比别名] 更快。在函数之后查找别名,因此解析速度较慢。虽然别名更容易理解,但几乎在所有用途中,shell 函数都比别名更受欢迎。”
鉴于此(对与否),shell 函数与独立的 shell 脚本相比如何?一个比另一个有特别的优势,还是更适合某些类型的任务?
我们可以轻松做到:
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在别名的末尾添加但没有运气。
我想为随机更改我的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)
关于为什么会发生这种情况的任何想法?
在我的编码中,我总是这样做 grep -rnIi "abcabc" . --color
但是,如何制作一个只能让我在搜索字符串中输入一个单词的别名?那可能吗?
我想创建一个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命令中?
我在.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?
可能的重复:
如何将参数传递给别名?
我正在尝试创建一个 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"
...但它似乎无法正常工作。
谁能告诉我让这个工作的秘诀?
为 rm 命令创建别名,以便在rm执行命令时先复制文件/tmp/recycle_bin,然后删除文件。但我在这个过程中遇到了问题。
我执行的步骤:
我在~/.bashrc文件中写了以下命令:
alias rm='cp $@ /tmp/recycle_bin && rm $@'
Run Code Online (Sandbox Code Playgroud)使用以下命令执行它:
. ~/.bashrc
Run Code Online (Sandbox Code Playgroud)打开新终端并执行以下命令:
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)需要了解:
即使参数作为我要删除的文件传递给 rm 命令。为什么我收到错误**缺少目标文件操作数之后/tmp/recycle_bin?
$@别名命令中的变量未填充?如何调试这个案例并解决?