Tom*_*erg 1 linux bash shell command-line
我想要一个脚本来调用 params,它会向我当前的 shell 添加一些别名。必须根据调用参数和我启动它的当前目录来构建别名。如果可能,我不想获取脚本的源代码,只需像任何其他脚本一样运行它即可。
这是我迄今为止所做的:
我写了一个小的 shell 脚本来生成一些别名,比如
echo 'alias foo="$1"'
Run Code Online (Sandbox Code Playgroud)
并将其保存为具有 +x 权限的文件“myscript”。然后我通过控制台执行它来设置别名
$(myscipt hello)
Run Code Online (Sandbox Code Playgroud)
效果很好
当我改变我的shell脚本时
echo 'alias foo="bar $1 -param"'
Run Code Online (Sandbox Code Playgroud)
并像上面一样再次执行,结果是
bash: alias hello" not found
bash: alias -param" not found
Run Code Online (Sandbox Code Playgroud)
???。我已经摆脱了 bar 和 -param 之间的空白,但无法让它工作。
当我执行
source <(myscript hello)
Run Code Online (Sandbox Code Playgroud)
一切都像预期的一样好(这是我现在的解决方案,但不确定它是否是最好的)。
一些想法如何获得更好的解决方案?
你用source错了命令。我假设您有一个myscript包含这些命令的文件。而不是有东西在文件中生成正确的命令,像这样
echo 'alias foo="bar -param"'
Run Code Online (Sandbox Code Playgroud)
你应该只有命令,像这样
alias foo="bar -param"
Run Code Online (Sandbox Code Playgroud)
然后您将脚本直接传递给source命令,该命令在当前 shell 中运行它,以便在脚本中所做的更改反映在您当前的 shell 会话中:
source myscript
Run Code Online (Sandbox Code Playgroud)
此外,该.命令是等效的:
. myscript
Run Code Online (Sandbox Code Playgroud)
(请注意,.和之间有一个空格myscript。)
回应您的评论:您仍然应该只使用一个文件。由于可以使用变量值设置别名的名称,因此您只需在文件中添加逻辑即可执行所有动态别名。这是一个超级简单的例子:
$ foo=hello
$ alias $foo='echo hi'
$ hello
hi
Run Code Online (Sandbox Code Playgroud)
您可以使用条件、循环等为动态别名构建更复杂的逻辑。
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |