我正在尝试从bash函数内部安装smb共享。在提示下可以进行以下操作:
mount_smbfs "//domain;user@foo.domain.com/share" ~/mnt/share
在我的函数中,我将其编写为:
mount_smbfs "//domain\;user@$2" $HOME/mnt/$1
我还没有开始工作。它只是输出mount命令的用法。因此,我在函数的开头添加了一个set -x
,然后可以看到命令执行如下:
'mount_smbfs //domain\;user@foo.domain.com/share' /Users/user/mnt/share
因此,好像没有传递mount_smbfs的第二个参数。谁能告诉我为什么?
更新
这是我的职能:
mnt-prod() {
set -x
umount $HOME/mnt/$1
mkdir -p $HOME/mnt/$1
mount_smbfs "//domain\;user@$2" $HOME/mnt/$1
cd $HOME/mnt/$1
}
这是我要使用的别名:
alias mnt-share="mnt-prod share foo.domain.com/share;"
解决方案
最后我对@ sjnarv的好答案做了一个稍微修改的版本:
mnt-prod() {
local dir="$1" host="$2" share="$3"
umount "$HOME/mnt/$dir" || true
mkdir -p "$HOME/mnt/$dir" && \
mount_smbfs "//production;tas@$host/$share" "$HOME/mnt/$dir" && \
cd "$HOME/mnt/$dir"
}
答案 0 :(得分:1)
@chepner的上述第一条评论似乎仍然最相关。如果我把\字符放在前面;我看到类似这样的错误:
mount_smbfs: URL parsing failed, please correct the URL and try again: Invalid argument
更长的答案
使用mount_smbfs
似乎意味着使用MacOS(与各种Linux发行版上的mount.cifs
类似)。我在这里的评论反映了在Mac上进行尝试的情况。
从mount_smbfs
的用法消息/手册页:
mount_smbfs [-N] [-o options] [-d mode] [-f mode] [-h] [-s] [-v]
//[domain;][user[:password]@]server[/share] path
您的函数为domain
,user
,server
和share
提供值,并使用围绕{{1}的局部约定构造path
}值。
我的网络环境具有自己的特定于位置的详细信息,因此,我没有将我的本地性强加到share
中,而是更新了该函数以使用更多的参数来构造最终的mnt-prod
命令以更通用的方式IMO使得它更加灵活,并且易于阅读和维护。
请考虑以下内容:
mount_smbfs
选项(|| true
)的情况下,使用umount
惯用法让errexit
命令良性地失败set -e
创建一个&&
命令列表,该命令列表在第一次命令失败时中止建议的更新:
mkdir && mount_smbfs && cd
如果我的本地Mac用户名是mnt-prod() {
local domain="$1" user="$2" host="$3" share="$4"
set -x
umount "$HOME/mnt/$share" || true
mkdir -p "$HOME/mnt/$share" && \
mount_smbfs "//$domain;$user@$host/$share" "$HOME/mnt/$share" && \
cd "$HOME/mnt/$share"
set +x
}
,我的域名是jdoe
,我的Samba / SMB / CIFS服务器是MYDOMAIN
,我的用户名my.domain.net
,并共享名称guest
,用法如下:
public
...并且安装成功:本地路径/ Users / jdoe / mnt / public提供对远程共享$ mnt-prod MYDOMAIN guest my.domain.net public
+ umount /Users/jdoe/mnt/public
umount: /Users/jdoe/mnt/public: not currently mounted
+ true
+ mkdir -p /Users/jdoe/mnt/public
+ mount_smbfs '//MYDOMAIN;guest@my.domain.net/public' /Users/jdoe/mnt/public
+ cd /Users/jdoe/mnt/public
+ set +x
$
的访问。