Nautilusにブックマークを追加して、ユーザーをネットワーク共有にリダイレクトする小さなスクリプトを作成しました。スクリプトを手動で実行した場合、すばらしい動作をしますが、/ etc/profile.dにスクリプトを追加しようとするとすぐにコンピューターに接続できません。ループまたはそのような「派手な」何かを実行するとすぐに、スクリプトがエラーを出すようです。以下は、現在動作しているスクリプトの例です。
#!/bin/bash
# Creating gtk-bookmarks if it doesn't exists
if [[ ! -f ~/.gtk-bookmarks ]]
then
touch ~/.gtk-bookmarks
fi
# Adding bookmarks if not present
if ! grep -Fxq "smb://example.com/R03C01 Software:" ~/.gtk-bookmarks
then
echo "smb://example.com/R03C01 Software:" >> ~/.gtk-bookmarks
fi
このような関数ができたらすぐに:
####
# Function find_server_by_ip()
# Desc : This function find the server to use for the current Host IP Address
# Parameters : None
# Return : echo Server to use
####
function find_server_by_ip()
{
hostname_ip=$(hostname -I)
IFS="."
set -- $hostname_ip
if [[ $3 -eq 78 ]]
then
echo "Server A"
else
echo "Server B"
fi
}
...ログインが停止します。私を困らせているのは、このスクリプトを* bash add_shortcut.sh *または*。/ add_shortcut.sh *で実行するとうまく機能するということです...
/ etc/profileによって呼び出されるスクリプトでは、関数を作成したり、配列を解析したり、そのようなものを作成したりすることはできませんか?その場合、コンピューターに接続しているすべてのユーザーに対してログインスクリプトをどこで、またはどのように実行できますか?ああ、ところで私はUbuntu 12.04 LTSを実行しています!
事前に感謝し、私の英語を申し訳ありません!
編集:スクリプトのペーストビンがあります。スクリプトのコメントはフランス語なので、完全に追加することはしません...そうですね、 http://Pastebin.com/71XzaBk6 です。
/etc/profile.dの内容は、おそらくログイン時にウィンドウマネージャーによって供給され、おそらく/ bin/shを使用するため、bashではなくPOSIX Shellをターゲットとしてスクリプトを追加します。 _[[
_は、現在そこにあるスクリプトにはないことに注意してください。
そう、
[ ... ]
_よりも_[[ ... ]]
_を選択しますfunction
キーワードなしでfuncname() { ... }
を使用しますdashはPOSIX(のみ)シェルであるため、 dashのmanページ が便利です
http://Pastebin.com/71XzaBk6 に対するコメント
これが主なエラーです:変更
_if [[ ! -f ~/.gtk-bookmarks ]]
_
に
_ if [ ! -f ~/.gtk-bookmarks ]
_
_find_server_by_ip
_関数は単純化できます:
_findserverbyip() {
case "$(hostname -I)" in
*[0-9].33.9.[0-9]*) share_server=serverB ;;
*) share_server=serverA ;;
esac
}
_
また、このコメントは誤解を招くものです。関数は何も返さず、副作用があります。
_# Return : echo Server to use
_
shebang行を削除することもできます。このスクリプトは実行されず、ソースされます。