アプリ版:「スタンプのみでお礼する」機能のリリースについて

[hoge@localhost ~]$ env TESTVAL=1 cd /home
env: cd: そのようなファイルやディレクトリはありません
上記のエラーが発生します。
Envとcdは同時に実行できないのでしょうか?

A 回答 (3件)

env は外部コマンド(ユーティリティソフト)を実行します。



ディストリビューションによって必ずしもとはいえないと思いますが
エラーを発生したディストリビューションではcdコマンドが外部
コマンドとして用意されていなかったのでしょう。
※ 外部コマンドとして用意されていても普通には使われる事が
ないでしょうし、使えても混乱するだけだと思います。
==========
-= 存在するFreeBSDで試してみると
1= %cd /tmp
2= %pwd
3= /tmp
4= %/usr/bin/cd /usr
5= %pwd
6= /tmp
7= %
=======
4のcd(外部コマンド)は、cdが実行されるプロセス(対話シェルの
子プロセス)のカレントディレクトリを/usrに変更するが、その
cdコマンドが終了した時にその環境は破棄されるので対話シェル
の環境は変わらない。cd コマンドがシェルの内部コマンドとして
実装されている理由はシェルから見て自身の内部で実行する事に
よって自身の環境(カレントディレクトリ)を設定するため。
外部コマンドとして用意してもあまり意味はない。
==========

そんな場合には cd は sh系シェルやcsh系シェルの内部コマンド
(builtinコマンド)なので外部コマンドとしては存在してません。

そのため、無理に使いたいなら次のような形式で行えば使える
かも知れません。

% env TESTVAL=1 csh -c "cd /home ; ls"
user1 user2 user3

※ ls はcd が実行された事を確認するために追加してます


私の常用しているFreeBSDにはcdコマンドが外部コマンドとしても
用意されています。その内容はシェルスクリプトなのですが。

% file /usr/bin/cd
/usr/bin/cd: Bourne shell script text executable
% cat /usr/bin/cd
#!/bin/sh
# $FreeBSD: src/usr.bin/alias/generic.sh,v 1.1.16.1 2005/11/04 18:21:37 cperciva Exp $
# This file is in the public domain.
builtin ${0##*/} ${1+"$@"}
    • good
    • 0

うん?


何をしたいのか, ちょっと理解しかねます.
単純に cd してから環境変数を設定すればいいだけ?
    • good
    • 0

コマンドをセミコロン(;)で区切りましょう。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!