当我在系统中搜索 .bashrc 文件时,我得到:
/etc/bash.bashrc
/etc/skel/.bashrc
/root/.bashrc
/usr/share/base-files/dot.bashrc
我变了:
/etc/bash.bashrc
/root/.bashrc
我添加了别名。
alias urldecode='python -c "import sys, urllib as ul; \
print ul.unquote_plus(sys.argv[1])"'
alias urlencode='python -c "import sys, urllib as ul; \
print ul.quote_plus(sys.argv[1])"'
当我运行命令时:
urlencode 'http://example.com space'
它可以从命令行正常工作,但是当我创建一个.sh
文件并在其中输入相同的命令时,我得到:
./tf.sh: line 19: urlencode: command not found
怎么了?
文件内容tf.sh
:
IP=$(curl -d "tool=checurl"-X POST https://site.com/get.py)
url='https://site.com.com/'
path=$(grep -oP '(?<=get.py\?filetype=csv\&data=).*?(?=\")' <<< $IP)
pathfull="get.py?filetype=csv&data=$path"
full=$url$pathfull
#echo $full
urlencode '$full'
答案1
一些评论:
编写 bash shell 脚本时,您需要使用以下命令启动脚本:
#!/bin/bash
有一个已知问题 - 为什么我的 Bash 脚本无法识别别名?- 该 bash 脚本无法识别别名。
解决该问题的一个选择是:
在脚本的开头(之后#!/bin/bash
)添加:
shopt -s expand_aliases
以下是source
带有别名的文件:
source /etc/bash.bashrc
答案2
Bash 别名通常不会在非交互式shell(脚本是)而且,你真的不应该依赖别名在你的脚本中!
将来,你会在另一台机器上需要这个脚本,你会忘记别名,而且它不起作用,您将浪费时间调试该问题!
创建脚本以直接使用所需的命令。或者为复杂或多行命令创建函数。或者更好的是,创建一个包含您需要的常用函数的“库”脚本,然后包含那在你的脚本上。
bash
也就是说,调用所有导出别名的脚本的一个简单方法是通过以下标志通过交互式会话调用它-i
:
$> bash -i ./tf.sh
根据评论进行编辑
脚本的简单bash
函数包装器python
将是:
function urldecode {
PYTHON_ARG="$1" python - <<END
import sys, urllib as ul
print ul.unquote_plus(os.environ['PYTHON_ARG'])
END
}
答案3
在别名中使用“python2”而不是“python”。对我来说,它非常有效。
alias urldecode='python2 -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'