Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过在bash别名中连接pwd和string来构建实体名称_Bash_Alias - Fatal编程技术网

通过在bash别名中连接pwd和string来构建实体名称

通过在bash别名中连接pwd和string来构建实体名称,bash,alias,Bash,Alias,很有见地,但我还是有点挣扎 我想要的是创建一个别名,用于在docker容器中备份mysql数据库 本例中的容器名称包含工作目录和文本字符串:directory\u name\u 1 我要运行的命令()如下: 这会将备份文件放在工作目录中 我试过了 alias dumpdb='docker exec `pwd`_my-string mysqldump -uroot --password=password DATABASE > `pwd`/backup.sql' 以及 alias WORK

很有见地,但我还是有点挣扎

我想要的是创建一个别名,用于在docker容器中备份mysql数据库

本例中的容器名称包含工作目录和文本字符串:
directory\u name\u 1

我要运行的命令()如下:

这会将备份文件放在工作目录中

我试过了

alias dumpdb='docker exec `pwd`_my-string mysqldump -uroot --password=password DATABASE > `pwd`/backup.sql'
以及


alias WORKING_DIR=“pwd | rev | cut-d”/“-f1 | rev”
别名DOCKER\u CONTAINER='echo$(工作目录)\u my-wpdb\u 1'
别名dumpdb='docker exec$(docker_CONTAINER)mysqldump-uroot--password=password数据库>`pwd`/backup.sql'


但我还在码头上闲逛。请有人来指导我好吗?

一个好的解决方案是使用函数(而不是别名)

为什么? 因为alias应该只用于简单的修改(例如向命令添加额外的参数/标志)

因此,我们可以创建一个函数,也可以创建一个shell脚本。在我们的例子中,由于这是一个非常简单的问题,我们可以创建一个函数

你应该把它写在.bash_档案上

例如,您可以尝试定义以下函数

function dumpdb()
{
    local wkdir="basename $(pwd)"
    local container="${wkdir}_my-wpdb_1"
    docker exec ${container} mysqldump -uroot --password=password DATABASE > backup.sql
}

写了这些之后,重新加载bash_配置文件(使用source.bash_配置文件或创建新会话),您将能够在控制台上执行dumpdb,就像它是一个别名一样。

一个好的解决方案是使用函数(而不是别名)

dumpdb () {
   docker exec "${PWD##*/}_my-wpdb_1" \
       mysqldump -uroot --password=password DATABASE >backup.sql
}
为什么? 因为alias应该只用于简单的修改(例如向命令添加额外的参数/标志)

因此,我们可以创建一个函数,也可以创建一个shell脚本。在我们的例子中,由于这是一个非常简单的问题,我们可以创建一个函数

你应该把它写在.bash_档案上

例如,您可以尝试定义以下函数

function dumpdb()
{
    local wkdir="basename $(pwd)"
    local container="${wkdir}_my-wpdb_1"
    docker exec ${container} mysqldump -uroot --password=password DATABASE > backup.sql
}
写了这些之后,重新加载您的bash_配置文件(使用source.bash_配置文件或创建新会话),您将能够在控制台上执行dumpdb,就像它是一个别名一样

dumpdb () {
   docker exec "${PWD##*/}_my-wpdb_1" \
       mysqldump -uroot --password=password DATABASE >backup.sql
}
或者,作为别名:

alias dumpdb='docker exec "${PWD##*/}_my-wpdb_1" \
    mysqldump -uroot --password=password DATABASE >backup.sql'
通过使用函数,可以向其传递数据库名称,例如:

dumpdb () {
   docker exec "${PWD##*/}_my-wpdb_1" \
       mysqldump -uroot --password=password "$1" >backup.sql
}

dumpdb "my_database"
${PWD###*/}
将扩展到父工作目录的basename;如果
$PWD
/home/user/stuff
,那么
${PWD##*/}
将是
stuff

如果没有为重定向到的文件指定目录名,则该文件将最终位于当前工作目录中,因此不需要使用
pwd

或者,作为别名:

alias dumpdb='docker exec "${PWD##*/}_my-wpdb_1" \
    mysqldump -uroot --password=password DATABASE >backup.sql'
通过使用函数,可以向其传递数据库名称,例如:

dumpdb () {
   docker exec "${PWD##*/}_my-wpdb_1" \
       mysqldump -uroot --password=password "$1" >backup.sql
}

dumpdb "my_database"
${PWD###*/}
将扩展到父工作目录的basename;如果
$PWD
/home/user/stuff
,那么
${PWD##*/}
将是
stuff


如果您没有为重定向到的文件指定目录名,该文件将在当前工作目录中结束,因此不需要使用
pwd

我没有足够的声誉发表评论,Kusalanda的回答非常完美

对于任何需要更普遍解决方案的人来说,这是对库萨兰达答案的一个小小调整

dumpdb () {
   docker exec "$1" \
      mysqldump -uroot --password=secret "$2" > sql/dump.sql
}
这样可以传递2个参数。一个用于容器,一个用于数据库名称

您可以简单地调用该函数: dumpdb示例\u容器\u 1数据库


如果您想给出更多的参数,只需放入$3、$4等并调用函数dumpdb arg1 arg2 arg3 arg4 etc,我没有足够的声誉来评论,Kusalanda的答案非常完美

对于任何需要更普遍解决方案的人来说,这是对库萨兰达答案的一个小小调整

dumpdb () {
   docker exec "$1" \
      mysqldump -uroot --password=secret "$2" > sql/dump.sql
}
这样可以传递2个参数。一个用于容器,一个用于数据库名称

您可以简单地调用该函数: dumpdb示例\u容器\u 1数据库


如果要提供更多参数,只需放入$3、$4等并调用函数dumpdb arg1 arg2 arg3 arg4 etc

是否必须使用别名?也可以通过创建一个函数来实现。你的意思是像bash脚本一样,理论上我可以为它创建一个别名?我只是想简化流程。
$(pwd)/backup.sql
./backup.sql
相同,后者与
>backup.sql
相同。我看不出您在备份位置方面存在问题。是否必须使用别名?也可以通过创建一个函数来实现。你的意思是像bash脚本一样,理论上我可以为它创建一个别名?我只是想简化流程。
$(pwd)/backup.sql
./backup.sql
相同,后者与
>backup.sql
相同。我看不出你在备份位置上有什么问题。谢谢。我接受了另一个答案,因为这是第一个答案,他似乎比你更能利用这些分数。两者都很有用。我想人们可以扩展到接受
$2
$3
,如果参数没有给定,可以使用
if
语句填充变量?@MikeiLL是的,在函数中几乎可以做任何你想做的事情。看起来
~/.bashrc
可能会变得相当长。如果人们想为不同的工作流加载不同的函数集和别名,通常会怎么做?@MikeiLL将它们放在不同的文件中,并在需要时从
.bashrc
?@MikeiLL获取这些文件。谢谢。我接受了另一个答案,因为这是第一个答案,他似乎比你更能利用这些分数。两者都很有用。我想人们可以扩展到也接受
$2
$3
,并使用
if
语句来填充变量,如果参数没有给定?@MikeiLL是的,你可以在函数中做你想做的任何事情。看起来
~/.bashrc
可能会变得相当长