• ベストアンサー

cygwinシェルスクリプト内でのエイリアス

cygwinのterminal上で alias abc=ls abc とやるとlsを実行したことになるのですが、 内容が #!/bin/bash alias abc=ls abc のa.shというシェルを作り実行すると、 ./a.sh: line 3: abc: コマンドが見つかりません というエラーが出て実行してくれません。 解決策が分かる方よろしくお願いします。

  • H9090
  • お礼率66% (4/6)

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

bashのスクリプトのことなら、まずは、bashのマニュアルを読むことです。 man bash で読めます。 ネット検索すれば、日本語訳も見つかります。 http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html マニュアルのAliasについての説明を読むと > シェルが対話的でないときには、 shopt コマンドによって expand_aliases オプションが設定されていない場合に限り、 エイリアスの展開は行われません シェルスクリプトは「対話的ではありません」 スクリプト中にエイリアス使うことは、あまりお勧めできません。思わぬものが展開されて、期待通りに動作しないことがあるからです。(例えば、 alias ls="rm -rf" などとなってたりしたら....)

H9090
質問者

お礼

ありがとうございました。意味がよくわかりました。 シェル内でのエイリアスは成功しましたが、うまく動かないことも多いということなので使わないことにします。

関連するQ&A

  • [シェルスクリプト内で bashコマンド後のコマンドが実行されない]

    [シェルスクリプト内で bashコマンド後のコマンドが実行されない] 以下の様にシェルスクリプトを記述するとコマンド2が実行されません。 #! /bin/sh コマンド1 bash コマンド2 bash環境でコマンド2を実行させるにはどうしたら良いのでしょうか?

  • msys(cygwin)で、シェルスクリプトのcdが動かないのは何故?

    msys(又はcygwin)で、シェルスクリプトに書いたcdが働きません。その解決方法を伺っても宜しいでしょうか?具体的には、下のような状況です。 [シェルスクリプト内容] #!/bin/bash echo cd前 cd testdir # ↑testdirは既存。コマンドラインから手打ちすると機能する! echo cd後 [実行結果の表示] cd前 : No such file or directory cd後 [環境] ・WinXP + 最新全パッチ適用 ・msysとcygwinをインストール 以上 どうか宜しくお願い致します。

  • Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれ

    Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれば良いのでしょうか? $ alias a="ls $1 -a" $ a dir . .. ls_nara_ok $ alias a="find $1 -type d" $ a dir find: pathes must precede expression: a lsではうまく行くのに、findではエラーとなってしまいます。 どうすればスクリプト(エイリアス)内のfindに引数を渡せるのでしょうか?

  • シェルスクリプトの作り方

    OSはVineで、bashシェルです。 シェルスクリプトの作り方ですが、 1.ファイルを作る。 例えば、 #!bin/sh cd tmp このとき、ディレクトリはどこでもいいのでしょうか? 2.権限を付ける。 chmod u+x filename 3.実行 ./filename 他に気をつけることはないでしょうか? 実行すると、 bash: ./filename: bad interpreter: そのようなファイルやディレクトリはありません となってしまって、どうしても実行できません。

  • シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。

    シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。 ファイル名を変更するシェルスクリプトをbashで行おうとプログラムを作成したのですが、 実行するとbad interpreter: ディレクトリではありません とメッセージが出て終了します。記述に誤りがあるのか、実行の仕方が悪いのか分かりません。教えて下さい。 シェルの記述内容は ファイル名をtest.sh #!/bin/bash/ -f mv A.txt A.ori exit 実行方法として #>chmod x+a test.sh #>./test.sh で行いました。そうしたら、bad interpreter: ディレクトリーではありません とメッセージが出ます。 ちなみに #>. test.sh で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。

  • 環境を区別して、動作を分岐させる方法 シェルスクリプト

    bashのシェルスクリプトで、Windows(cygwin)とLinuxの環境を区別して、動作を分岐させる方法が知りたいです。 #!/bin/bash #Windows(cygwin)の場合 ls win/ #linuxの場合 ls linux/ #freebsdの場合 ls freebsd/ #MacOSXの場合 ls mac/

  • 困ってます Cygwin で ls が実行できません

    はじめまして、勉強のために Cygwin をダウンロードしました。 しかし、実行できるコマンドとできないコマンドがあって困っています。 とりあえず例をあげますと、cd, pwd は動いて、ls は動きません。 なぜか ls.exe だと動きます。(オプションもOK) 以下にその bash のコマンド実行画面をコピペします。ユーザ名だけ隠させていただきます。 bash-3.2$ pwd /cygdrive/c/usr/ユーザ名 bash-3.2$ ls ls: invalid option -- Try `ls --help' for more informati bash-3.2$ ls.exe kterm.exe work bash-3.2$ cd work/ bash-3.2$ pwd /cygdrive/c/usr/ユーザ名/work ------------------------------- Cygwin を C:\cygwin にダウンロード後にしたことは3つです。 1.Windows の 環境変数 に HOME : C:\usr\ユーザ名 と   Path : C:\cygwin\bin;C:\cygwin\usr\local\bin; を追加。 2.bash の作業ディレクトリを C:\usr\ユーザ名 に設定。 3.C:\usr\ユーザ名 に .bashrc などを設置。 といった所だと思います。覚えていないだけかもしれませんが。 以上、よろしくお願いします。

  • シェルスクリプトの実行、「source」と「.」の違いについて

    bashのシェルスクリプトを書いています。 当方、Mac Snow Leopard を使っているため、seq コマンドがデフォルトでは使えません。 そこで、.bashrc 内に、seq 関数をあらかじめ自分で定義して、他で使い回したいと思っています。 .bashrc の中に、 function seq() { i=$1 while [ $i -le $2 ] ; do echo $i let i=$i+1 done } と、関数を定義しました。 seq 関数をターミナル上で実行すると、 >seq 0 2 0 1 2 と正しく、表示されます。次に、 #!/bin/sh seq 0 2 と記述したシェルスクリプト(temp.sh)を「source」で実行すると、 >source temp.sh 0 1 2 と正しく、表示されますが、「.」で実行すると、 >./temp.sh ./temp.sh: line 2: seq: command not found と言われます。 どのような理由によってこの違いが出るのでしょうか??

  • シェルスクリプトの1行目に#!を書いてもダメなのはなぜ?

    test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。

  • シェルスクリプト

    while文のシェルスクリプトでエラーが出て困っています。 どうすればいいでしょうか? 回答の程宜しくお願い致します。 #!/bin/bash count=1 while[$count -le 5] do touch "y$count" ls -l "y$count" coun ='expr $count+1' done [root@Linux root]# . makefile bash: while[1 -le 5]: command not found bash: makefile: line 4: syntax error near unexpected token `do' bash: makefile: line 4: `do'