bashでディレクトリを自動的にマウントし、~/tmp
ディレクトリが存在しない場合はディレクトリの作成に使用する関数を作成しました。
# mkdir & mount auto
mnt() {
dir="$1";
mkdir ~/tmp/$dir;
/usr/bin/sudo mount /dev/$dir ~/tmp/$dir;
cd ~/tmp/$dir;
}
いくつかの問題...
dir="$1";
変数dirをmnt以降の入力に設定します
。この変数$1
をラップする必要があり、""
各行の後にはaが必要ですか?;
そうでない場合は動作しますか;
?
/usr/bin/sudo mount /dev/$dir ~/tmp/$dir;
YouTubeのビデオを見ました。Bashの$ PATHについて知っておくべきこと
スクリプトにはフルパスを作成する必要があります...
/usr/bin/sudo
代わりに...
sudo
その理由は何ですか?
ベストアンサー1
この機能のより良いバージョン:
mnt() {
typeset dir # for local scope for the variable.
# assumes ksh88/pdksh/bash/zsh/yash. Replace typeset with
# local for ash-based shells (or pdksh/bash/zsh)
dir=$1 # here it's the only place where you don't need the quotes
# though they wouldn't harm
mkdir -p -- ~/tmp/"$dir" || return
# quotes needed. mkdir -p creates intermediary directories as required
# and more importantly here, doesn't fail if the directory already
# existed.
# We return from the function if mkdir failed (with the exit status
# of mkdir). The -- is for the very unlikely even that your $HOME starts
# with "-". So you may say it's a pedantic usage here. But it's good
# habit to use it when passing an arbitrary (not known in advance)
# argument to a command.
sudo mount "/dev/$dir" ~/tmp/"$dir" || return
# Or use /usr/bin/sudo if there are more than one sudo commands in $PATH
# and you want to use the one in /usr/bin over other ones.
# If you wanted to avoid calling an eventual "sudo" function or alias
# defined earlier in the script or in a shell customisation file,
# you'd use "command sudo" instead.
cd -P -- ~/tmp/"$dir" # another pedantic use of -P for the case where
# your $HOME contains symlinks and ".." components
}
セミコロンは必要ありません。シェルプロンプトで次のように書くことができます。
cd /some/where
ls
いいえ
cd /some/where;
ls;
これはスクリプトでも変わりません。;
以下を使用して、1行からコマンドを区切ることができます。
cd /some/where; ls
ただし、次のように書くことをお勧めします。
cd /some/where && ls
ls
無条件に実行されるのではなく、cd
成功した場合にのみ実行されます。